diff --git a/DEPS b/DEPS
index 6798433..227e4fa 100644
--- a/DEPS
+++ b/DEPS
@@ -167,11 +167,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'a4828a13c27a0bbd2a2b9169916a0b4d58853df4',
+  'skia_revision': '7d7aaf46aeb450b983ff5ac8833d6ca3065671a8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'e20a46d98b931f30e20fcb1928a0522cd3dd2f57',
+  'v8_revision': 'a6ff36bd0ab90ed1a1050b460a546dbf7a1bb351',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -179,11 +179,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'da1f90aa77b4fc5dcb6a5d17def690d3b01e9c1d',
+  'angle_revision': 'e7b5c5e99289f3f0f9768308d05941a2e98f839b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '1c462ebc904cee7d85a0881a12fa1d42f3b2a9ff',
+  'swiftshader_revision': 'fb632b91110cabce297c34b8c01ec8c931a10933',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -302,7 +302,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': 'b6acae6d353d3a4b9b9054a72239144ead122f8d',
+  'dawn_revision': 'ba9e1ff86fa47141fc25a5d1569b13cb5ec916a9',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -753,7 +753,7 @@
     Var('chromium_git') + '/angle/angle.git' + '@' +  Var('angle_revision'),
 
   'src/third_party/dav1d/libdav1d':
-    Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + 'a91a03b0e143f77bd647b481aff034eb3315ee7b',
+    Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + '62fcd0cb19d2fe46af7541d8185de86d45d58697',
 
   'src/third_party/dawn':
     Var('dawn_git') + '/dawn.git' + '@' +  Var('dawn_revision'),
@@ -862,7 +862,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '9bc8545214f911371665a3cfa9f0cf93aac9f25d',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '8cd95dd1d376f4cdb56a6b40e933cfbcd3eb4a8d',
       'condition': 'checkout_linux',
   },
 
@@ -887,7 +887,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '033004652fafc4d03325d5ec5dd415ddf72462a1',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'e16ffffc28f3985c98cfc495840e93d9afa8884e',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -1280,7 +1280,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '8dda56311c7ded002f01dcb15bfe5310888ff5b8',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '624e60f811113ab4f8d604dc65e7cfef773df5cb',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
diff --git a/android_webview/browser/aw_feature_list_creator.cc b/android_webview/browser/aw_feature_list_creator.cc
index fdb0b75..69816fd7 100644
--- a/android_webview/browser/aw_feature_list_creator.cc
+++ b/android_webview/browser/aw_feature_list_creator.cc
@@ -52,6 +52,7 @@
     // experiment groups.
     metrics::prefs::kMetricsLowEntropySource,
     // Logged directly in the ChromeUserMetricsExtension proto.
+    metrics::prefs::kInstallDate,
     metrics::prefs::kMetricsSessionID,
     // Current and past country codes, to filter variations studies by country.
     variations::prefs::kVariationsCountry,
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.cc b/android_webview/browser/metrics/aw_metrics_service_client.cc
index f4078a2..ef38aaf 100644
--- a/android_webview/browser/metrics/aw_metrics_service_client.cc
+++ b/android_webview/browser/metrics/aw_metrics_service_client.cc
@@ -17,6 +17,7 @@
 #include "base/hash/hash.h"
 #include "base/i18n/rtl.h"
 #include "base/lazy_instance.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/strings/string16.h"
 #include "components/metrics/call_stack_profile_metrics_provider.h"
 #include "components/metrics/cpu_metrics_provider.h"
@@ -121,6 +122,39 @@
   return service;
 }
 
+// Queries the system for the app's first install time and uses this in the
+// kInstallDate pref. Must be called before created a MetricsStateManager.
+// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has
+// been persisted for one or two milestones.
+void PopulateSystemInstallDateIfNecessary(PrefService* prefs) {
+  int64_t install_date = prefs->GetInt64(metrics::prefs::kInstallDate);
+  if (install_date > 0) {
+    // kInstallDate appears to be valid (common case). Finish early as an
+    // optimization to avoid a JNI call below.
+    base::UmaHistogramEnumeration("Android.WebView.Metrics.BackfillInstallDate",
+                                  BackfillInstallDate::kValidInstallDatePref);
+    return;
+  }
+
+  JNIEnv* env = base::android::AttachCurrentThread();
+  int64_t system_install_date =
+      Java_AwMetricsServiceClient_getAppInstallTime(env);
+  if (system_install_date < 0) {
+    // Could not figure out install date from the system. Let the
+    // MetricsStateManager set this pref to its best guess for a reasonable
+    // time.
+    base::UmaHistogramEnumeration(
+        "Android.WebView.Metrics.BackfillInstallDate",
+        BackfillInstallDate::kCouldNotGetPackageManagerInstallDate);
+    return;
+  }
+
+  base::UmaHistogramEnumeration(
+      "Android.WebView.Metrics.BackfillInstallDate",
+      BackfillInstallDate::kPersistedPackageManagerInstallDate);
+  prefs->SetInt64(metrics::prefs::kInstallDate, system_install_date);
+}
+
 }  // namespace
 
 // static
@@ -139,6 +173,7 @@
 
   pref_service_ = pref_service;
 
+  PopulateSystemInstallDateIfNecessary(pref_service_);
   metrics_state_manager_ = metrics::MetricsStateManager::Create(
       pref_service_, this, base::string16(),
       base::BindRepeating(&StoreClientInfo),
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.h b/android_webview/browser/metrics/aw_metrics_service_client.h
index 1c8b4e1..431ad3e 100644
--- a/android_webview/browser/metrics/aw_metrics_service_client.h
+++ b/android_webview/browser/metrics/aw_metrics_service_client.h
@@ -24,6 +24,17 @@
 
 namespace android_webview {
 
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has
+// been persisted for one or two milestones. Visible for testing.
+enum class BackfillInstallDate {
+  kValidInstallDatePref = 0,
+  kCouldNotGetPackageManagerInstallDate = 1,
+  kPersistedPackageManagerInstallDate = 2,
+  kMaxValue = kPersistedPackageManagerInstallDate,
+};
+
 // AwMetricsServiceClient is a singleton which manages WebView metrics
 // collection.
 //
diff --git a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc
index cb937e9..94a4fa02 100644
--- a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc
+++ b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
 #include "components/metrics/metrics_pref_names.h"
@@ -179,4 +180,41 @@
   ASSERT_FALSE(client->IsRecordingActive());
 }
 
+// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has
+// been persisted for one or two milestones.
+TEST_F(AwMetricsServiceClientTest, TestPreferPersistedInstallDate) {
+  base::HistogramTester histogram_tester;
+  auto prefs = CreateTestPrefs();
+  int64_t install_date = 12345;
+  prefs->SetInt64(metrics::prefs::kInstallDate, install_date);
+  auto client = CreateAndInitTestClient(prefs.get());
+  ASSERT_EQ(install_date, prefs->GetInt64(metrics::prefs::kInstallDate));
+
+  // Verify the histogram.
+  histogram_tester.ExpectBucketCount(
+      "Android.WebView.Metrics.BackfillInstallDate",
+      BackfillInstallDate::kValidInstallDatePref, 1);
+  histogram_tester.ExpectTotalCount(
+      "Android.WebView.Metrics.BackfillInstallDate", 1);
+}
+
+// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has
+// been persisted for one or two milestones.
+TEST_F(AwMetricsServiceClientTest, TestGetInstallDateFromJavaIfMissing) {
+  base::HistogramTester histogram_tester;
+  auto prefs = CreateTestPrefs();
+  auto client = CreateAndInitTestClient(prefs.get());
+  // All we can safely assert is the install time is set, since checking the
+  // actual time is racy (ex. in the unlikely scenario if this test executes in
+  // the same millisecond as when the package was installed).
+  ASSERT_TRUE(prefs->HasPrefPath(metrics::prefs::kInstallDate));
+
+  // Verify the histogram.
+  histogram_tester.ExpectBucketCount(
+      "Android.WebView.Metrics.BackfillInstallDate",
+      BackfillInstallDate::kPersistedPackageManagerInstallDate, 1);
+  histogram_tester.ExpectTotalCount(
+      "Android.WebView.Metrics.BackfillInstallDate", 1);
+}
+
 }  // namespace android_webview
diff --git a/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java
index 02c9e85..4f2bb94 100644
--- a/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java
@@ -66,6 +66,28 @@
         return shouldRecordPackageName(ctx) ? ctx.getPackageName() : null;
     }
 
+    /**
+     * Gets a long representing the install time of the embedder application. Units are in seconds,
+     * as this is the resolution used by the metrics service. Returns {@code -1} upon failure.
+     */
+    // TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has been persisted
+    // for one or two milestones.
+    @CalledByNative
+    private static long getAppInstallTime() {
+        try {
+            Context ctx = ContextUtils.getApplicationContext();
+            long installTimeMs = ctx.getPackageManager()
+                                         .getPackageInfo(ctx.getPackageName(), 0 /* flags */)
+                                         .firstInstallTime;
+            long installTimeSec = installTimeMs / 1000;
+            return installTimeSec;
+        } catch (PackageManager.NameNotFoundException e) {
+            // This should never happen.
+            Log.e(TAG, "App could not find itself by package name!");
+            return -1;
+        }
+    }
+
     @NativeMethods
     interface Natives {
         void setHaveMetricsConsent(boolean userConsent, boolean appConsent);
diff --git a/ash/accelerators/accelerator_confirmation_dialog.cc b/ash/accelerators/accelerator_confirmation_dialog.cc
index 55c570a..55c00b2e 100644
--- a/ash/accelerators/accelerator_confirmation_dialog.cc
+++ b/ash/accelerators/accelerator_confirmation_dialog.cc
@@ -28,6 +28,9 @@
     base::OnceClosure on_accept_callback)
     : window_title_(l10n_util::GetStringUTF16(window_title_text_id)),
       on_accept_callback_(std::move(on_accept_callback)) {
+  DialogDelegate::set_button_label(
+      ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON));
+
   SetLayoutManager(std::make_unique<views::FillLayout>());
   SetBorder(views::CreateEmptyBorder(
       views::LayoutProvider::Get()->GetDialogInsetsForContentType(
@@ -69,13 +72,6 @@
   return window_title_;
 }
 
-base::string16 AcceleratorConfirmationDialog::GetDialogButtonLabel(
-    ui::DialogButton button) const {
-  if (button == ui::DIALOG_BUTTON_OK)
-    return l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON);
-  return views::DialogDelegateView::GetDialogButtonLabel(button);
-}
-
 base::WeakPtr<AcceleratorConfirmationDialog>
 AcceleratorConfirmationDialog::GetWeakPtr() {
   return weak_ptr_factory_.GetWeakPtr();
diff --git a/ash/accelerators/accelerator_confirmation_dialog.h b/ash/accelerators/accelerator_confirmation_dialog.h
index 02d06c5..cd9afbf 100644
--- a/ash/accelerators/accelerator_confirmation_dialog.h
+++ b/ash/accelerators/accelerator_confirmation_dialog.h
@@ -26,7 +26,6 @@
   bool Accept() override;
   ui::ModalType GetModalType() const override;
   base::string16 GetWindowTitle() const override;
-  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
 
   base::WeakPtr<AcceleratorConfirmationDialog> GetWeakPtr();
 
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc
index 470d56f..4a5953710 100644
--- a/ash/accelerators/accelerator_controller_impl.cc
+++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -596,7 +596,7 @@
   Shell::Get()->screenshot_controller()->TakeScreenshotForAllRootWindows();
 }
 
-void HandleToggleSystemTrayBubbleInternal() {
+void HandleToggleSystemTrayBubbleInternal(bool focus_message_center) {
   aura::Window* target_root = Shell::GetRootWindowForNewWindows();
   UnifiedSystemTray* tray = RootWindowController::ForWindow(target_root)
                                 ->GetStatusAreaWidget()
@@ -606,17 +606,20 @@
   } else {
     tray->ShowBubble(false /* show_by_click */);
     tray->ActivateBubble();
+
+    if (focus_message_center)
+      tray->FocusFirstNotification();
   }
 }
 
 void HandleToggleSystemTrayBubble() {
   base::RecordAction(UserMetricsAction("Accel_Toggle_System_Tray_Bubble"));
-  HandleToggleSystemTrayBubbleInternal();
+  HandleToggleSystemTrayBubbleInternal(false /*focus_message_center*/);
 }
 
 void HandleToggleMessageCenterBubble() {
   base::RecordAction(UserMetricsAction("Accel_Toggle_Message_Center_Bubble"));
-  HandleToggleSystemTrayBubbleInternal();
+  HandleToggleSystemTrayBubbleInternal(true /*focus_message_center*/);
 }
 
 void HandleShowTaskManager() {
diff --git a/ash/app_list/views/app_list_item_view.cc b/ash/app_list/views/app_list_item_view.cc
index b1e65fd..36af280 100644
--- a/ash/app_list/views/app_list_item_view.cc
+++ b/ash/app_list/views/app_list_item_view.cc
@@ -959,6 +959,11 @@
 void AppListItemView::AdaptBoundsForSelectionHighlight(gfx::Rect* bounds) {
   bounds->Inset(0, 0, 0, GetAppListConfig().grid_icon_bottom_padding());
   bounds->ClampToCenteredSize(GetAppListConfig().grid_focus_size());
+  // Update the bounds to account for the focus ring width - by default, the
+  // focus ring is painted so the highlight bounds are centered within the
+  // focus ring stroke - this should be overridden so the outer stroke bounds
+  // match the grid focus size set in the app list config.
+  bounds->Inset(gfx::Insets(kFocusRingWidth / 2));
 }
 
 }  // namespace ash
diff --git a/ash/app_list/views/remove_query_confirmation_dialog.cc b/ash/app_list/views/remove_query_confirmation_dialog.cc
index 54ee43e..f4133b2 100644
--- a/ash/app_list/views/remove_query_confirmation_dialog.cc
+++ b/ash/app_list/views/remove_query_confirmation_dialog.cc
@@ -30,6 +30,12 @@
     : confirm_callback_(std::move(confirm_callback)),
       event_flags_(event_flags),
       contents_view_(contents_view) {
+  DialogDelegate::set_button_label(
+      ui::DIALOG_BUTTON_OK,
+      l10n_util::GetStringUTF16(IDS_REMOVE_SUGGESTION_BUTTON_LABEL));
+  DialogDelegate::set_button_label(ui::DIALOG_BUTTON_CANCEL,
+                                   l10n_util::GetStringUTF16(IDS_APP_CANCEL));
+
   const views::LayoutProvider* provider = views::LayoutProvider::Get();
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical,
@@ -72,13 +78,6 @@
   return false;
 }
 
-base::string16 RemoveQueryConfirmationDialog::GetDialogButtonLabel(
-    ui::DialogButton button) const {
-  return button == ui::DIALOG_BUTTON_CANCEL
-             ? l10n_util::GetStringUTF16(IDS_APP_CANCEL)
-             : l10n_util::GetStringUTF16(IDS_REMOVE_SUGGESTION_BUTTON_LABEL);
-}
-
 bool RemoveQueryConfirmationDialog::Accept() {
   if (confirm_callback_)
     std::move(confirm_callback_).Run(true, event_flags_);
diff --git a/ash/app_list/views/remove_query_confirmation_dialog.h b/ash/app_list/views/remove_query_confirmation_dialog.h
index 1c7bebf..a6297ed 100644
--- a/ash/app_list/views/remove_query_confirmation_dialog.h
+++ b/ash/app_list/views/remove_query_confirmation_dialog.h
@@ -43,7 +43,6 @@
   bool ShouldShowCloseButton() const override;
 
   // views::DialogDelegate:
-  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
   bool Accept() override;
   bool Cancel() override;
 
diff --git a/ash/public/cpp/app_list/app_list_features.cc b/ash/public/cpp/app_list/app_list_features.cc
index 5ababce..56fe098 100644
--- a/ash/public/cpp/app_list/app_list_features.cc
+++ b/ash/public/cpp/app_list/app_list_features.cc
@@ -47,6 +47,8 @@
                                      base::FEATURE_ENABLED_BY_DEFAULT};
 const base::Feature kEnableFuzzyAppSearch{"EnableFuzzyAppSearch",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kEnableAggregatedMlSearchRanking{
+    "EnableAggregatedMlSearchRanking", base::FEATURE_DISABLED_BY_DEFAULT};
 
 bool IsAnswerCardEnabled() {
   // Not using local static variable to allow tests to change this value.
@@ -120,6 +122,10 @@
   return base::FeatureList::IsEnabled(kEnableFuzzyAppSearch);
 }
 
+bool IsAggregatedMlSearchRankingEnabled() {
+  return base::FeatureList::IsEnabled(kEnableAggregatedMlSearchRanking);
+}
+
 std::string AnswerServerUrl() {
   const std::string experiment_url =
       base::GetFieldTrialParamValueByFeature(kEnableAnswerCard, "ServerUrl");
diff --git a/ash/public/cpp/app_list/app_list_features.h b/ash/public/cpp/app_list/app_list_features.h
index 48d06ef6..b5154752 100644
--- a/ash/public/cpp/app_list/app_list_features.h
+++ b/ash/public/cpp/app_list/app_list_features.h
@@ -77,6 +77,10 @@
 // that optionally gets scaled down).
 ASH_PUBLIC_EXPORT extern const base::Feature kScalableAppList;
 
+// Enables using aggregated model in ranking non-app results for
+// non empty queries.
+ASH_PUBLIC_EXPORT extern const base::Feature kEnableAggregatedMlSearchRanking;
+
 bool ASH_PUBLIC_EXPORT IsAnswerCardEnabled();
 bool ASH_PUBLIC_EXPORT IsPlayStoreAppSearchEnabled();
 bool ASH_PUBLIC_EXPORT IsAppDataSearchEnabled();
@@ -95,6 +99,7 @@
 bool ASH_PUBLIC_EXPORT IsAggregatedMlAppRankingEnabled();
 bool ASH_PUBLIC_EXPORT IsScalableAppListEnabled();
 bool ASH_PUBLIC_EXPORT IsFuzzyAppSearchEnabled();
+bool ASH_PUBLIC_EXPORT IsAggregatedMlSearchRankingEnabled();
 
 std::string ASH_PUBLIC_EXPORT AnswerServerUrl();
 std::string ASH_PUBLIC_EXPORT AnswerServerQuerySuffix();
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index 5e06d99..3e19435 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -790,7 +790,7 @@
   display::Screen* screen = display::Screen::GetScreen();
   if (screen->GetDisplayNearestWindow(root_window).id() ==
       screen->GetPrimaryDisplay().id()) {
-    split_view_controller_ = std::make_unique<SplitViewController>();
+    split_view_controller_ = std::make_unique<SplitViewController>(root_window);
   }
   Shell* shell = Shell::Get();
   shell->InitRootWindow(root_window);
diff --git a/ash/session/session_aborted_dialog.cc b/ash/session/session_aborted_dialog.cc
index 1b0a2959..f99dfa5 100644
--- a/ash/session/session_aborted_dialog.cc
+++ b/ash/session/session_aborted_dialog.cc
@@ -57,12 +57,6 @@
   return ui::DIALOG_BUTTON_OK;
 }
 
-base::string16 SessionAbortedDialog::GetDialogButtonLabel(
-    ui::DialogButton button) const {
-  return l10n_util::GetStringUTF16(
-      IDS_ASH_MULTIPROFILES_SESSION_ABORT_BUTTON_LABEL);
-}
-
 ui::ModalType SessionAbortedDialog::GetModalType() const {
   return ui::MODAL_TYPE_SYSTEM;
 }
@@ -82,7 +76,13 @@
       GetLayoutManager()->GetPreferredHeightForWidth(this, kDefaultWidth));
 }
 
-SessionAbortedDialog::SessionAbortedDialog() = default;
+SessionAbortedDialog::SessionAbortedDialog() {
+  DialogDelegate::set_button_label(
+      ui::DIALOG_BUTTON_OK,
+      l10n_util::GetStringUTF16(
+          IDS_ASH_MULTIPROFILES_SESSION_ABORT_BUTTON_LABEL));
+}
+
 SessionAbortedDialog::~SessionAbortedDialog() = default;
 
 void SessionAbortedDialog::InitDialog(const std::string& user_email) {
diff --git a/ash/session/session_aborted_dialog.h b/ash/session/session_aborted_dialog.h
index fe0714fc..01b1d3f 100644
--- a/ash/session/session_aborted_dialog.h
+++ b/ash/session/session_aborted_dialog.h
@@ -21,7 +21,6 @@
   // views::DialogDelegate overrides.
   bool Accept() override;
   int GetDialogButtons() const override;
-  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
 
   // views::WidgetDelegate overrides.
   ui::ModalType GetModalType() const override;
diff --git a/ash/shelf/shelf_navigation_widget.cc b/ash/shelf/shelf_navigation_widget.cc
index a021406..04a2626 100644
--- a/ash/shelf/shelf_navigation_widget.cc
+++ b/ash/shelf/shelf_navigation_widget.cc
@@ -33,13 +33,6 @@
          Shell::Get()->tablet_mode_controller()->InTabletMode();
 }
 
-// Returns the desired spacing between the back and home buttons.
-int GetButtonSpacing() {
-  if (IsTabletMode() && ShelfConfig::Get()->is_in_app())
-    return 0;
-  return ShelfConfig::Get()->button_spacing();
-}
-
 // Returns the bounds for the first button shown in this view (the back
 // button in tablet mode, the home button otherwise).
 gfx::Rect GetFirstButtonBounds() {
@@ -51,9 +44,10 @@
 // always the home button and only in tablet mode, which implies a horizontal
 // shelf).
 gfx::Rect GetSecondButtonBounds() {
-  return gfx::Rect(ShelfConfig::Get()->control_size() + GetButtonSpacing(), 0,
-                   ShelfConfig::Get()->control_size(),
-                   ShelfConfig::Get()->control_size());
+  return gfx::Rect(
+      ShelfConfig::Get()->control_size() + ShelfConfig::Get()->button_spacing(),
+      0, ShelfConfig::Get()->control_size(),
+      ShelfConfig::Get()->control_size());
 }
 
 }  // namespace
@@ -235,7 +229,8 @@
   if (!shelf_->IsHorizontalAlignment())
     return gfx::Size(control_size, control_size);
   return gfx::Size(
-      IsTabletMode() ? (2 * control_size + GetButtonSpacing()) : control_size,
+      IsTabletMode() ? (2 * control_size + ShelfConfig::Get()->button_spacing())
+                     : control_size,
       control_size);
 }
 
diff --git a/ash/system/accessibility/accessibility_feature_disable_dialog.cc b/ash/system/accessibility/accessibility_feature_disable_dialog.cc
index 30e1fb2..0b937c1 100644
--- a/ash/system/accessibility/accessibility_feature_disable_dialog.cc
+++ b/ash/system/accessibility/accessibility_feature_disable_dialog.cc
@@ -29,6 +29,9 @@
     : window_title_(l10n_util::GetStringUTF16(window_title_text_id)),
       on_accept_callback_(std::move(on_accept_callback)),
       on_cancel_callback_(std::move(on_cancel_callback)) {
+  DialogDelegate::set_button_label(
+      ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_ASH_YES_BUTTON));
+
   SetLayoutManager(std::make_unique<views::FillLayout>());
   SetBorder(views::CreateEmptyBorder(
       views::LayoutProvider::Get()->GetDialogInsetsForContentType(
@@ -76,13 +79,6 @@
   return window_title_;
 }
 
-base::string16 AccessibilityFeatureDisableDialog::GetDialogButtonLabel(
-    ui::DialogButton button) const {
-  if (button == ui::DIALOG_BUTTON_OK)
-    return l10n_util::GetStringUTF16(IDS_ASH_YES_BUTTON);
-  return views::DialogDelegateView::GetDialogButtonLabel(button);
-}
-
 base::WeakPtr<AccessibilityFeatureDisableDialog>
 AccessibilityFeatureDisableDialog::GetWeakPtr() {
   return weak_ptr_factory_.GetWeakPtr();
@@ -92,4 +88,4 @@
   return "AccessibilityFeatureDisableDialog";
 }
 
-}  // namespace ash
\ No newline at end of file
+}  // namespace ash
diff --git a/ash/system/accessibility/accessibility_feature_disable_dialog.h b/ash/system/accessibility/accessibility_feature_disable_dialog.h
index c26ef13..dc1986da 100644
--- a/ash/system/accessibility/accessibility_feature_disable_dialog.h
+++ b/ash/system/accessibility/accessibility_feature_disable_dialog.h
@@ -30,7 +30,6 @@
   bool Accept() override;
   ui::ModalType GetModalType() const override;
   base::string16 GetWindowTitle() const override;
-  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
 
   base::WeakPtr<AccessibilityFeatureDisableDialog> GetWeakPtr();
 
@@ -50,4 +49,4 @@
 
 }  // namespace ash
 
-#endif  // ASH_SYSTEM_ACCESSIBILITY_ACCESSIBILITY_FEATURE_DISABLE_DIALOG_H_
\ No newline at end of file
+#endif  // ASH_SYSTEM_ACCESSIBILITY_ACCESSIBILITY_FEATURE_DISABLE_DIALOG_H_
diff --git a/ash/system/message_center/unified_message_center_bubble.cc b/ash/system/message_center/unified_message_center_bubble.cc
index ed39f9d..52e3091 100644
--- a/ash/system/message_center/unified_message_center_bubble.cc
+++ b/ash/system/message_center/unified_message_center_bubble.cc
@@ -93,6 +93,10 @@
   return tray_->FocusQuickSettings(reverse);
 }
 
+void UnifiedMessageCenterBubble::FocusFirstNotification() {
+  message_center_view_->GetFocusManager()->AdvanceFocus(false /*reverse*/);
+}
+
 bool UnifiedMessageCenterBubble::IsMessageCenterVisible() {
   return message_center_view_->GetVisible();
 }
diff --git a/ash/system/message_center/unified_message_center_bubble.h b/ash/system/message_center/unified_message_center_bubble.h
index d9e44f9..e16b322 100644
--- a/ash/system/message_center/unified_message_center_bubble.h
+++ b/ash/system/message_center/unified_message_center_bubble.h
@@ -38,6 +38,9 @@
   // Relinquish focus and transfer it to the quick settings widget.
   bool FocusOut(bool reverse);
 
+  // Move focus to the first notification.
+  void FocusFirstNotification();
+
   // Returns true if notifications are shown.
   bool IsMessageCenterVisible();
 
diff --git a/ash/system/session/logout_confirmation_dialog.cc b/ash/system/session/logout_confirmation_dialog.cc
index fdba529..236ba1b 100644
--- a/ash/system/session/logout_confirmation_dialog.cc
+++ b/ash/system/session/logout_confirmation_dialog.cc
@@ -37,6 +37,10 @@
     LogoutConfirmationController* controller,
     base::TimeTicks logout_time)
     : controller_(controller), logout_time_(logout_time) {
+  DialogDelegate::set_button_label(
+      ui::DIALOG_BUTTON_OK,
+      l10n_util::GetStringUTF16(IDS_ASH_LOGOUT_CONFIRMATION_BUTTON));
+
   SetLayoutManager(std::make_unique<views::FillLayout>());
   SetBorder(views::CreateEmptyBorder(
       views::LayoutProvider::Get()->GetDialogInsetsForContentType(
@@ -81,13 +85,6 @@
   return true;
 }
 
-base::string16 LogoutConfirmationDialog::GetDialogButtonLabel(
-    ui::DialogButton button) const {
-  if (button == ui::DIALOG_BUTTON_OK)
-    return l10n_util::GetStringUTF16(IDS_ASH_LOGOUT_CONFIRMATION_BUTTON);
-  return views::DialogDelegateView::GetDialogButtonLabel(button);
-}
-
 ui::ModalType LogoutConfirmationDialog::GetModalType() const {
   return ui::MODAL_TYPE_SYSTEM;
 }
diff --git a/ash/system/session/logout_confirmation_dialog.h b/ash/system/session/logout_confirmation_dialog.h
index c395f3f..864369bb 100644
--- a/ash/system/session/logout_confirmation_dialog.h
+++ b/ash/system/session/logout_confirmation_dialog.h
@@ -34,7 +34,6 @@
 
   // views::DialogDelegateView:
   bool Accept() override;
-  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
 
   // views::WidgetDelegate:
   ui::ModalType GetModalType() const override;
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc
index d5e658a..27380fd 100644
--- a/ash/system/unified/unified_system_tray.cc
+++ b/ash/system/unified/unified_system_tray.cc
@@ -217,6 +217,14 @@
   ui_delegate_->SetTrayBubbleHeight(height);
 }
 
+void UnifiedSystemTray::FocusFirstNotification() {
+  if (!features::IsUnifiedMessageCenterRefactorEnabled())
+    return;
+
+  FocusMessageCenter(false /*reverse*/);
+  message_center_bubble()->FocusFirstNotification();
+}
+
 bool UnifiedSystemTray::FocusMessageCenter(bool reverse) {
   if (!IsMessageCenterBubbleShown())
     return false;
diff --git a/ash/system/unified/unified_system_tray.h b/ash/system/unified/unified_system_tray.h
index 361d1cb3..6d49c7d7 100644
--- a/ash/system/unified/unified_system_tray.h
+++ b/ash/system/unified/unified_system_tray.h
@@ -100,6 +100,9 @@
   // bubble is shown.
   void SetTrayBubbleHeight(int height);
 
+  // Focus the first notification in the message center.
+  void FocusFirstNotification();
+
   bool FocusMessageCenter(bool reverse);
 
   bool FocusQuickSettings(bool reverse);
diff --git a/ash/system/unified/unified_system_tray_bubble.cc b/ash/system/unified/unified_system_tray_bubble.cc
index e349ab5..0657470 100644
--- a/ash/system/unified/unified_system_tray_bubble.cc
+++ b/ash/system/unified/unified_system_tray_bubble.cc
@@ -299,15 +299,9 @@
 
   // Don't close the bubble if the message center is gaining or losing
   // activation.
-  if (features::IsUnifiedMessageCenterRefactorEnabled() &&
-      tray_->IsMessageCenterBubbleShown()) {
-    views::Widget* message_center_widget =
-        tray_->message_center_bubble()->GetBubbleWidget();
-    if (message_center_widget ==
-            views::Widget::GetWidgetForNativeView(gained_active) ||
-        (lost_active &&
-         message_center_widget ==
-             views::Widget::GetWidgetForNativeView(lost_active))) {
+  if (features::IsUnifiedMessageCenterRefactorEnabled()) {
+    if (GetContainerForWindow(gained_active) ==
+        GetContainerForWindow(lost_active)) {
       return;
     }
   }
diff --git a/ash/wm/base_state.cc b/ash/wm/base_state.cc
index b7306d4..ca6e731 100644
--- a/ash/wm/base_state.cc
+++ b/ash/wm/base_state.cc
@@ -188,9 +188,9 @@
   if (ShouldAllowSplitView()) {
     bounds_in_parent =
         SplitViewController::Get()->GetSnappedWindowBoundsInParent(
-            window, (state_type == WindowStateType::kLeftSnapped)
-                        ? SplitViewController::LEFT
-                        : SplitViewController::RIGHT);
+            (state_type == WindowStateType::kLeftSnapped)
+                ? SplitViewController::LEFT
+                : SplitViewController::RIGHT);
   } else {
     bounds_in_parent = (state_type == WindowStateType::kLeftSnapped)
                            ? GetDefaultLeftSnappedWindowBoundsInParent(window)
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc
index bdd7fc3..c93cf4f 100644
--- a/ash/wm/overview/overview_grid.cc
+++ b/ash/wm/overview/overview_grid.cc
@@ -258,8 +258,8 @@
        SplitViewController::LEFT)
           ? SplitViewController::RIGHT
           : SplitViewController::LEFT;
-  gfx::Rect bounds = split_view_controller->GetSnappedWindowBoundsInScreen(
-      root_window, opposite_position);
+  gfx::Rect bounds =
+      split_view_controller->GetSnappedWindowBoundsInScreen(opposite_position);
   if (!divider_changed)
     return bounds;
 
@@ -316,10 +316,10 @@
   switch (state) {
     case SplitViewController::State::kLeftSnapped:
       return split_view_controller->GetSnappedWindowBoundsInScreen(
-          window, SplitViewController::RIGHT);
+          SplitViewController::RIGHT);
     case SplitViewController::State::kRightSnapped:
       return split_view_controller->GetSnappedWindowBoundsInScreen(
-          window, SplitViewController::LEFT);
+          SplitViewController::LEFT);
     default:
       return screen_util::
           GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(window);
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc
index d36e43d..87a5231f 100644
--- a/ash/wm/overview/overview_session_unittest.cc
+++ b/ash/wm/overview/overview_session_unittest.cc
@@ -1251,8 +1251,10 @@
 }
 
 // Tests that dragging a window from the top of a display creates a drop target
-// on that display.
-TEST_P(OverviewSessionTest, DropTargetOnCorrectDisplayForDraggingFromTop) {
+// on that display. The workflow will be real after the tablet disambiguation
+// work. Until then, this test can safely be disabled.
+TEST_P(OverviewSessionTest,
+       DISABLED_DropTargetOnCorrectDisplayForDraggingFromTop) {
   UpdateDisplay("600x600,600x600");
   EnterTabletMode();
   // DisplayConfigurationObserver enables mirror mode when tablet mode is
@@ -1329,7 +1331,7 @@
   EXPECT_FALSE(GetDropTarget(1));
   gfx::PointF drag_point = primary_screen_item->target_bounds().CenterPoint();
   overview_session()->InitiateDrag(primary_screen_item, drag_point,
-                                   /*is_touch_dragging=*/false);
+                                   /*is_touch_dragging=*/true);
   EXPECT_FALSE(GetDropTarget(0));
   EXPECT_FALSE(GetDropTarget(1));
   drag_point.Offset(5.f, 0.f);
@@ -1342,7 +1344,7 @@
   EXPECT_FALSE(GetDropTarget(1));
   drag_point = secondary_screen_item->target_bounds().CenterPoint();
   overview_session()->InitiateDrag(secondary_screen_item, drag_point,
-                                   /*is_touch_dragging=*/false);
+                                   /*is_touch_dragging=*/true);
   EXPECT_FALSE(GetDropTarget(0));
   EXPECT_FALSE(GetDropTarget(1));
   drag_point.Offset(5.f, 0.f);
@@ -3224,14 +3226,14 @@
     return window;
   }
 
-  gfx::Rect GetSplitViewLeftWindowBounds(aura::Window* window) {
+  gfx::Rect GetSplitViewLeftWindowBounds() {
     return split_view_controller()->GetSnappedWindowBoundsInScreen(
-        window, SplitViewController::LEFT);
+        SplitViewController::LEFT);
   }
 
-  gfx::Rect GetSplitViewRightWindowBounds(aura::Window* window) {
+  gfx::Rect GetSplitViewRightWindowBounds() {
     return split_view_controller()->GetSnappedWindowBoundsInScreen(
-        window, SplitViewController::RIGHT);
+        SplitViewController::RIGHT);
   }
 
   gfx::Rect GetSplitViewDividerBounds(bool is_dragging) {
@@ -3645,7 +3647,7 @@
   EXPECT_EQ(SplitViewController::State::kNoSnap,
             split_view_controller()->state());
   EXPECT_TRUE(split_view_controller()->left_window() == nullptr);
-  EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds());
+  EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds());
 
   // Verify that when dragged to the right, the window grid is located where the
   // left window of split view mode should be.
@@ -3654,7 +3656,7 @@
   EXPECT_EQ(SplitViewController::State::kNoSnap,
             split_view_controller()->state());
   EXPECT_TRUE(split_view_controller()->right_window() == nullptr);
-  EXPECT_EQ(GetSplitViewLeftWindowBounds(window1.get()), GetGridBounds());
+  EXPECT_EQ(GetSplitViewLeftWindowBounds(), GetGridBounds());
 
   // Verify that when dragged to the center, the window grid is has the
   // dimensions of the work area.
@@ -3679,11 +3681,11 @@
   // Verify that when there is a snapped window, the window grid bounds remain
   // constant despite overview items being dragged left and right.
   overview_session()->Drag(overview_item, left);
-  EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds());
+  EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds());
   overview_session()->Drag(overview_item, right);
-  EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds());
+  EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds());
   overview_session()->Drag(overview_item, center);
-  EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds());
+  EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds());
 }
 
 // Tests dragging a unsnappable window.
@@ -4590,7 +4592,7 @@
   EXPECT_TRUE(overview_controller()->InOverviewSession());
   EXPECT_EQ(GetGridBounds(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
 
   split_view_controller()->SwapWindows();
   EXPECT_EQ(split_view_controller()->state(),
@@ -4599,7 +4601,7 @@
             SplitViewController::RIGHT);
   EXPECT_EQ(GetGridBounds(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::LEFT));
+                SplitViewController::LEFT));
 }
 
 // Verify the behavior when trying to exit overview with one snapped window
@@ -4844,7 +4846,7 @@
   EXPECT_TRUE(overview_controller()->InOverviewSession());
   EXPECT_TRUE(split_view_controller()->InSplitViewMode());
   EXPECT_NE(GetGridBounds(), overview_bounds);
-  EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds(window1.get()));
+  EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds());
   window1.reset();
   EXPECT_TRUE(overview_controller()->InOverviewSession());
   EXPECT_FALSE(split_view_controller()->InSplitViewMode());
@@ -4899,7 +4901,7 @@
   OverviewItem* overview_item1 = GetOverviewItemForWindow(window1.get());
   DragWindowTo(overview_item1, gfx::PointF(0, 0));
   EXPECT_NE(GetGridBounds(), overview_full_bounds);
-  EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds(window1.get()));
+  EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds());
   const gfx::Rect overview_snapped_bounds = GetGridBounds();
 
   // Resize that happens on the right edge of the left snapped window will
@@ -4911,7 +4913,7 @@
   EXPECT_TRUE(split_view_controller()->InSplitViewMode());
   EXPECT_NE(GetGridBounds(), overview_full_bounds);
   EXPECT_NE(GetGridBounds(), overview_snapped_bounds);
-  EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds(window1.get()));
+  EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds());
 
   // Resize that happens on the left edge of the left snapped window will end
   // overview. The same for the resize that happens on the top or bottom edge of
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc
index f4fb7fa7..84614d5 100644
--- a/ash/wm/splitview/split_view_controller.cc
+++ b/ash/wm/splitview/split_view_controller.cc
@@ -13,6 +13,7 @@
 #include "ash/public/cpp/presentation_time_recorder.h"
 #include "ash/public/cpp/window_properties.h"
 #include "ash/root_window_controller.h"
+#include "ash/root_window_settings.h"
 #include "ash/scoped_animation_disabler.h"
 #include "ash/screen_util.h"
 #include "ash/session/session_controller_impl.h"
@@ -279,7 +280,8 @@
   return Shell::GetPrimaryRootWindowController()->split_view_controller();
 }
 
-SplitViewController::SplitViewController() {
+SplitViewController::SplitViewController(aura::Window* root_window)
+    : root_window_(root_window) {
   Shell::Get()->accessibility_controller()->AddObserver(this);
   display::Screen::GetScreen()->AddObserver(this);
   Shell::Get()->tablet_mode_controller()->AddObserver(this);
@@ -319,6 +321,7 @@
   DCHECK(window && CanSnapInSplitview(window));
   DCHECK_NE(snap_position, NONE);
   DCHECK(!is_resizing_);
+  DCHECK_EQ(root_window_, window->GetRootWindow());
 
   // This check detects the case that you try to snap a window while watching
   // the divider snap animation. It also detects the case that you click a
@@ -339,15 +342,14 @@
 
     // If there is pre-set |divider_position_|, use it. It can happen during
     // tablet <-> clamshell transition or multi-user transition.
-    divider_position_ = (divider_position_ < 0)
-                            ? GetDefaultDividerPosition(window)
-                            : divider_position_;
+    divider_position_ = (divider_position_ < 0) ? GetDefaultDividerPosition()
+                                                : divider_position_;
     default_snap_position_ = snap_position;
 
     // There is no divider bar in clamshell splitview mode.
     if (split_view_type_ == SplitViewType::kTabletType) {
       split_view_divider_ =
-          std::make_unique<SplitViewDivider>(this, window->GetRootWindow());
+          std::make_unique<SplitViewDivider>(this, root_window_);
       // The divider spawn animation adds a finishing touch to the |window|
       // animation that generally accommodates snapping by dragging, but if
       // |window| is currently minimized then it will undergo the unminimizing
@@ -442,8 +444,7 @@
   if (do_divider_spawn_animation) {
     DCHECK(window->layer()->GetAnimator()->GetTargetTransform().IsIdentity());
 
-    const gfx::Rect bounds =
-        GetSnappedWindowBoundsInScreen(window, snap_position);
+    const gfx::Rect bounds = GetSnappedWindowBoundsInScreen(snap_position);
     // Get one of the two corners of |window| that meet the divider.
     gfx::Point p = IsPhysicalLeftOrTop(snap_position) ? bounds.bottom_right()
                                                       : bounds.origin();
@@ -505,24 +506,22 @@
 }
 
 gfx::Rect SplitViewController::GetSnappedWindowBoundsInParent(
-    aura::Window* window,
     SnapPosition snap_position) {
-  gfx::Rect bounds = GetSnappedWindowBoundsInScreen(window, snap_position);
-  ::wm::ConvertRectFromScreen(window->GetRootWindow(), &bounds);
+  gfx::Rect bounds = GetSnappedWindowBoundsInScreen(snap_position);
+  ::wm::ConvertRectFromScreen(root_window_, &bounds);
   return bounds;
 }
 
 gfx::Rect SplitViewController::GetSnappedWindowBoundsInScreen(
-    aura::Window* window,
     SnapPosition snap_position) {
   const gfx::Rect work_area_bounds_in_screen =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          window);
+          root_window_);
   if (snap_position == NONE)
     return work_area_bounds_in_screen;
 
   gfx::Rect left_or_top_rect, right_or_bottom_rect;
-  GetSnappedWindowBoundsInScreenInternal(window, &left_or_top_rect,
+  GetSnappedWindowBoundsInScreenInternal(&left_or_top_rect,
                                          &right_or_bottom_rect);
 
   // Adjust the bounds for |left_or_top_rect| and |right_or_bottom_rect| if the
@@ -534,26 +533,25 @@
 }
 
 gfx::Rect SplitViewController::GetSnappedWindowBoundsInScreenUnadjusted(
-    aura::Window* window,
     SnapPosition snap_position) {
   const gfx::Rect work_area_bounds_in_screen =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          window);
+          root_window_);
   if (snap_position == NONE)
     return work_area_bounds_in_screen;
 
   gfx::Rect left_or_top_rect, right_or_bottom_rect;
-  GetSnappedWindowBoundsInScreenInternal(window, &left_or_top_rect,
+  GetSnappedWindowBoundsInScreenInternal(&left_or_top_rect,
                                          &right_or_bottom_rect);
 
   return IsPhysicalLeftOrTop(snap_position) ? left_or_top_rect
                                             : right_or_bottom_rect;
 }
 
-int SplitViewController::GetDefaultDividerPosition(aura::Window* window) const {
+int SplitViewController::GetDefaultDividerPosition() const {
   const gfx::Rect work_area_bounds_in_screen =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          window);
+          root_window_);
   int default_divider_position = (IsCurrentScreenOrientationLandscape()
                                       ? work_area_bounds_in_screen.width()
                                       : work_area_bounds_in_screen.height()) /
@@ -623,7 +621,7 @@
   presentation_time_recorder_->RequestNext();
   const gfx::Rect work_area_bounds =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          GetDefaultSnappedWindow());
+          root_window_);
   gfx::Point modified_location_in_screen =
       GetBoundedPosition(location_in_screen, work_area_bounds);
 
@@ -654,7 +652,7 @@
 
   const gfx::Rect work_area_bounds =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          GetDefaultSnappedWindow());
+          root_window_);
   gfx::Point modified_location_in_screen =
       GetBoundedPosition(location_in_screen, work_area_bounds);
   UpdateDividerPosition(modified_location_in_screen);
@@ -790,6 +788,8 @@
     const gfx::Rect& old_bounds,
     const gfx::Rect& new_bounds,
     ui::PropertyChangeReason reason) {
+  DCHECK_EQ(root_window_, window->GetRootWindow());
+
   if (split_view_type_ != SplitViewType::kClamshellType ||
       reason == ui::PropertyChangeReason::FROM_ANIMATION ||
       !InSplitViewMode()) {
@@ -808,7 +808,7 @@
 
   const gfx::Rect work_area =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          window);
+          root_window_);
   if (IsCurrentScreenOrientationLandscape()) {
     divider_position_ = window == GetPhysicalLeftOrTopWindow()
                             ? new_bounds.width()
@@ -883,6 +883,10 @@
 void SplitViewController::OnPostWindowStateTypeChange(
     ash::WindowState* window_state,
     ash::WindowStateType old_type) {
+  DCHECK_EQ(
+      window_state->GetDisplay().id(),
+      display::Screen::GetScreen()->GetDisplayNearestWindow(root_window_).id());
+
   if (window_state->IsSnapped()) {
     OnWindowSnapped(window_state->window());
   } else if (window_state->IsFullscreen() || window_state->IsMaximized()) {
@@ -911,6 +915,9 @@
 void SplitViewController::OnWindowActivated(ActivationReason reason,
                                             aura::Window* gained_active,
                                             aura::Window* lost_active) {
+  if (!gained_active || gained_active->GetRootWindow() != root_window_)
+    return;
+
   if (features::IsVirtualDesksEnabled() &&
       DesksController::Get()->AreDesksBeingModified()) {
     // Activating a desk from its mini view will activate its most-recently used
@@ -929,7 +936,7 @@
 
   // Only windows that are in the MRU list and are not already in split view can
   // be auto-snapped.
-  if (!gained_active || IsWindowInSplitView(gained_active) ||
+  if (IsWindowInSplitView(gained_active) ||
       !base::Contains(
           Shell::Get()->mru_window_tracker()->BuildMruWindowList(kActiveDesk),
           gained_active)) {
@@ -1016,12 +1023,11 @@
     EndSplitView();
     return;
   }
-  aura::Window* root_window = GetDefaultSnappedWindow()->GetRootWindow();
 
   // If overview is ended because of a window getting snapped, suppress the
   // overview exiting animation.
   if (state_ == State::kBothSnapped)
-    overview_session->SetWindowListNotAnimatedWhenExiting(root_window);
+    overview_session->SetWindowListNotAnimatedWhenExiting(root_window_);
 
   // If clamshell split view mode is active, end it and bail out.
   if (split_view_type_ == SplitViewType::kClamshellType) {
@@ -1034,7 +1040,7 @@
   if (state_ == State::kBothSnapped)
     return;
   OverviewGrid* current_grid =
-      overview_session->GetGridWithRootWindow(root_window);
+      overview_session->GetGridWithRootWindow(root_window_);
   if (!current_grid || current_grid->empty())
     return;
   for (const auto& overview_item : current_grid->window_list()) {
@@ -1048,7 +1054,7 @@
       SnapWindow(window, (default_snap_position_ == LEFT) ? RIGHT : LEFT);
       // If ending overview causes a window to snap, also do not do exiting
       // overview animation.
-      overview_session->SetWindowListNotAnimatedWhenExiting(root_window);
+      overview_session->SetWindowListNotAnimatedWhenExiting(root_window_);
       return;
     }
   }
@@ -1066,7 +1072,10 @@
 void SplitViewController::OnDisplayMetricsChanged(
     const display::Display& display,
     uint32_t metrics) {
-  if (!display.IsInternal())
+  // Avoid |ScreenAsh::GetDisplayNearestWindow|, which has a |DCHECK| that fails
+  // if the display is being deleted. Use |GetRootWindowSettings| directly, and
+  // if the display is being deleted, we will get |display::kInvalidDisplayId|.
+  if (GetRootWindowSettings(root_window_)->display_id != display.id())
     return;
 
   // We need to update |is_previous_screen_orientation_primary_| even if split
@@ -1078,12 +1087,6 @@
   if (!InSplitViewMode())
     return;
 
-  display::Display current_display =
-      display::Screen::GetScreen()->GetDisplayNearestWindow(
-          GetDefaultSnappedWindow());
-  if (display.id() != current_display.id())
-    return;
-
   // If one of the snapped windows becomes unsnappable, end the split view mode
   // directly.
   if ((left_window_ && !CanSnapInSplitview(left_window_)) ||
@@ -1143,8 +1146,8 @@
   // the three fixed positions.
   if (InSplitViewMode()) {
     divider_position_ = GetClosestFixedDividerPosition();
-    split_view_divider_ = std::make_unique<SplitViewDivider>(
-        this, GetDefaultSnappedWindow()->GetRootWindow());
+    split_view_divider_ =
+        std::make_unique<SplitViewDivider>(this, root_window_);
     UpdateSnappedWindowsAndDividerBounds();
     NotifyDividerPositionChanged();
   }
@@ -1260,10 +1263,8 @@
     // Create an invisible black scrim layer.
     black_scrim_layer_ = std::make_unique<ui::Layer>(ui::LAYER_SOLID_COLOR);
     black_scrim_layer_->SetColor(SK_ColorBLACK);
-    GetDefaultSnappedWindow()->GetRootWindow()->layer()->Add(
-        black_scrim_layer_.get());
-    GetDefaultSnappedWindow()->GetRootWindow()->layer()->StackAtTop(
-        black_scrim_layer_.get());
+    root_window_->layer()->Add(black_scrim_layer_.get());
+    root_window_->layer()->StackAtTop(black_scrim_layer_.get());
   }
 
   // Decide where the black scrim should show and update its bounds.
@@ -1272,8 +1273,7 @@
     black_scrim_layer_.reset();
     return;
   }
-  black_scrim_layer_->SetBounds(
-      GetSnappedWindowBoundsInScreen(GetDefaultSnappedWindow(), position));
+  black_scrim_layer_->SetBounds(GetSnappedWindowBoundsInScreen(position));
 
   // Update its opacity. The opacity increases as it gets closer to the edge of
   // the screen.
@@ -1282,7 +1282,7 @@
                            : location_in_screen.y();
   gfx::Rect work_area_bounds =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          GetDefaultSnappedWindow());
+          root_window_);
   if (!IsCurrentScreenOrientationLandscape())
     work_area_bounds.Transpose();
   float opacity = kBlackScrimOpacity;
@@ -1320,7 +1320,7 @@
     const gfx::Point& location_in_screen) {
   const gfx::Rect work_area_bounds =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          GetDefaultSnappedWindow());
+          root_window_);
   if (!work_area_bounds.Contains(location_in_screen))
     return NONE;
 
@@ -1379,17 +1379,15 @@
 }
 
 void SplitViewController::GetSnappedWindowBoundsInScreenInternal(
-    aura::Window* window,
     gfx::Rect* left_or_top_rect,
     gfx::Rect* right_or_bottom_rect) {
   const gfx::Rect work_area_bounds_in_screen =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          window);
+          root_window_);
 
   // |divide_position_| might not be properly initialized yet.
-  int divider_position = (divider_position_ < 0)
-                             ? GetDefaultDividerPosition(window)
-                             : divider_position_;
+  int divider_position =
+      (divider_position_ < 0) ? GetDefaultDividerPosition() : divider_position_;
   gfx::Rect divider_bounds;
   if (split_view_type_ == SplitViewType::kTabletType) {
     divider_bounds = SplitViewDivider::GetDividerBoundsInScreen(
@@ -1508,7 +1506,7 @@
 int SplitViewController::GetDividerEndPosition() {
   const gfx::Rect work_area_bounds =
       screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-          GetDefaultSnappedWindow());
+          root_window_);
   return IsCurrentScreenOrientationLandscape() ? work_area_bounds.width()
                                                : work_area_bounds.height();
 }
@@ -1655,8 +1653,8 @@
     return end_location;
 
   const gfx::Rect bounds = (window == left_window_)
-                               ? GetSnappedWindowBoundsInScreen(window, LEFT)
-                               : GetSnappedWindowBoundsInScreen(window, RIGHT);
+                               ? GetSnappedWindowBoundsInScreen(LEFT)
+                               : GetSnappedWindowBoundsInScreen(RIGHT);
   switch (GetCurrentScreenOrientation()) {
     case OrientationLockType::kLandscapePrimary:
       end_location.set_x(window == left_window_ ? bounds.right() : bounds.x());
@@ -1691,8 +1689,8 @@
   if (!window->layer()->GetTargetTransform().IsIdentity()) {
     // Calculate the starting transform based on the window's expected snapped
     // bounds and its transformed bounds before to be snapped.
-    const gfx::Rect snapped_bounds = GetSnappedWindowBoundsInScreen(
-        window, (window == left_window_) ? LEFT : RIGHT);
+    const gfx::Rect snapped_bounds =
+        GetSnappedWindowBoundsInScreen((window == left_window_) ? LEFT : RIGHT);
     const gfx::Transform starting_transform = gfx::TransformBetweenRects(
         gfx::RectF(snapped_bounds), gfx::RectF(item_bounds));
     SetTransformWithAnimation(window, starting_transform, gfx::Transform());
@@ -1723,8 +1721,8 @@
       IsCurrentScreenOrientationPrimary() ? right_window_ : left_window_;
 
   gfx::Rect left_or_top_rect, right_or_bottom_rect;
-  GetSnappedWindowBoundsInScreenInternal(
-      GetDefaultSnappedWindow(), &left_or_top_rect, &right_or_bottom_rect);
+  GetSnappedWindowBoundsInScreenInternal(&left_or_top_rect,
+                                         &right_or_bottom_rect);
 
   gfx::Transform left_or_top_transform;
   if (left_or_top_window) {
@@ -1801,12 +1799,14 @@
 
 void SplitViewController::RemoveWindowFromOverviewIfApplicable(
     aura::Window* window) {
+  DCHECK_EQ(root_window_, window->GetRootWindow());
+
   if (!Shell::Get()->overview_controller()->InOverviewSession())
     return;
 
   OverviewSession* overview_session = GetOverviewSession();
   OverviewGrid* current_grid =
-      overview_session->GetGridWithRootWindow(window->GetRootWindow());
+      overview_session->GetGridWithRootWindow(root_window_);
   if (!current_grid)
     return;
 
@@ -1873,6 +1873,8 @@
   if (GetOverviewSession() && GetOverviewSession()->IsWindowInOverview(window))
     return;
 
+  DCHECK_EQ(root_window_, window->GetRootWindow());
+
   const bool was_splitview_active = InSplitViewMode();
   if (desired_snap_position == SplitViewController::NONE) {
     if (was_splitview_active) {
@@ -1881,7 +1883,7 @@
       // Calculate the expected snap position based on the last event
       // location. Note if there is already a window at |desired_snap_postion|,
       // SnapWindow() will put the previous snapped window in overview.
-      SnapWindow(window, GetSnapPosition(window, last_location_in_screen));
+      SnapWindow(window, GetSnapPosition(last_location_in_screen));
       wm::ActivateWindow(window);
     } else {
       // Restore the dragged window's transform first if it's not identity. It
@@ -1893,8 +1895,7 @@
 
       OverviewSession* overview_session = GetOverviewSession();
       if (overview_session) {
-        overview_session->SetWindowListNotAnimatedWhenExiting(
-            window->GetRootWindow());
+        overview_session->SetWindowListNotAnimatedWhenExiting(root_window_);
         // Set the overview exit type to kImmediateExit to avoid update bounds
         // animation of the windows in overview grid.
         overview_session->set_enter_exit_overview_type(
@@ -1938,11 +1939,9 @@
 }
 
 SplitViewController::SnapPosition SplitViewController::GetSnapPosition(
-    aura::Window* window,
     const gfx::Point& last_location_in_screen) {
-  const int divider_position = InSplitViewMode()
-                                   ? this->divider_position()
-                                   : GetDefaultDividerPosition(window);
+  const int divider_position = InSplitViewMode() ? this->divider_position()
+                                                 : GetDefaultDividerPosition();
   const int position = IsCurrentScreenOrientationLandscape()
                            ? last_location_in_screen.x()
                            : last_location_in_screen.y();
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h
index fe6de29..dfc5046 100644
--- a/ash/wm/splitview/split_view_controller.h
+++ b/ash/wm/splitview/split_view_controller.h
@@ -101,7 +101,7 @@
   // shall be ForWindow, similar to |RootWindowController::ForWindow|.
   static SplitViewController* Get();
 
-  SplitViewController();
+  explicit SplitViewController(aura::Window* root_window);
   ~SplitViewController() override;
 
   // Returns true if split view mode is active. Please see SplitViewType above
@@ -137,20 +137,15 @@
   // are adjusted to its minimum size if the desired bounds are smaller than
   // its minumum bounds. Note: the snapped window bounds can't be pushed
   // outside of the workspace area.
-  // TODO(xdai): Investigate if we need to pass in |window| as splitview windows
-  // should always be parented to the primary root window.
-  gfx::Rect GetSnappedWindowBoundsInParent(aura::Window* window,
-                                           SnapPosition snap_position);
-  gfx::Rect GetSnappedWindowBoundsInScreen(aura::Window* window,
-                                           SnapPosition snap_position);
+  gfx::Rect GetSnappedWindowBoundsInParent(SnapPosition snap_position);
+  gfx::Rect GetSnappedWindowBoundsInScreen(SnapPosition snap_position);
 
   // Gets the desired snapped window bounds accoridng to the snap state
   // |snap_state| and the divider pistion |divider_position_|.
-  gfx::Rect GetSnappedWindowBoundsInScreenUnadjusted(aura::Window* window,
-                                                     SnapPosition snap_postion);
+  gfx::Rect GetSnappedWindowBoundsInScreenUnadjusted(SnapPosition snap_postion);
 
   // Gets the default value of |divider_position_|.
-  int GetDefaultDividerPosition(aura::Window* window) const;
+  int GetDefaultDividerPosition() const;
 
   // Returns true during the divider snap animation.
   bool IsDividerAnimating() const;
@@ -225,6 +220,7 @@
   void OnAccessibilityStatusChanged() override;
   void OnAccessibilityControllerShutdown() override;
 
+  aura::Window* root_window() const { return root_window_; }
   aura::Window* left_window() { return left_window_; }
   aura::Window* right_window() { return right_window_; }
   int divider_position() const { return divider_position_; }
@@ -276,8 +272,7 @@
   // Get the window bounds for left_or_top and right_or_bottom snapped windows.
   // Note the bounds returned by this function doesn't take the snapped windows
   // minimum sizes into account.
-  void GetSnappedWindowBoundsInScreenInternal(aura::Window* window,
-                                              gfx::Rect* left_or_top_rect,
+  void GetSnappedWindowBoundsInScreenInternal(gfx::Rect* left_or_top_rect,
                                               gfx::Rect* right_or_bottom_rect);
 
   // Splits the |work_area_rect| by |divider_rect| and outputs the two halves.
@@ -403,13 +398,16 @@
                          SnapPosition desired_snap_position,
                          const gfx::Point& last_location_in_screen);
 
-  // Gets the snap position of |window| according to last mouse/gesture event
-  // location on |window|. Used when |desired_snap_position_| was NONE but
-  // SplitViewController needs to snap the |window| after dragging.
+  // Gets the snap position for a dragged window, according to the last
+  // mouse/gesture event location. Called by |EndWindowDragImpl| when
+  // desired_snap_position is |NONE| but because split view is already active,
+  // the dragged window needs to be snapped anyway.
   SplitViewController::SnapPosition GetSnapPosition(
-      aura::Window* window,
       const gfx::Point& last_location_in_screen);
 
+  // Root window the split view is in.
+  aura::Window* root_window_;
+
   // The current left/right snapped window.
   aura::Window* left_window_ = nullptr;
   aura::Window* right_window_ = nullptr;
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc
index e39cbcc..d95002df 100644
--- a/ash/wm/splitview/split_view_controller_unittest.cc
+++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -294,7 +294,7 @@
   EXPECT_EQ(split_view_controller()->InSplitViewMode(), true);
   EXPECT_EQ(window1->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::LEFT));
+                SplitViewController::LEFT));
 
   split_view_controller()->SnapWindow(window2.get(),
                                       SplitViewController::RIGHT);
@@ -305,7 +305,7 @@
   EXPECT_EQ(split_view_controller()->InSplitViewMode(), true);
   EXPECT_EQ(window2->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window2.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
 
   EndSplitView();
   EXPECT_EQ(split_view_controller()->state(),
@@ -1552,7 +1552,7 @@
 
   gfx::Rect snapped_window_bounds =
       split_view_controller()->GetSnappedWindowBoundsInScreen(
-          window1.get(), SplitViewController::LEFT);
+          SplitViewController::LEFT);
   // The snapped window bounds can't be pushed outside of the display area.
   EXPECT_EQ(snapped_window_bounds.x(), display_bounds.x());
   EXPECT_EQ(snapped_window_bounds.width(),
@@ -1589,7 +1589,7 @@
 
   snapped_window_bounds =
       split_view_controller()->GetSnappedWindowBoundsInScreen(
-          window1.get(), SplitViewController::LEFT);
+          SplitViewController::LEFT);
   EXPECT_EQ(snapped_window_bounds.y(), display_bounds.y());
   EXPECT_EQ(snapped_window_bounds.height(),
             window1->delegate()->GetMinimumSize().height());
@@ -1621,7 +1621,7 @@
 
   snapped_window_bounds =
       split_view_controller()->GetSnappedWindowBoundsInScreen(
-          window1.get(), SplitViewController::RIGHT);
+          SplitViewController::RIGHT);
   EXPECT_EQ(snapped_window_bounds.x(), display_bounds.x());
   EXPECT_EQ(snapped_window_bounds.width(),
             window1->delegate()->GetMinimumSize().width());
@@ -1653,7 +1653,7 @@
 
   snapped_window_bounds =
       split_view_controller()->GetSnappedWindowBoundsInScreen(
-          window1.get(), SplitViewController::RIGHT);
+          SplitViewController::RIGHT);
   EXPECT_EQ(snapped_window_bounds.y(), display_bounds.y());
   EXPECT_EQ(snapped_window_bounds.height(),
             window1->delegate()->GetMinimumSize().height());
@@ -2145,7 +2145,7 @@
   // Now try to manually move the bubble out of the snapped window.
   bubble_window->SetBoundsInScreen(
       split_view_controller()->GetSnappedWindowBoundsInScreen(
-          window, SplitViewController::RIGHT),
+          SplitViewController::RIGHT),
       display::Screen::GetScreen()->GetDisplayNearestWindow(window));
   // Test that the bubble can't be moved outside of its anchor widget.
   EXPECT_TRUE(window_bounds.Contains(bubble_window->GetBoundsInScreen()));
@@ -2910,7 +2910,7 @@
   // bounds as it's to be snapped to LEFT.
   EXPECT_EQ(window2->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window2.get(), SplitViewController::LEFT));
+                SplitViewController::LEFT));
   EXPECT_FALSE(window1->GetProperty(kCanAttachToAnotherWindowKey));
   DragWindowTo(resizer.get(), gfx::Point(0, 300));
   EXPECT_EQ(GetIndicatorState(resizer.get()), IndicatorState::kPreviewAreaLeft);
@@ -2918,7 +2918,7 @@
   // bounds as it's to be snapped to RIGHT.
   EXPECT_EQ(window2->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window2.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
   EXPECT_FALSE(window1->GetProperty(kCanAttachToAnotherWindowKey));
 
   CompleteDrag(std::move(resizer));
@@ -2966,7 +2966,7 @@
   EXPECT_NE(window2->GetBoundsInScreen(), work_area_bounds);
   EXPECT_NE(window2->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window2.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
   CompleteDrag(std::move(resizer));
   EXPECT_FALSE(split_view_controller()->InSplitViewMode());
 }
@@ -3099,7 +3099,7 @@
   EXPECT_EQ(GetIndicatorState(resizer.get()), IndicatorState::kNone);
   EXPECT_EQ(window2->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window2.get(), SplitViewController::LEFT));
+                SplitViewController::LEFT));
   // Not in overview.
   CheckOverviewEnterExitHistogram("DoNotEnterInSplitViewByDrag", {0, 0},
                                   {0, 3});
@@ -3116,7 +3116,7 @@
   // The source window's bounds should remain the same.
   EXPECT_EQ(window2->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window2.get(), SplitViewController::LEFT));
+                SplitViewController::LEFT));
   CompleteDrag(std::move(resizer));
   EXPECT_EQ(split_view_controller()->state(),
             SplitViewController::State::kBothSnapped);
@@ -3255,7 +3255,7 @@
   // The source window still remains the same bounds.
   EXPECT_EQ(window1->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::LEFT));
+                SplitViewController::LEFT));
   CheckOverviewEnterExitHistogram("DoNotExitInSplitView4", {0, 2}, {1, 0});
 
   // 2.a. The dragged window can replace the only snapped window in the split
@@ -3500,7 +3500,7 @@
                gfx::Point(0, work_area_bounds.CenterPoint().y()));
   EXPECT_EQ(current_grid->bounds(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
   EXPECT_EQ(0.f, target_opacity(drop_target_widget));
 
   // Drag it to middle.
@@ -3513,7 +3513,7 @@
                                          work_area_bounds.CenterPoint().y()));
   EXPECT_EQ(current_grid->bounds(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::LEFT));
+                SplitViewController::LEFT));
   EXPECT_EQ(0.f, target_opacity(drop_target_widget));
 
   CompleteDrag(std::move(resizer));
@@ -3545,7 +3545,7 @@
   EXPECT_NE(drop_target_widget->GetNativeWindow()->bounds(), window1->bounds());
   EXPECT_EQ(current_grid->bounds(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
 
   // Drag |window1| to the right preview split area.
   DragWindowTo(resizer.get(), gfx::Point(work_area_bounds.right(),
@@ -3553,7 +3553,7 @@
   // Overview bounds stays the same.
   EXPECT_EQ(current_grid->bounds(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
   EXPECT_EQ(0.f, target_opacity(drop_target_widget));
 
   // Drag |window1| to the left preview split area.
@@ -3561,7 +3561,7 @@
                gfx::Point(0, work_area_bounds.CenterPoint().y()));
   EXPECT_EQ(current_grid->bounds(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::RIGHT));
+                SplitViewController::RIGHT));
   EXPECT_EQ(0.f, target_opacity(drop_target_widget));
 
   CompleteDrag(std::move(resizer));
@@ -4575,11 +4575,10 @@
   // Shelf should be shown after drag and snapped window should be covered by
   // the auto-hide-shown shelf.
   EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->GetAutoHideState());
-  EXPECT_EQ(
-      split_view_controller()
-          ->GetSnappedWindowBoundsInScreen(window(), SplitViewController::LEFT)
-          .height(),
-      display_bounds.height());
+  EXPECT_EQ(split_view_controller()
+                ->GetSnappedWindowBoundsInScreen(SplitViewController::LEFT)
+                .height(),
+            display_bounds.height());
 }
 
 // Tests the functionalities that fling the window when preview area is shown.
diff --git a/ash/wm/splitview/split_view_drag_indicators.cc b/ash/wm/splitview/split_view_drag_indicators.cc
index 2c321fc..97e1e9f 100644
--- a/ash/wm/splitview/split_view_drag_indicators.cc
+++ b/ash/wm/splitview/split_view_drag_indicators.cc
@@ -378,7 +378,6 @@
       // Get the preview area bounds from the split view controller.
       preview_area_bounds =
           SplitViewController::Get()->GetSnappedWindowBoundsInScreen(
-              GetWidget()->GetNativeWindow(),
               preview_state == IndicatorState::kPreviewAreaLeft
                   ? SplitViewController::LEFT
                   : SplitViewController::RIGHT);
diff --git a/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc b/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc
index ec42662..2baa145 100644
--- a/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc
+++ b/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc
@@ -311,9 +311,9 @@
     } else {
       // Put the source window on the other side of the split screen.
       expected_bounds = split_view_controller_->GetSnappedWindowBoundsInScreen(
-          source_window, snap_position == SplitViewController::LEFT
-                             ? SplitViewController::RIGHT
-                             : SplitViewController::LEFT);
+          snap_position == SplitViewController::LEFT
+              ? SplitViewController::RIGHT
+              : SplitViewController::LEFT);
     }
   }
   ::wm::ConvertRectFromScreen(source_window->parent(), &expected_bounds);
diff --git a/ash/wm/tablet_mode/tablet_mode_window_manager.cc b/ash/wm/tablet_mode/tablet_mode_window_manager.cc
index bea2323..a345cd07 100644
--- a/ash/wm/tablet_mode/tablet_mode_window_manager.cc
+++ b/ash/wm/tablet_mode/tablet_mode_window_manager.cc
@@ -132,8 +132,7 @@
       return left_window ? work_area.height() - left_window_bounds.height()
                          : right_window_bounds.height();
     default:
-      return SplitViewController::Get()->GetDefaultDividerPosition(
-          left_window ? left_window : right_window);
+      return SplitViewController::Get()->GetDefaultDividerPosition();
   }
 }
 
diff --git a/ash/wm/tablet_mode/tablet_mode_window_state.cc b/ash/wm/tablet_mode/tablet_mode_window_state.cc
index 570ff101..0a74faa9 100644
--- a/ash/wm/tablet_mode/tablet_mode_window_state.cc
+++ b/ash/wm/tablet_mode/tablet_mode_window_state.cc
@@ -86,12 +86,12 @@
 
   if (state_object->GetStateType() == WindowStateType::kLeftSnapped) {
     return SplitViewController::Get()->GetSnappedWindowBoundsInParent(
-        state_object->window(), SplitViewController::LEFT);
+        SplitViewController::LEFT);
   }
 
   if (state_object->GetStateType() == WindowStateType::kRightSnapped) {
     return SplitViewController::Get()->GetSnappedWindowBoundsInParent(
-        state_object->window(), SplitViewController::RIGHT);
+        SplitViewController::RIGHT);
   }
 
   gfx::Rect bounds_in_parent;
diff --git a/ash/wm/workspace/backdrop_controller.cc b/ash/wm/workspace/backdrop_controller.cc
index 83e3a75..f0a1b7c 100644
--- a/ash/wm/workspace/backdrop_controller.cc
+++ b/ash/wm/workspace/backdrop_controller.cc
@@ -446,14 +446,12 @@
   SplitViewController::State state = split_view_controller->state();
   DCHECK(state == SplitViewController::State::kLeftSnapped ||
          state == SplitViewController::State::kRightSnapped);
-  aura::Window* snapped_window =
-      split_view_controller->GetDefaultSnappedWindow();
   SplitViewController::SnapPosition snap_position =
       (state == SplitViewController::State::kLeftSnapped)
           ? SplitViewController::LEFT
           : SplitViewController::RIGHT;
   return split_view_controller->GetSnappedWindowBoundsInScreenUnadjusted(
-      snapped_window, snap_position);
+      snap_position);
 }
 
 void BackdropController::Layout() {
diff --git a/base/files/file_path_watcher_unittest.cc b/base/files/file_path_watcher_unittest.cc
index 35ee50294..91e116d 100644
--- a/base/files/file_path_watcher_unittest.cc
+++ b/base/files/file_path_watcher_unittest.cc
@@ -399,7 +399,7 @@
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
   ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(), false));
 
-  ASSERT_TRUE(base::DeleteFile(dir, true));
+  ASSERT_TRUE(base::DeleteFileRecursively(dir));
   ASSERT_TRUE(WaitForEvents());
 }
 
diff --git a/base/files/file_util.h b/base/files/file_util.h
index 59fbf44..571f90f8 100644
--- a/base/files/file_util.h
+++ b/base/files/file_util.h
@@ -63,13 +63,28 @@
 // Returns true if successful, false otherwise. It is considered successful
 // to attempt to delete a file that does not exist.
 //
-// In posix environment and if |path| is a symbolic link, this deletes only
+// In POSIX environment and if |path| is a symbolic link, this deletes only
 // the symlink. (even if the symlink points to a non-existent file)
 //
 // WARNING: USING THIS WITH recursive==true IS EQUIVALENT
 //          TO "rm -rf", SO USE WITH CAUTION.
+//
+// Note: The |recursive| parameter is in the process of being removed. Use
+// DeleteFileRecursively() instead. See https://crbug.com/1009837
 BASE_EXPORT bool DeleteFile(const FilePath& path, bool recursive);
 
+// Deletes the given path, whether it's a file or a directory.
+// If it's a directory, it's perfectly happy to delete all of the
+// directory's contents, including subdirectories and their contents.
+// Returns true if successful, false otherwise. It is considered successful
+// to attempt to delete a file that does not exist.
+//
+// In POSIX environment and if |path| is a symbolic link, this deletes only
+// the symlink. (even if the symlink points to a non-existent file)
+//
+// WARNING: USING THIS EQUIVALENT TO "rm -rf", SO USE WITH CAUTION.
+BASE_EXPORT bool DeleteFileRecursively(const FilePath& path);
+
 #if defined(OS_WIN)
 // Schedules to delete the given path, whether it's a file or a directory, until
 // the operating system is restarted.
diff --git a/base/files/file_util_posix.cc b/base/files/file_util_posix.cc
index 72beeab..bedcc78 100644
--- a/base/files/file_util_posix.cc
+++ b/base/files/file_util_posix.cc
@@ -320,37 +320,12 @@
 
   return true;
 }
-#endif  // !defined(OS_NACL_NONSFI)
-
-#if !defined(OS_MACOSX)
-// Appends |mode_char| to |mode| before the optional character set encoding; see
-// https://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html for
-// details.
-std::string AppendModeCharacter(StringPiece mode, char mode_char) {
-  std::string result(mode.as_string());
-  size_t comma_pos = result.find(',');
-  result.insert(comma_pos == std::string::npos ? result.length() : comma_pos, 1,
-                mode_char);
-  return result;
-}
-#endif
-
-}  // namespace
-
-#if !defined(OS_NACL_NONSFI)
-FilePath MakeAbsoluteFilePath(const FilePath& input) {
-  ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
-  char full_path[PATH_MAX];
-  if (realpath(input.value().c_str(), full_path) == nullptr)
-    return FilePath();
-  return FilePath(full_path);
-}
 
 // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*"
 // which works both with and without the recursive flag.  I'm not sure we need
 // that functionality. If not, remove from file_util_win.cc, otherwise add it
 // here.
-bool DeleteFile(const FilePath& path, bool recursive) {
+bool DoDeleteFile(const FilePath& path, bool recursive) {
   ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
 
 #if defined(OS_ANDROID)
@@ -390,6 +365,39 @@
   }
   return success;
 }
+#endif  // !defined(OS_NACL_NONSFI)
+
+#if !defined(OS_MACOSX)
+// Appends |mode_char| to |mode| before the optional character set encoding; see
+// https://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html for
+// details.
+std::string AppendModeCharacter(StringPiece mode, char mode_char) {
+  std::string result(mode.as_string());
+  size_t comma_pos = result.find(',');
+  result.insert(comma_pos == std::string::npos ? result.length() : comma_pos, 1,
+                mode_char);
+  return result;
+}
+#endif
+
+}  // namespace
+
+#if !defined(OS_NACL_NONSFI)
+FilePath MakeAbsoluteFilePath(const FilePath& input) {
+  ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
+  char full_path[PATH_MAX];
+  if (realpath(input.value().c_str(), full_path) == nullptr)
+    return FilePath();
+  return FilePath(full_path);
+}
+
+bool DeleteFile(const FilePath& path, bool recursive) {
+  return DoDeleteFile(path, recursive);
+}
+
+bool DeleteFileRecursively(const FilePath& path) {
+  return DoDeleteFile(path, /*recursive=*/true);
+}
 
 bool ReplaceFile(const FilePath& from_path,
                  const FilePath& to_path,
@@ -1173,7 +1181,7 @@
   if (!CopyDirectory(from_path, to_path, true))
     return false;
 
-  DeleteFile(from_path, true);
+  DeleteFileRecursively(from_path);
   return true;
 }
 
diff --git a/base/files/file_util_unittest.cc b/base/files/file_util_unittest.cc
index fc6e5ed..d79ec1f 100644
--- a/base/files/file_util_unittest.cc
+++ b/base/files/file_util_unittest.cc
@@ -1015,7 +1015,7 @@
   EXPECT_EQ(1, c2.size());
 
   // Delete the file.
-  EXPECT_TRUE(DeleteFile(subdir_path, true));
+  EXPECT_TRUE(DeleteFileRecursively(subdir_path));
   EXPECT_FALSE(PathExists(subdir_path));
 }
 
@@ -1395,7 +1395,7 @@
 
   EXPECT_TRUE(DeleteFile(non_existent, false));
   ASSERT_FALSE(PathExists(non_existent));
-  EXPECT_TRUE(DeleteFile(non_existent, true));
+  EXPECT_TRUE(DeleteFileRecursively(non_existent));
   ASSERT_FALSE(PathExists(non_existent));
 }
 
@@ -1406,7 +1406,7 @@
 
   EXPECT_TRUE(DeleteFile(non_existent, false));
   ASSERT_FALSE(PathExists(non_existent));
-  EXPECT_TRUE(DeleteFile(non_existent, true));
+  EXPECT_TRUE(DeleteFileRecursively(non_existent));
   ASSERT_FALSE(PathExists(non_existent));
 }
 
@@ -1426,7 +1426,7 @@
   ASSERT_TRUE(PathExists(file_name));
 
   // Make sure it's deleted
-  EXPECT_TRUE(DeleteFile(file_name, true));
+  EXPECT_TRUE(DeleteFileRecursively(file_name));
   EXPECT_FALSE(PathExists(file_name));
 }
 
@@ -1482,7 +1482,7 @@
   EXPECT_TRUE(PathExists(subdir_path));
 
   // Delete recursively and make sure all contents are deleted
-  EXPECT_TRUE(DeleteFile(directory_contents, true));
+  EXPECT_TRUE(DeleteFileRecursively(directory_contents));
   EXPECT_FALSE(PathExists(file_name));
   EXPECT_FALSE(PathExists(subdir_path));
 }
@@ -1504,7 +1504,7 @@
   EXPECT_TRUE(PathExists(subdir_path));
 
   // Delete recursively and check nothing got deleted
-  EXPECT_TRUE(DeleteFile(directory_contents, true));
+  EXPECT_TRUE(DeleteFileRecursively(directory_contents));
   EXPECT_TRUE(PathExists(subdir_path));
 }
 #endif
@@ -1560,11 +1560,11 @@
   ASSERT_TRUE(PathExists(subdir_path2));
 
   // Delete recursively and check that the empty dir got deleted
-  EXPECT_TRUE(DeleteFile(subdir_path2, true));
+  EXPECT_TRUE(DeleteFileRecursively(subdir_path2));
   EXPECT_FALSE(PathExists(subdir_path2));
 
   // Delete recursively and check that everything got deleted
-  EXPECT_TRUE(DeleteFile(test_subdir, true));
+  EXPECT_TRUE(DeleteFileRecursively(test_subdir));
   EXPECT_FALSE(PathExists(file_name));
   EXPECT_FALSE(PathExists(subdir_path1));
   EXPECT_FALSE(PathExists(test_subdir));
@@ -1609,7 +1609,7 @@
 
   // Delete recursively and check that at least the second file got deleted.
   // This ensures that un-deletable files don't impact those that can be.
-  DeleteFile(test_subdir, true);
+  DeleteFileRecursively(test_subdir);
   EXPECT_FALSE(PathExists(file_name2));
 
 #if defined(OS_LINUX)
@@ -2750,7 +2750,7 @@
   EXPECT_TRUE(PathExists(test_path));
   EXPECT_FALSE(CreateDirectory(test_path));
 
-  EXPECT_TRUE(DeleteFile(test_root, true));
+  EXPECT_TRUE(DeleteFileRecursively(test_root));
   EXPECT_FALSE(PathExists(test_root));
   EXPECT_FALSE(PathExists(test_path));
 
@@ -2797,7 +2797,7 @@
   EXPECT_FALSE(DirectoryExists(test_path));
   EXPECT_TRUE(DeleteFile(test_path, false));
 
-  EXPECT_TRUE(DeleteFile(test_root, true));
+  EXPECT_TRUE(DeleteFileRecursively(test_root));
 }
 
 TEST_F(FileUtilTest, FileEnumeratorTest) {
@@ -2954,13 +2954,13 @@
 
   // Create a fresh, empty copy of this directory.
   if (PathExists(data_dir)) {
-    ASSERT_TRUE(DeleteFile(data_dir, true));
+    ASSERT_TRUE(DeleteFileRecursively(data_dir));
   }
   ASSERT_TRUE(CreateDirectory(data_dir));
 
   // Create a fresh, empty copy of this directory.
   if (PathExists(data_dir)) {
-    ASSERT_TRUE(DeleteFile(data_dir, true));
+    ASSERT_TRUE(DeleteFileRecursively(data_dir));
   }
   ASSERT_TRUE(CreateDirectory(data_dir));
   FilePath foobar(data_dir.Append(FILE_PATH_LITERAL("foobar.txt")));
@@ -3470,7 +3470,7 @@
 
   // Create a fresh, empty copy of this directory.
   if (PathExists(data_dir)) {
-    ASSERT_TRUE(DeleteFile(data_dir, true));
+    ASSERT_TRUE(DeleteFileRecursively(data_dir));
   }
   ASSERT_TRUE(CreateDirectory(data_dir));
 
diff --git a/base/files/file_util_win.cc b/base/files/file_util_win.cc
index 94cff1e..4d47144 100644
--- a/base/files/file_util_win.cc
+++ b/base/files/file_util_win.cc
@@ -348,18 +348,7 @@
              : ReturnLastErrorOrSuccessOnNotFound();
 }
 
-}  // namespace
-
-FilePath MakeAbsoluteFilePath(const FilePath& input) {
-  ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
-  char16 file_path[MAX_PATH];
-  if (!_wfullpath(as_writable_wcstr(file_path), as_wcstr(input.value()),
-                  MAX_PATH))
-    return FilePath();
-  return FilePath(file_path);
-}
-
-bool DeleteFile(const FilePath& path, bool recursive) {
+bool DeleteFileAndRecordMetrics(const FilePath& path, bool recursive) {
   static constexpr char kRecursive[] = "DeleteFile.Recursive";
   static constexpr char kNonRecursive[] = "DeleteFile.NonRecursive";
   const StringPiece operation(recursive ? kRecursive : kNonRecursive);
@@ -379,6 +368,25 @@
   return false;
 }
 
+}  // namespace
+
+FilePath MakeAbsoluteFilePath(const FilePath& input) {
+  ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
+  char16 file_path[MAX_PATH];
+  if (!_wfullpath(as_writable_wcstr(file_path), as_wcstr(input.value()),
+                  MAX_PATH))
+    return FilePath();
+  return FilePath(file_path);
+}
+
+bool DeleteFile(const FilePath& path, bool recursive) {
+  return DeleteFileAndRecordMetrics(path, recursive);
+}
+
+bool DeleteFileRecursively(const FilePath& path) {
+  return DeleteFileAndRecordMetrics(path, /*recursive=*/true);
+}
+
 bool DeleteFileAfterReboot(const FilePath& path) {
   ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
 
@@ -1025,7 +1033,7 @@
                             const FilePath& to_path) {
   ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
   if (CopyDirectory(from_path, to_path, true)) {
-    if (DeleteFile(from_path, true))
+    if (DeleteFileRecursively(from_path))
       return true;
 
     // Like Move, this function is not transactional, so we just
diff --git a/base/files/scoped_temp_dir.cc b/base/files/scoped_temp_dir.cc
index 01ec0f0..359b442 100644
--- a/base/files/scoped_temp_dir.cc
+++ b/base/files/scoped_temp_dir.cc
@@ -29,7 +29,7 @@
 
   // This "scoped_dir" prefix is only used on Windows and serves as a template
   // for the unique name.
-  if (!base::CreateNewTempDirectory(kScopedDirPrefix, &path_))
+  if (!CreateNewTempDirectory(kScopedDirPrefix, &path_))
     return false;
 
   return true;
@@ -40,11 +40,11 @@
     return false;
 
   // If |base_path| does not exist, create it.
-  if (!base::CreateDirectory(base_path))
+  if (!CreateDirectory(base_path))
     return false;
 
   // Create a new, uniquely named directory under |base_path|.
-  if (!base::CreateTemporaryDirInDir(base_path, kScopedDirPrefix, &path_))
+  if (!CreateTemporaryDirInDir(base_path, kScopedDirPrefix, &path_))
     return false;
 
   return true;
@@ -54,7 +54,7 @@
   if (!path_.empty())
     return false;
 
-  if (!DirectoryExists(path) && !base::CreateDirectory(path))
+  if (!DirectoryExists(path) && !CreateDirectory(path))
     return false;
 
   path_ = path;
@@ -65,7 +65,7 @@
   if (path_.empty())
     return false;
 
-  bool ret = base::DeleteFile(path_, true);
+  bool ret = DeleteFileRecursively(path_);
   if (ret) {
     // We only clear the path if deleted the directory.
     path_.clear();
diff --git a/base/files/scoped_temp_dir_unittest.cc b/base/files/scoped_temp_dir_unittest.cc
index 024b438..122d138b 100644
--- a/base/files/scoped_temp_dir_unittest.cc
+++ b/base/files/scoped_temp_dir_unittest.cc
@@ -14,8 +14,7 @@
 
 TEST(ScopedTempDir, FullPath) {
   FilePath test_path;
-  base::CreateNewTempDirectory(FILE_PATH_LITERAL("scoped_temp_dir"),
-                               &test_path);
+  CreateNewTempDirectory(FILE_PATH_LITERAL("scoped_temp_dir"), &test_path);
 
   // Against an existing dir, it should get destroyed when leaving scope.
   EXPECT_TRUE(DirectoryExists(test_path));
@@ -56,7 +55,7 @@
     test_path = dir.GetPath();
     EXPECT_TRUE(DirectoryExists(test_path));
     FilePath tmp_dir;
-    EXPECT_TRUE(base::GetTempDir(&tmp_dir));
+    EXPECT_TRUE(GetTempDir(&tmp_dir));
     EXPECT_TRUE(test_path.value().find(tmp_dir.value()) != std::string::npos);
   }
   EXPECT_FALSE(DirectoryExists(test_path));
@@ -65,8 +64,8 @@
 TEST(ScopedTempDir, UniqueTempDirUnderPath) {
   // Create a path which will contain a unique temp path.
   FilePath base_path;
-  ASSERT_TRUE(base::CreateNewTempDirectory(FILE_PATH_LITERAL("base_dir"),
-                                           &base_path));
+  ASSERT_TRUE(
+      CreateNewTempDirectory(FILE_PATH_LITERAL("base_dir"), &base_path));
 
   FilePath test_path;
   {
@@ -78,7 +77,7 @@
     EXPECT_TRUE(test_path.value().find(base_path.value()) != std::string::npos);
   }
   EXPECT_FALSE(DirectoryExists(test_path));
-  base::DeleteFile(base_path, true);
+  DeleteFileRecursively(base_path);
 }
 
 TEST(ScopedTempDir, MultipleInvocations) {
@@ -99,10 +98,10 @@
 TEST(ScopedTempDir, LockedTempDir) {
   ScopedTempDir dir;
   EXPECT_TRUE(dir.CreateUniqueTempDir());
-  base::File file(dir.GetPath().Append(FILE_PATH_LITERAL("temp")),
-                  base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
+  File file(dir.GetPath().Append(FILE_PATH_LITERAL("temp")),
+            File::FLAG_CREATE_ALWAYS | File::FLAG_WRITE);
   EXPECT_TRUE(file.IsValid());
-  EXPECT_EQ(base::File::FILE_OK, file.error_details());
+  EXPECT_EQ(File::FILE_OK, file.error_details());
   EXPECT_FALSE(dir.Delete());  // We should not be able to delete.
   EXPECT_FALSE(dir.GetPath().empty());  // We should still have a valid path.
   file.Close();
diff --git a/base/logging.cc b/base/logging.cc
index 04aabb6..282b26f 100644
--- a/base/logging.cc
+++ b/base/logging.cc
@@ -858,9 +858,13 @@
 
     fx_logger_t* logger = fx_log_get_logger();
     if (logger) {
-      // Temporarily pop the trailing newline, since fx_logger will add one.
+      // Temporarily remove the trailing newline from |str_newline|'s C-string
+      // representation, since fx_logger will add a newline of its own.
       str_newline.pop_back();
-      fx_logger_log(logger, severity, nullptr, str_newline.c_str());
+      std::string message =
+          base::StringPrintf("%s(%d) %s", file_basename_, line_,
+                             str_newline.c_str() + message_start_);
+      fx_logger_log(logger, severity, nullptr, message.data());
       str_newline.push_back('\n');
     }
 #endif  // OS_FUCHSIA
@@ -962,6 +966,9 @@
   if (last_slash_pos != base::StringPiece::npos)
     filename.remove_prefix(last_slash_pos + 1);
 
+  // Stores the base name as the null-terminated suffix substring of |filename|.
+  file_basename_ = filename.data();
+
   // TODO(darin): It might be nice if the columns were fixed width.
 
   stream_ <<  '[';
diff --git a/base/logging.h b/base/logging.h
index cdb9d7c..0713dbd 100644
--- a/base/logging.h
+++ b/base/logging.h
@@ -921,6 +921,7 @@
   // The file and line information passed in to the constructor.
   const char* file_;
   const int line_;
+  const char* file_basename_;
 
   // This is useful since the LogMessage class uses a lot of Win32 calls
   // that will lose the value of GLE and the code that called the log function
diff --git a/base/test/generate_fontconfig_caches.cc b/base/test/generate_fontconfig_caches.cc
index f0774f8c..365cb3b 100644
--- a/base/test/generate_fontconfig_caches.cc
+++ b/base/test/generate_fontconfig_caches.cc
@@ -52,7 +52,7 @@
 
   // Delete directory before generating fontconfig caches. This will notify
   // future fontconfig_caches changes.
-  CHECK(base::DeleteFile(fontconfig_caches, /*recursive=*/true));
+  CHECK(base::DeleteFileRecursively(fontconfig_caches));
 
   base::SetUpFontconfig();
   FcInit();
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc
index 3fc65dca..9691186 100644
--- a/base/test/launcher/test_launcher.cc
+++ b/base/test/launcher/test_launcher.cc
@@ -435,7 +435,7 @@
     ZX_CHECK(status == ZX_OK, status);
 
     // Cleanup the data directory.
-    CHECK(DeleteFile(nested_data_path, true));
+    CHECK(DeleteFileRecursively(nested_data_path));
 #elif defined(OS_POSIX)
     if (exit_code != 0) {
       // On POSIX, in case the test does not exit cleanly, either due to a crash
@@ -643,7 +643,7 @@
                                 FilePath temp_dir) {
   DCHECK(thread_checker_.CalledOnValidThread());
   // delete previous temporary directory
-  if (!temp_dir.empty() && !DeleteFile(temp_dir, true)) {
+  if (!temp_dir.empty() && !DeleteFileRecursively(temp_dir)) {
     // This needs to be non-fatal at least for Windows.
     LOG(WARNING) << "Failed to delete " << temp_dir.AsUTF8Unsafe();
   }
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 76e55fe5..03d02988 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -1158,7 +1158,8 @@
   scoped_refptr<Layer> grand_child_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSurfaceDamage);
+// TODO(crbug.com/1014263): Disable because this test is flaky.
+// SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSurfaceDamage);
 
 class LayerTreeHostTestLayerListSurfaceDamage : public LayerTreeHostTest {
  protected:
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index b44570f..b9949a7 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -713,7 +713,6 @@
   "java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java",
   "java/src/org/chromium/chrome/browser/fullscreen/FullscreenOptions.java",
   "java/src/org/chromium/chrome/browser/fullscreen/TabGestureStateListener.java",
-  "java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java",
   "java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClient.java",
   "java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClientImpl.java",
   "java/src/org/chromium/chrome/browser/gcore/ConnectedTask.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index f39631a..c7a276d0 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -83,7 +83,6 @@
   "junit/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationUnitTest.java",
   "junit/src/org/chromium/chrome/browser/firstrun/ToSAckedReceiverTest.java",
   "junit/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegateTest.java",
-  "junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java",
   "junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java",
   "junit/src/org/chromium/chrome/browser/history/HistoryDeletionBridgeTest.java",
   "junit/src/org/chromium/chrome/browser/image_fetcher/CachedImageFetcherTest.java",
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java
index 3e1e4988..96d7eaa 100644
--- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java
+++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java
@@ -22,10 +22,7 @@
     // Implements TasksSurface.FakeSearchBoxDelegate.
     @Override
     public void requestUrlFocus(@Nullable String pastedText) {
-        mLocationBar.setUrlBarFocus(true, pastedText,
-                pastedText == null
-                        ? LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP
-                        : LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS);
+        mLocationBar.setUrlBarFocus(true);
     }
 
     // Implements StartSurfaceMediator.Delegate.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java
index 8b570669..d52ebc6d4 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java
@@ -5,15 +5,12 @@
 package org.chromium.chrome.browser.tasks;
 
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_CLICK_LISTENER;
-import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_TEXT_WATCHER;
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE;
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_TAB_CAROUSEL;
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_VOICE_RECOGNITION_BUTTON_VISIBLE;
 
 import android.content.Context;
 import android.support.annotation.Nullable;
-import android.text.Editable;
-import android.text.TextWatcher;
 import android.view.View;
 
 import org.chromium.ui.modelutil.PropertyModel;
@@ -39,28 +36,13 @@
                 mFakeSearchBoxDelegate.requestUrlFocus(null);
             }
         });
-        mModel.set(FAKE_SEARCH_BOX_TEXT_WATCHER, new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
-            @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {}
-
-            @Override
-            public void afterTextChanged(Editable s) {
-                if (s.length() == 0) return;
-                mFakeSearchBoxDelegate.requestUrlFocus(s.toString());
-
-                // This won't cause infinite loop since we checked s.length() == 0 above.
-                s.clear();
-            }
-        });
 
         // Set the initial state.
         mModel.set(IS_FAKE_SEARCH_BOX_VISIBLE, true);
         mModel.set(IS_VOICE_RECOGNITION_BUTTON_VISIBLE, false);
 
         // TODO(crbug.com/982018): Enable voice recognition button in the fake search box.
+        // TODO(crbug.com/982018): Enable long press and paste search in the fake search box.
         // TODO(crbug.com/982018): Change the fake search box in dark mode.
     }
 }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java
index fee0254..6cc4c9e 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java
@@ -6,7 +6,6 @@
 
 import static org.chromium.chrome.browser.tasks.MostVisitedListProperties.IS_VISIBLE;
 
-import android.text.TextWatcher;
 import android.view.View;
 
 import org.chromium.ui.modelutil.PropertyKey;
@@ -29,14 +28,10 @@
             .WritableObjectPropertyKey<View.OnClickListener> FAKE_SEARCH_BOX_CLICK_LISTENER =
             new PropertyModel.WritableObjectPropertyKey<View.OnClickListener>();
     public static final PropertyModel
-            .WritableObjectPropertyKey<TextWatcher> FAKE_SEARCH_BOX_TEXT_WATCHER =
-            new PropertyModel.WritableObjectPropertyKey<TextWatcher>();
-    public static final PropertyModel
             .WritableObjectPropertyKey<View.OnClickListener> MORE_TABS_CLICK_LISTENER =
             new PropertyModel.WritableObjectPropertyKey<View.OnClickListener>();
     public static final PropertyModel.WritableBooleanPropertyKey MV_TILES_VISIBLE = IS_VISIBLE;
-    public static final PropertyKey[] ALL_KEYS =
-            new PropertyKey[] {IS_FAKE_SEARCH_BOX_VISIBLE, IS_INCOGNITO, IS_TAB_CAROUSEL,
-                    IS_VOICE_RECOGNITION_BUTTON_VISIBLE, FAKE_SEARCH_BOX_CLICK_LISTENER,
-                    FAKE_SEARCH_BOX_TEXT_WATCHER, MORE_TABS_CLICK_LISTENER, MV_TILES_VISIBLE};
+    public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {IS_FAKE_SEARCH_BOX_VISIBLE,
+            IS_INCOGNITO, IS_TAB_CAROUSEL, IS_VOICE_RECOGNITION_BUTTON_VISIBLE,
+            FAKE_SEARCH_BOX_CLICK_LISTENER, MORE_TABS_CLICK_LISTENER, MV_TILES_VISIBLE};
 }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java
index a37e66e6..24a083d 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java
@@ -7,7 +7,6 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.support.v4.view.MarginLayoutParamsCompat;
-import android.text.TextWatcher;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
@@ -77,14 +76,6 @@
     }
 
     /**
-     * Set the given watcher for the fake search box.
-     * @param textWatcher The given {@link TextWatcher}.
-     */
-    void setFakeSearchBoxTextWatcher(TextWatcher textWatcher) {
-        mSearchBoxText.addTextChangedListener(textWatcher);
-    }
-
-    /**
      * Set the visibility of the fake search box.
      * @param isVisible Whether it's visible.
      */
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java
index 2f63d7f..8c2becd 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java
@@ -5,7 +5,6 @@
 package org.chromium.chrome.browser.tasks;
 
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_CLICK_LISTENER;
-import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_TEXT_WATCHER;
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE;
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_INCOGNITO;
 import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_TAB_CAROUSEL;
@@ -23,8 +22,6 @@
     public static void bind(PropertyModel model, TasksView view, PropertyKey propertyKey) {
         if (propertyKey == FAKE_SEARCH_BOX_CLICK_LISTENER) {
             view.setFakeSearchBoxClickListener(model.get(FAKE_SEARCH_BOX_CLICK_LISTENER));
-        } else if (propertyKey == FAKE_SEARCH_BOX_TEXT_WATCHER) {
-            view.setFakeSearchBoxTextWatcher(model.get(FAKE_SEARCH_BOX_TEXT_WATCHER));
         } else if (propertyKey == IS_FAKE_SEARCH_BOX_VISIBLE) {
             view.setFakeSearchBoxVisibility(model.get(IS_FAKE_SEARCH_BOX_VISIBLE));
         } else if (propertyKey == IS_INCOGNITO) {
diff --git a/chrome/android/java/res/values/styles.xml b/chrome/android/java/res/values/styles.xml
index d0e2ac6..156410a 100644
--- a/chrome/android/java/res/values/styles.xml
+++ b/chrome/android/java/res/values/styles.xml
@@ -642,6 +642,7 @@
         <item name="tabPaddingEnd">5dp</item>
         <item name="tabMode">fixed</item>
         <item name="tabGravity">fill</item>
+        <item name="tabMaxWidth">0dp</item>
         <item name="tabTextColor">@color/default_text_color_secondary</item>
         <item name="tabSelectedTextColor">@color/tab_layout_selected_tab_color</item>
         <item name="android:background">@color/modern_primary_color</item>
diff --git a/chrome/android/java/res_download/layout/download_home_tabs.xml b/chrome/android/java/res_download/layout/download_home_tabs.xml
index 91e0ec9..f838599 100644
--- a/chrome/android/java/res_download/layout/download_home_tabs.xml
+++ b/chrome/android/java/res_download/layout/download_home_tabs.xml
@@ -5,7 +5,6 @@
 -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index 94de4ec..2fbd4a5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -181,6 +181,7 @@
 import org.chromium.ui.display.DisplayAndroid;
 import org.chromium.ui.display.DisplayUtil;
 import org.chromium.ui.modaldialog.ModalDialogManager;
+import org.chromium.ui.util.TokenHolder;
 import org.chromium.ui.widget.Toast;
 import org.chromium.webapk.lib.client.WebApkNavigationClient;
 import org.chromium.webapk.lib.client.WebApkValidator;
@@ -1486,14 +1487,37 @@
                 this, mBottomSheet.findViewById(R.id.bottom_sheet_snackbar_container));
 
         mBottomSheet.addObserver(new EmptyBottomSheetObserver() {
+            /** A token for suppressing app modal dialogs. */
+            private int mAppModalToken = TokenHolder.INVALID_TOKEN;
+            /** A token for suppressing tab modal dialogs. */
+            private int mTabModalToken = TokenHolder.INVALID_TOKEN;
+
             @Override
             public void onSheetOpened(int reason) {
                 addViewObscuringAllTabs(mBottomSheet);
+
+                assert mAppModalToken == TokenHolder.INVALID_TOKEN;
+                assert mTabModalToken == TokenHolder.INVALID_TOKEN;
+                if (getModalDialogManager() != null) {
+                    mAppModalToken = getModalDialogManager().suspendType(
+                            ModalDialogManager.ModalDialogType.APP);
+                    mTabModalToken = getModalDialogManager().suspendType(
+                            ModalDialogManager.ModalDialogType.TAB);
+                }
             }
 
             @Override
             public void onSheetClosed(int reason) {
                 removeViewObscuringAllTabs(mBottomSheet);
+
+                if (getModalDialogManager() != null) {
+                    getModalDialogManager().resumeType(
+                            ModalDialogManager.ModalDialogType.APP, mAppModalToken);
+                    getModalDialogManager().resumeType(
+                            ModalDialogManager.ModalDialogType.TAB, mTabModalToken);
+                }
+                mAppModalToken = TokenHolder.INVALID_TOKEN;
+                mTabModalToken = TokenHolder.INVALID_TOKEN;
             }
 
             @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index da03f96..c22630e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -106,7 +106,6 @@
 import org.chromium.chrome.browser.ntp.NewTabPage;
 import org.chromium.chrome.browser.ntp.NewTabPageUma;
 import org.chromium.chrome.browser.omaha.OmahaBase;
-import org.chromium.chrome.browser.omnibox.LocationBar;
 import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
 import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
@@ -1533,9 +1532,7 @@
                     assert false : "Unknown TabOpenType: " + tabOpenType;
                     break;
             }
-            getToolbarManager().setUrlBarFocusOnceNativeInitialized(focus,
-                    focus ? LocationBar.OmniboxFocusReason.LAUNCH_NEW_INCOGNITO_TAB
-                          : LocationBar.OmniboxFocusReason.UNFOCUS);
+            getToolbarManager().setUrlBarFocusOnceNativeInitialized(focus);
         }
 
         @Override
@@ -1831,8 +1828,7 @@
             boolean isUrlBarVisible = !mOverviewModeController.overviewVisible()
                     && (!isTablet() || getCurrentTabModel().getCount() != 0);
             if (isUrlBarVisible) {
-                getToolbarManager().setUrlBarFocus(
-                        true, LocationBar.OmniboxFocusReason.MENU_OR_KEYBOARD_ACTION);
+                getToolbarManager().setUrlBarFocus(true);
             }
         } else if (id == R.id.downloads_menu_id) {
             DownloadUtils.showDownloadManager(this, currentTab, DownloadOpenSource.MENU);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java
index 79da58a..44568dc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java
@@ -34,7 +34,6 @@
 import org.chromium.chrome.browser.compositor.scene_layer.ToolbarSceneLayer;
 import org.chromium.chrome.browser.contextualsearch.ContextualSearchManagementDelegate;
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
-import org.chromium.chrome.browser.fullscreen.FullscreenManager;
 import org.chromium.chrome.browser.native_page.NativePageFactory;
 import org.chromium.chrome.browser.ntp.NewTabPage;
 import org.chromium.chrome.browser.tab.SadTab;
@@ -59,6 +58,7 @@
 import org.chromium.ui.base.SPenSupport;
 import org.chromium.ui.resources.ResourceManager;
 import org.chromium.ui.resources.dynamics.DynamicResourceLoader;
+import org.chromium.ui.util.TokenHolder;
 
 import java.util.List;
 
@@ -111,8 +111,8 @@
 
     // Internal State
     private final SparseArray<LayoutTab> mTabCache = new SparseArray<>();
-    private int mControlsShowingToken = FullscreenManager.INVALID_TOKEN;
-    private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN;
+    private int mControlsShowingToken = TokenHolder.INVALID_TOKEN;
+    private int mControlsHidingToken = TokenHolder.INVALID_TOKEN;
     private boolean mUpdateRequested;
     private final ContextualSearchPanel mContextualSearchPanel;
     private final EphemeralTabPanel mEphemeralTabPanel;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
index d70729d..0e2ef49 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -214,7 +214,7 @@
         // Only add new values at the end, right before NUM_ENTRIES.
         @IntDef({LensSupportStatus.LENS_SUPPORTED, LensSupportStatus.NON_GOOGLE_SEARCH_ENGINE,
                 LensSupportStatus.ACTIVITY_NOT_ACCESSIBLE, LensSupportStatus.OUT_OF_DATE,
-                LensSupportStatus.SEARCH_BY_IMAGE_UNAVAILABLE})
+                LensSupportStatus.SEARCH_BY_IMAGE_UNAVAILABLE, LensSupportStatus.LEGACY_OS})
         @Retention(RetentionPolicy.SOURCE)
         public @interface LensSupportStatus {
             int LENS_SUPPORTED = 0;
@@ -222,7 +222,8 @@
             int ACTIVITY_NOT_ACCESSIBLE = 2;
             int OUT_OF_DATE = 3;
             int SEARCH_BY_IMAGE_UNAVAILABLE = 4;
-            int NUM_ENTRIES = 5;
+            int LEGACY_OS = 5;
+            int NUM_ENTRIES = 6;
         }
 
         /**
@@ -630,6 +631,11 @@
             return false;
         }
 
+        if (LensUtils.isDeviceOsBelowMinimum()) {
+            ContextMenuUma.recordLensSupportStatus(ContextMenuUma.LensSupportStatus.LEGACY_OS);
+            return false;
+        }
+
         ContextMenuUma.recordLensSupportStatus(ContextMenuUma.LensSupportStatus.LENS_SUPPORTED);
         return true;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java
index 604d2a1..1cbb853 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java
@@ -9,10 +9,10 @@
 import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
 import org.chromium.chrome.browser.dependency_injection.ActivityScope;
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
-import org.chromium.chrome.browser.fullscreen.FullscreenManager;
 import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.lifecycle.InflationObserver;
 import org.chromium.chrome.browser.lifecycle.NativeInitObserver;
+import org.chromium.ui.util.TokenHolder;
 
 import javax.inject.Inject;
 
@@ -27,7 +27,7 @@
     private final CustomTabToolbarCoordinator mToolbarCoordinator;
     private final CustomTabIntentDataProvider mIntentDataProvider;
 
-    private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN;
+    private int mControlsHidingToken = TokenHolder.INVALID_TOKEN;
     private boolean mHasReleasedToken;
 
     @Inject
@@ -73,6 +73,6 @@
 
     @VisibleForTesting
     boolean hasAcquiredToken() {
-        return mControlsHidingToken != FullscreenManager.INVALID_TOKEN;
+        return mControlsHidingToken != TokenHolder.INVALID_TOKEN;
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java
index de6b9f1e..35edeb8a5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java
@@ -10,6 +10,8 @@
 import android.text.TextUtils;
 import android.view.View;
 
+import androidx.browser.customtabs.CustomTabsIntent;
+
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
@@ -32,11 +34,11 @@
 import org.chromium.chrome.browser.tab.TabObserverRegistrar;
 import org.chromium.chrome.browser.toolbar.ToolbarManager;
 import org.chromium.chrome.browser.util.ColorUtils;
+import org.chromium.ui.util.TokenHolder;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import androidx.browser.customtabs.CustomTabsIntent;
 import dagger.Lazy;
 
 /**
@@ -68,7 +70,7 @@
     private final CustomTabStatusBarColorProvider mStatusBarColorProvider;
     private final CustomTabBrowserControlsVisibilityDelegate mVisibilityDelegate;
 
-    private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN;
+    private int mControlsHidingToken = TokenHolder.INVALID_TOKEN;
     private boolean mInitializedToolbarWithNative;
 
     @Inject
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java
index 8828c4e..beded678 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java
@@ -12,6 +12,7 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.tab.BrowserControlsVisibilityDelegate;
+import org.chromium.ui.util.TokenHolder;
 
 /**
  * Determines the desired visibility of the browser controls based on the current state of the
@@ -51,8 +52,9 @@
 
     private void ensureControlsVisibleForMinDuration() {
         // Do not lock the controls as visible. Such as in testing.
-        if (CommandLine.getInstance().hasSwitch(ChromeSwitches.DISABLE_MINIMUM_SHOW_DURATION))
+        if (CommandLine.getInstance().hasSwitch(ChromeSwitches.DISABLE_MINIMUM_SHOW_DURATION)) {
             return;
+        }
         if (mHandler.hasMessages(0)) return; // Messages sent via post/postDelayed have what=0
 
         long currentShowingTime = SystemClock.uptimeMillis() - mCurrentShowingStartTime;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
index 5f3a7e3..697ce51 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
@@ -48,6 +48,7 @@
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.common.BrowserControlsState;
+import org.chromium.ui.util.TokenHolder;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java
index 9a1e71f..6f1b66d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java
@@ -21,8 +21,6 @@
 // TODO(tedchoc): Remove Tab's requirement on the fullscreen tokens to slim down the API of this
 //                class.
 public abstract class FullscreenManager {
-    public static final int INVALID_TOKEN = -1;
-
     private final FullscreenHtmlApiHandler mHtmlApiHandler;
     private boolean mOverlayVideoMode;
     @Nullable private Tab mTab;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java
index 721fefb2..f119b27 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java
@@ -16,6 +16,7 @@
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType;
+import org.chromium.ui.util.TokenHolder;
 
 /**
  * Class responsible for handling dismissal of a tab modal dialog on user actions outside the tab
@@ -44,6 +45,7 @@
     private TabModalPresenter mPresenter;
     private TabModelSelectorTabModelObserver mTabModelObserver;
     private Tab mActiveTab;
+    private int mTabModalSuspendedToken;
 
     /**
      * @param activity The {@link ChromeActivity} that this handler is attached to.
@@ -53,6 +55,7 @@
         mActivity = activity;
         mManager = manager;
         activity.getLifecycleDispatcher().register(this);
+        mTabModalSuspendedToken = TokenHolder.INVALID_TOKEN;
     }
 
     /**
@@ -114,9 +117,10 @@
     private void updateSuspensionState() {
         assert mActiveTab != null;
         if (mActiveTab.isUserInteractable()) {
-            mManager.resumeType(ModalDialogType.TAB);
-        } else {
-            mManager.suspendType(ModalDialogType.TAB);
+            mManager.resumeType(ModalDialogType.TAB, mTabModalSuspendedToken);
+            mTabModalSuspendedToken = TokenHolder.INVALID_TOKEN;
+        } else if (mTabModalSuspendedToken == TokenHolder.INVALID_TOKEN) {
+            mTabModalSuspendedToken = mManager.suspendType(ModalDialogType.TAB);
         }
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java
index 48b6d5d..046cf88 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java
@@ -22,7 +22,6 @@
 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
 import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
-import org.chromium.chrome.browser.omnibox.LocationBar;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabAttributeKeys;
 import org.chromium.chrome.browser.tab.TabAttributes;
@@ -290,6 +289,8 @@
      * @param restricted Whether the browser controls access should be restricted.
      */
     private void setBrowserControlsAccess(boolean restricted) {
+        if (mChromeActivity.getToolbarManager() == null) return;
+
         View menuButton = mChromeActivity.getToolbarManager().getMenuButtonView();
 
         if (restricted) {
@@ -325,8 +326,7 @@
             // Force toolbar to show and disable overflow menu.
             onTabModalDialogStateChanged(true);
 
-            mChromeActivity.getToolbarManager().setUrlBarFocus(
-                    false, LocationBar.OmniboxFocusReason.UNFOCUS);
+            mChromeActivity.getToolbarManager().setUrlBarFocus(false);
 
             menuButton.setEnabled(false);
         } else {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
index 4887603..0bda0f2b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
@@ -9,9 +9,6 @@
 import android.view.ViewGroup;
 import android.view.Window;
 
-import androidx.annotation.IntDef;
-import androidx.annotation.Nullable;
-
 import org.chromium.chrome.browser.ActivityTabProvider;
 import org.chromium.chrome.browser.WindowDelegate;
 import org.chromium.chrome.browser.ntp.NewTabPage;
@@ -23,41 +20,10 @@
 import org.chromium.chrome.browser.toolbar.top.ToolbarActionModeCallback;
 import org.chromium.ui.base.WindowAndroid;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Container that holds the {@link UrlBar} and SSL state related with the current {@link Tab}.
  */
 public interface LocationBar extends UrlBarDelegate {
-    /** A means of tracking which mechanism is being used to focus the omnibox. */
-    @IntDef({OmniboxFocusReason.OMNIBOX_TAP, OmniboxFocusReason.OMNIBOX_LONG_PRESS,
-            OmniboxFocusReason.FAKE_BOX_TAP, OmniboxFocusReason.FAKE_BOX_LONG_PRESS,
-            OmniboxFocusReason.ACCELERATOR_TAP, OmniboxFocusReason.TAB_SWITCHER_OMNIBOX_TAP,
-            OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP,
-            OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS,
-            OmniboxFocusReason.DEFAULT_WITH_HARDWARE_KEYBOARD, OmniboxFocusReason.SEARCH_QUERY,
-            OmniboxFocusReason.LAUNCH_NEW_INCOGNITO_TAB, OmniboxFocusReason.MENU_OR_KEYBOARD_ACTION,
-            OmniboxFocusReason.UNFOCUS})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface OmniboxFocusReason {
-        int OMNIBOX_TAP = 0;
-        int OMNIBOX_LONG_PRESS = 1;
-        int FAKE_BOX_TAP = 2;
-        int FAKE_BOX_LONG_PRESS = 3;
-        int ACCELERATOR_TAP = 4;
-        // TAB_SWITCHER_OMNIBOX_TAP has not been used anymore, keep it for record for now.
-        int TAB_SWITCHER_OMNIBOX_TAP = 5;
-        int TASKS_SURFACE_FAKE_BOX_TAP = 6;
-        int TASKS_SURFACE_FAKE_BOX_LONG_PRESS = 7;
-        int DEFAULT_WITH_HARDWARE_KEYBOARD = 8;
-        int SEARCH_QUERY = 9;
-        int LAUNCH_NEW_INCOGNITO_TAB = 10;
-        int MENU_OR_KEYBOARD_ACTION = 11;
-        int UNFOCUS = 12;
-        int NUM_ENTRIES = 13;
-    }
-
     /**
      * Cleanup resources when this goes out of scope.
      */
@@ -156,11 +122,8 @@
      * Signal a {@link UrlBar} focus change request.
      * @param shouldBeFocused Whether the focus should be requested or cleared. True requests focus
      *        and False clears focus.
-     * @param pastedText The given pasted text when focus, which could be null.
-     * @param reason The given reason.
      */
-    void setUrlBarFocus(
-            boolean shouldBeFocused, @Nullable String pastedText, @OmniboxFocusReason int reason);
+    void setUrlBarFocus(boolean shouldBeFocused);
 
     /**
      * Triggers the cursor to be visible in the UrlBar without triggering any of the focus animation
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
index 6bb64d4..0e2456c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -30,7 +30,6 @@
 import org.chromium.base.CommandLine;
 import org.chromium.base.ObserverList;
 import org.chromium.base.VisibleForTesting;
-import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ActivityTabProvider;
@@ -42,7 +41,6 @@
 import org.chromium.chrome.browser.ntp.NewTabPage;
 import org.chromium.chrome.browser.ntp.NewTabPage.FakeboxDelegate;
 import org.chromium.chrome.browser.ntp.NewTabPageUma;
-import org.chromium.chrome.browser.omnibox.LocationBar.OmniboxFocusReason;
 import org.chromium.chrome.browser.omnibox.UrlBar.ScrollType;
 import org.chromium.chrome.browser.omnibox.UrlBarCoordinator.SelectionState;
 import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader;
@@ -58,6 +56,7 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil;
 import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
+import org.chromium.chrome.browser.toolbar.ToolbarManager;
 import org.chromium.chrome.browser.toolbar.top.ToolbarActionModeCallback;
 import org.chromium.chrome.browser.ui.widget.CompositeTouchDelegate;
 import org.chromium.chrome.browser.util.AccessibilityUtil;
@@ -78,10 +77,6 @@
 public class LocationBarLayout extends FrameLayout
         implements OnClickListener, LocationBar, AutocompleteDelegate, FakeboxDelegate,
                    LocationBarVoiceRecognitionHandler.Delegate {
-    private static final EnumeratedHistogramSample ENUMERATED_FOCUS_REASON =
-            new EnumeratedHistogramSample(
-                    "Android.OmniboxFocusReason", OmniboxFocusReason.NUM_ENTRIES);
-
     protected ImageButton mDeleteButton;
     protected ImageButton mMicButton;
     protected UrlBar mUrlBar;
@@ -264,7 +259,7 @@
                 && newConfig.keyboard != Configuration.KEYBOARD_QWERTY) {
             // If we lose the hardware keyboard and the focus animations were not run, then the
             // user has not typed any text, so we will just clear the focus instead.
-            setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
+            setUrlBarFocus(false);
         }
     }
 
@@ -371,35 +366,13 @@
     }
 
     @Override
-    public void setUrlBarFocus(
-            boolean shouldBeFocused, @Nullable String pastedText, @OmniboxFocusReason int reason) {
+    public void setUrlBarFocus(boolean shouldBeFocused) {
         if (shouldBeFocused) {
-            if (!mUrlHasFocus) recordOmniboxFocusReason(reason);
-
-            if (reason == LocationBar.OmniboxFocusReason.FAKE_BOX_TAP
-                    || reason == LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS
-                    || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS
-                    || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP) {
-                mUrlFocusedFromFakebox = true;
-            }
-
-            if (mUrlHasFocus && mUrlFocusedWithoutAnimations) {
-                handleUrlFocusAnimation(mUrlHasFocus);
-            } else {
-                mUrlBar.requestFocus();
-            }
+            mUrlBar.requestFocus();
         } else {
-            assert pastedText == null;
             hideKeyboard();
             mUrlBar.clearFocus();
         }
-
-        if (pastedText != null) {
-            // This must be happen after requestUrlFocus(), which changes the selection.
-            mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(pastedText),
-                    UrlBar.ScrollType.NO_SCROLL, UrlBarCoordinator.SelectionState.SELECT_END);
-            forceOnTextChanged();
-        }
     }
 
     @Override
@@ -409,7 +382,7 @@
 
     @Override
     public void clearOmniboxFocus() {
-        setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
+        setUrlBarFocus(false);
     }
 
     @Override
@@ -562,11 +535,23 @@
 
     @Override
     public void requestUrlFocusFromFakebox(String pastedText) {
-        // TODO(crbug.com/1013693): Get rid of requestUrlFocusFromFakebox to let the caller uses
-        // setUrlBarFocus directly.
-        setUrlBarFocus(true, pastedText,
-                pastedText == null ? LocationBar.OmniboxFocusReason.FAKE_BOX_TAP
-                                   : LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS);
+        mUrlFocusedFromFakebox = true;
+        if (mUrlHasFocus && mUrlFocusedWithoutAnimations) {
+            handleUrlFocusAnimation(mUrlHasFocus);
+        } else {
+            setUrlBarFocus(true);
+        }
+
+        if (pastedText != null) {
+            ToolbarManager.recordOmniboxFocusReason(
+                    ToolbarManager.OmniboxFocusReason.FAKE_BOX_LONG_PRESS);
+            // This must be happen after requestUrlFocus(), which changes the selection.
+            mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(pastedText),
+                    UrlBar.ScrollType.NO_SCROLL, UrlBarCoordinator.SelectionState.SELECT_END);
+            forceOnTextChanged();
+        } else {
+            ToolbarManager.recordOmniboxFocusReason(ToolbarManager.OmniboxFocusReason.FAKE_BOX_TAP);
+        }
     }
 
     @Override
@@ -585,10 +570,7 @@
         if (mUrlHasFocus || mUrlFocusedFromFakebox) return;
 
         mUrlFocusedWithoutAnimations = true;
-
-        // This interface should only be called to devices with a hardware keyboard attached as
-        // described in the LocationBar.
-        setUrlBarFocus(true, null, LocationBar.OmniboxFocusReason.DEFAULT_WITH_HARDWARE_KEYBOARD);
+        setUrlBarFocus(true);
     }
 
     /**
@@ -817,7 +799,7 @@
 
         setUrlBarText(UrlBarData.forNonUrlText(query), UrlBar.ScrollType.NO_SCROLL,
                 SelectionState.SELECT_ALL);
-        setUrlBarFocus(true, null, LocationBar.OmniboxFocusReason.SEARCH_QUERY);
+        setUrlBarFocus(true);
         mAutocompleteCoordinator.startAutocompleteForQuery(query);
         post(new Runnable() {
             @Override
@@ -844,7 +826,7 @@
 
     @Override
     public void backKeyPressed() {
-        setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
+        setUrlBarFocus(false);
         // Revert the URL to match the current page.
         setUrlToPageUrl();
         focusCurrentTab();
@@ -863,12 +845,6 @@
         return mToolbarDataProvider.getDisplaySearchTerms() != null;
     }
 
-    @Override
-    public void gestureDetected(boolean isLongPress) {
-        recordOmniboxFocusReason(isLongPress ? LocationBar.OmniboxFocusReason.OMNIBOX_LONG_PRESS
-                                             : LocationBar.OmniboxFocusReason.OMNIBOX_TAP);
-    }
-
     /**
      * @return Returns the original url of the page.
      */
@@ -894,7 +870,7 @@
                 // If we did not run the focus animations, then the user has not typed any text.
                 // So, clear the focus and accept whatever URL the page is currently attempting to
                 // display. If the NTP is showing, the current page's URL should not be displayed.
-                setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
+                setUrlBarFocus(false);
             } else {
                 return;
             }
@@ -1143,8 +1119,4 @@
         String textWithAutocomplete = mUrlCoordinator.getTextWithAutocomplete();
         mAutocompleteCoordinator.onTextChanged(textWithoutAutocomplete, textWithAutocomplete);
     }
-
-    private void recordOmniboxFocusReason(@OmniboxFocusReason int reason) {
-        ENUMERATED_FOCUS_REASON.record(reason);
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
index 4d2bda3..af4f428 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
@@ -42,6 +42,7 @@
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.metrics.CachedMetrics;
 import org.chromium.chrome.browser.WindowDelegate;
+import org.chromium.chrome.browser.toolbar.ToolbarManager;
 import org.chromium.ui.KeyboardVisibilityDelegate;
 
 import java.lang.annotation.Retention;
@@ -209,12 +210,6 @@
          *         whatever's in the URL bar verbatim.
          */
         boolean shouldCutCopyVerbatim();
-
-        /**
-         * Called to notify that a tap or long press gesture has been detected.
-         * @param isLongPress Whether or not is a long press gesture.
-         */
-        void gestureDetected(boolean isLongPress);
     }
 
     /** Provides updates about the URL text changes. */
@@ -277,14 +272,16 @@
                 new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
                     @Override
                     public void onLongPress(MotionEvent e) {
-                        mUrlBarDelegate.gestureDetected(true);
+                        ToolbarManager.recordOmniboxFocusReason(
+                                ToolbarManager.OmniboxFocusReason.OMNIBOX_LONG_PRESS);
                         performLongClick();
                     }
 
                     @Override
                     public boolean onSingleTapUp(MotionEvent e) {
                         requestFocus();
-                        mUrlBarDelegate.gestureDetected(false);
+                        ToolbarManager.recordOmniboxFocusReason(
+                                ToolbarManager.OmniboxFocusReason.OMNIBOX_TAP);
                         return true;
                     }
                 }, ThreadUtils.getUiThreadHandler());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java b/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java
index 0149ce0..7bc72a1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java
@@ -11,8 +11,6 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.chrome.browser.ChromeActivity;
-import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
-import org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.modaldialog.ModalDialogProperties;
@@ -33,13 +31,13 @@
  */
 public class PermissionDialogController
         implements AndroidPermissionRequester.RequestDelegate, ModalDialogProperties.Controller {
-    @IntDef({State.NOT_SHOWING, State.PROMPT_PENDING, State.PROMPT_OPEN, State.PROMPT_ACCEPTED,
-            State.PROMPT_DENIED, State.REQUEST_ANDROID_PERMISSIONS})
+    @IntDef({State.NOT_SHOWING, State.PROMPT_OPEN, State.PROMPT_ACCEPTED, State.PROMPT_DENIED,
+            State.REQUEST_ANDROID_PERMISSIONS})
     @Retention(RetentionPolicy.SOURCE)
     private @interface State {
         int NOT_SHOWING = 0;
         // We don't show prompts while Chrome Home is showing.
-        int PROMPT_PENDING = 1;
+        // int PROMPT_PENDING = 1; // Obsolete.
         int PROMPT_OPEN = 2;
         int PROMPT_ACCEPTED = 3;
         int PROMPT_DENIED = 4;
@@ -139,7 +137,6 @@
         assert mState == State.NOT_SHOWING;
 
         mDialogDelegate = mRequestQueue.remove(0);
-        mState = State.PROMPT_PENDING;
         ChromeActivity activity = mDialogDelegate.getTab().getActivity();
 
         // It's possible for the activity to be null if we reach here just after the user
@@ -153,35 +150,6 @@
             return;
         }
 
-        // Suppress modals while Chrome Home is open. Eventually we will want to handle other cases
-        // whereby the tab is obscured so modals don't pop up on top of (e.g.) the tab switcher or
-        // the three-dot menu.
-        final BottomSheet bottomSheet = activity.getBottomSheet();
-        if (bottomSheet == null || !bottomSheet.isSheetOpen()) {
-            showDialog();
-        } else {
-            bottomSheet.addObserver(new EmptyBottomSheetObserver() {
-                @Override
-                public void onSheetClosed(int reason) {
-                    bottomSheet.removeObserver(this);
-                    if (reason == BottomSheet.StateChangeReason.NAVIGATION) {
-                        // Dismiss the prompt as it would otherwise be dismissed momentarily once
-                        // the navigation completes.
-                        // TODO(timloh): This logs a dismiss (and we also already logged a show),
-                        // even though the user didn't see anything.
-                        mDialogDelegate.onDismiss();
-                        destroyDelegate();
-                    } else {
-                        showDialog();
-                    }
-                }
-            });
-        }
-    }
-
-    private void showDialog() {
-        assert mState == State.PROMPT_PENDING;
-
         // The tab may have navigated or been closed while we were waiting for Chrome Home to close.
         if (mDialogDelegate == null) {
             mState = State.NOT_SHOWING;
@@ -205,8 +173,8 @@
                 mModalDialogManager.dismissDialog(
                         mDialogModel, DialogDismissalCause.DISMISSED_BY_NATIVE);
             } else {
-                assert mState == State.PROMPT_PENDING || mState == State.REQUEST_ANDROID_PERMISSIONS
-                        || mState == State.PROMPT_DENIED || mState == State.PROMPT_ACCEPTED;
+                assert mState == State.REQUEST_ANDROID_PERMISSIONS || mState == State.PROMPT_DENIED
+                        || mState == State.PROMPT_ACCEPTED;
             }
         } else {
             assert mRequestQueue.contains(delegate);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
index bcee94c..de48479 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
@@ -10,6 +10,7 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.net.Uri;
+import android.os.Build;
 import android.text.TextUtils;
 
 import org.chromium.base.ContextUtils;
@@ -31,15 +32,16 @@
     /**
      * See function for details.
      */
-    private static boolean sFakePassableLensVersionForTesting;
+    private static boolean sFakePassableLensEnvironmentForTesting;
 
     /*
      * If true, short-circuit the version name intent check to always return a high enough version.
+     * Also hardcode the device OS check to return true.
      * Used by test cases.
      * @param shouldFake Whether to fake the version check.
      */
-    public static void setFakePassableLensVersionForTesting(boolean shouldFake) {
-        sFakePassableLensVersionForTesting = shouldFake;
+    public static void setFakePassableLensEnvironmentForTesting(boolean shouldFake) {
+        sFakePassableLensEnvironmentForTesting = shouldFake;
     }
 
     /**
@@ -51,7 +53,7 @@
      */
     public static String getLensActivityVersionNameIfAvailable(Context context) {
         // Use this syntax to avoid NPE if unset.
-        if (Boolean.TRUE.equals(sFakePassableLensVersionForTesting)) {
+        if (Boolean.TRUE.equals(sFakePassableLensEnvironmentForTesting)) {
             // Returns the minimum version which will meet the bar and allow future AGSA version
             // checks to succeed.
             return MIN_AGSA_VERSION_NAME_FOR_LENS_POSTCAPTURE;
@@ -134,6 +136,20 @@
     }
 
     /**
+     * Checks whether the device is below Android O.  We restrict to these versions
+     * to limit to OS"s where image processing vulnerabilities can be retroactively
+     * fixed if they are discovered in the future.
+     * @return Whether the device is below Android O.
+     */
+    public static boolean isDeviceOsBelowMinimum() {
+        if (sFakePassableLensEnvironmentForTesting) {
+            return false;
+        }
+
+        return Build.VERSION.SDK_INT < Build.VERSION_CODES.O;
+    }
+
+    /**
      * Get a deeplink intent to Google Lens with an optional content provider image URI.
      * @param imageUri The content provider URI generated by chrome (or empty URI)
      *                 if only resolving the activity.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index 1f9452b6..dcb70eba 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -19,6 +19,7 @@
 import android.view.View.OnLongClickListener;
 import android.view.ViewGroup;
 
+import androidx.annotation.IntDef;
 import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 
@@ -26,6 +27,7 @@
 import org.chromium.base.Callback;
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.metrics.CachedMetrics.ActionEvent;
+import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.R;
@@ -55,7 +57,6 @@
 import org.chromium.chrome.browser.findinpage.FindToolbarManager;
 import org.chromium.chrome.browser.findinpage.FindToolbarObserver;
 import org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControlsVisibilityDelegate;
-import org.chromium.chrome.browser.fullscreen.FullscreenManager;
 import org.chromium.chrome.browser.fullscreen.FullscreenOptions;
 import org.chromium.chrome.browser.metrics.OmniboxStartupMetrics;
 import org.chromium.chrome.browser.native_page.NativePage;
@@ -120,9 +121,12 @@
 import org.chromium.content_public.common.ContentUrlConstants;
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.base.PageTransition;
+import org.chromium.ui.util.TokenHolder;
 import org.chromium.ui.widget.Toast;
 import org.chromium.ui.widget.ViewRectProvider;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.List;
 
 /**
@@ -143,6 +147,23 @@
         void updateReloadButtonState(boolean isLoading);
     }
 
+    /** A means of tracking which mechanism is being used to focus the omnibox. */
+    @IntDef({OmniboxFocusReason.OMNIBOX_TAP, OmniboxFocusReason.OMNIBOX_LONG_PRESS,
+            OmniboxFocusReason.FAKE_BOX_TAP, OmniboxFocusReason.FAKE_BOX_LONG_PRESS,
+            OmniboxFocusReason.ACCELERATOR_TAP, OmniboxFocusReason.TAB_SWITCHER_OMNIBOX_TAP})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface OmniboxFocusReason {
+        int OMNIBOX_TAP = 0;
+        int OMNIBOX_LONG_PRESS = 1;
+        int FAKE_BOX_TAP = 2;
+        int FAKE_BOX_LONG_PRESS = 3;
+        int ACCELERATOR_TAP = 4;
+        int TAB_SWITCHER_OMNIBOX_TAP = 5;
+        int NUM_ENTRIES = 6;
+    }
+    private static final EnumeratedHistogramSample ENUMERATED_FOCUS_REASON =
+            new EnumeratedHistogramSample(
+                    "Android.OmniboxFocusReason", OmniboxFocusReason.NUM_ENTRIES);
     private static final ActionEvent ACCELERATOR_BUTTON_TAP_ACTION =
             new ActionEvent("MobileToolbarOmniboxAcceleratorTap");
 
@@ -195,10 +216,10 @@
     private UrlFocusChangeListener mLocationBarFocusObserver;
 
     private BrowserStateBrowserControlsVisibilityDelegate mControlsVisibilityDelegate;
-    private int mFullscreenFocusToken = FullscreenManager.INVALID_TOKEN;
-    private int mFullscreenFindInPageToken = FullscreenManager.INVALID_TOKEN;
-    private int mFullscreenMenuToken = FullscreenManager.INVALID_TOKEN;
-    private int mFullscreenHighlightToken = FullscreenManager.INVALID_TOKEN;
+    private int mFullscreenFocusToken = TokenHolder.INVALID_TOKEN;
+    private int mFullscreenFindInPageToken = TokenHolder.INVALID_TOKEN;
+    private int mFullscreenMenuToken = TokenHolder.INVALID_TOKEN;
+    private int mFullscreenHighlightToken = TokenHolder.INVALID_TOKEN;
 
     private int mPreselectedTabId = Tab.INVALID_TAB_ID;
 
@@ -725,7 +746,7 @@
 
     @Override
     public void onScrimClick() {
-        setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS);
+        setUrlBarFocus(false);
     }
 
     /**
@@ -736,6 +757,17 @@
     }
 
     /**
+     * @param reason A {@link OmniboxFocusReason} that the omnibox was focused.
+     */
+    public static void recordOmniboxFocusReason(@OmniboxFocusReason int reason) {
+        if (OmniboxFocusReason.OMNIBOX_TAP == reason
+                && ReturnToChromeExperimentsUtil.isInOverviewWithOmnibox()) {
+            reason = OmniboxFocusReason.TAB_SWITCHER_OMNIBOX_TAP;
+        }
+        ENUMERATED_FOCUS_REASON.record(reason);
+    }
+
+    /**
      * Enable the bottom toolbar.
      */
     public void enableBottomToolbar() {
@@ -747,8 +779,9 @@
 
         final OnClickListener searchAcceleratorListener = v -> {
             recordBottomToolbarUseForIPH();
+            recordOmniboxFocusReason(OmniboxFocusReason.ACCELERATOR_TAP);
             ACCELERATOR_BUTTON_TAP_ACTION.record();
-            setUrlBarFocus(true, LocationBar.OmniboxFocusReason.ACCELERATOR_TAP);
+            setUrlBarFocus(true);
         };
 
         final OnClickListener shareButtonListener = v -> {
@@ -1341,7 +1374,7 @@
                 if (isVisible) {
                     // Defocus here to avoid handling focus in multiple places, e.g., when the
                     // forward button is pressed. (see crbug.com/414219)
-                    setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS);
+                    setUrlBarFocus(false);
 
                     if (!mActivity.isInOverviewMode() && isShowingAppMenuUpdateBadge()) {
                         // The app menu badge should be removed the first time the menu is opened.
@@ -1642,12 +1675,11 @@
      * If you request focus and the UrlBar was already focused, this will select all of the text.
      *
      * @param focused Whether URL bar should be focused.
-     * @param reason The given reason.
      */
-    public void setUrlBarFocus(boolean focused, @LocationBar.OmniboxFocusReason int reason) {
+    public void setUrlBarFocus(boolean focused) {
         if (!isInitialized()) return;
         boolean wasFocused = mLocationBar.isUrlBarFocused();
-        mLocationBar.setUrlBarFocus(focused, null, reason);
+        mLocationBar.setUrlBarFocus(focused);
         if (wasFocused && focused) {
             mLocationBar.selectAll();
         }
@@ -1657,10 +1689,9 @@
      * See {@link #setUrlBarFocus}, but if native is not loaded it will queue the request instead
      * of dropping it.
      */
-    public void setUrlBarFocusOnceNativeInitialized(
-            boolean focused, @LocationBar.OmniboxFocusReason int reason) {
+    public void setUrlBarFocusOnceNativeInitialized(boolean focused) {
         if (isInitialized()) {
-            setUrlBarFocus(focused, reason);
+            setUrlBarFocus(focused);
             return;
         }
 
@@ -1669,7 +1700,7 @@
             // initialized. This is important for the Launch to Incognito Tab flow (see
             // IncognitoTabLauncher.
             mOnInitializedRunnable = () -> {
-                setUrlBarFocus(focused, reason);
+                setUrlBarFocus(focused);
             };
         } else {
             mOnInitializedRunnable = null;
@@ -1828,7 +1859,7 @@
 
             // Ensure the URL bar loses focus if the tab it was interacting with is changed from
             // underneath it.
-            setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS);
+            setUrlBarFocus(false);
 
             // Place the cursor in the Omnibox if applicable.  We always clear the focus above to
             // ensure the shield placed over the content is dismissed when switching tabs.  But if
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java
index 83e7ca9..eabdc4c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java
@@ -609,9 +609,6 @@
         }
 
         @Override
-        public void gestureDetected(boolean isLongPress) {}
-
-        @Override
         public void setShowTitle(boolean showTitle) {
             if (showTitle) {
                 mState = STATE_DOMAIN_AND_TITLE;
@@ -806,8 +803,7 @@
         }
 
         @Override
-        public void setUrlBarFocus(boolean shouldBeFocused, @Nullable String pastedText,
-                @LocationBar.OmniboxFocusReason int reason) {}
+        public void setUrlBarFocus(boolean shouldBeFocused) {}
 
         @Override
         public void showUrlBarCursorWithoutFocusAnimations() {}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
index 8bc47f0..e1641c6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
@@ -797,9 +797,7 @@
      * @return Whether or not the current Tab did go back.
      */
     boolean back() {
-        if (getLocationBar() != null) {
-            getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
-        }
+        if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false);
         return mToolbarTabController != null && mToolbarTabController.back() != null;
     }
 
@@ -808,9 +806,7 @@
      * @return Whether or not the current Tab did go forward.
      */
     boolean forward() {
-        if (getLocationBar() != null) {
-            getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
-        }
+        if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false);
         return mToolbarTabController != null ? mToolbarTabController.forward() : false;
     }
 
@@ -821,9 +817,7 @@
      * <p>The buttons of the toolbar will be updated as a result of making this call.
      */
     void stopOrReloadCurrentTab() {
-        if (getLocationBar() != null) {
-            getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
-        }
+        if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false);
         if (mToolbarTabController != null) mToolbarTabController.stopOrReloadCurrentTab();
     }
 
@@ -831,9 +825,7 @@
      * Opens hompage in the current tab.
      */
     void openHomepage() {
-        if (getLocationBar() != null) {
-            getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
-        }
+        if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false);
         if (mToolbarTabController != null) mToolbarTabController.openHomepage();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
index 0a3c728..9e07763 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -2199,6 +2199,10 @@
 
                 if (getToolbarDataProvider().shouldShowLocationBarInOverviewMode()) {
                     mLocationBar.updateStatusIcon();
+
+                    if (getToolbarDataProvider().isInOverviewAndShowingOmnibox()) {
+                        mUrlBar.setText("");
+                    }
                 }
             }
         });
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java
index f23a1648..4704cfe 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java
@@ -128,6 +128,24 @@
     @SmallTest
     @UiThreadTest
     @Feature({"Bookmark"})
+    public void testMoveBookmarksToSameFolder() {
+        BookmarkId folder = mBookmarkModel.addFolder(mMobileNode, 0, "fc");
+        BookmarkId bookmarkA = addBookmark(folder, 0, "a", "http://a.com");
+        BookmarkId bookmarkB = addBookmark(folder, 1, "b", "http://b.com");
+
+        HashSet<BookmarkId> movedBookmarks = new HashSet<BookmarkId>(2);
+        movedBookmarks.add(bookmarkA);
+        movedBookmarks.add(bookmarkB);
+        mBookmarkModel.moveBookmarks(new ArrayList<BookmarkId>(movedBookmarks), folder);
+
+        // Order of the moved bookmarks is not tested.
+        verifyBookmarkListNoOrder(mBookmarkModel.getChildIDs(folder, true, true), movedBookmarks);
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    @Feature({"Bookmark"})
     public void testDeleteBookmarks() {
         BookmarkId bookmarkA = addBookmark(mDesktopNode, 0, "a", "http://a.com");
         BookmarkId bookmarkB = addBookmark(mOtherNode, 0, "b", "http://b.com");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
index 97a38f3..9858a6f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
@@ -96,7 +96,7 @@
         TestThreadUtils.runOnUiThreadBlocking(() -> FirstRunStatus.setFirstRunFlowComplete(false));
         deleteTestFiles();
         ContextMenuHelper.setHardcodedImageBytesForTesting(null);
-        LensUtils.setFakePassableLensVersionForTesting(false);
+        LensUtils.setFakePassableLensEnvironmentForTesting(false);
     }
 
     @Override
@@ -105,7 +105,7 @@
         mTestUrl = mTestServer.getURL(TEST_PATH);
         deleteTestFiles();
         ContextMenuHelper.setHardcodedImageBytesForTesting(null);
-        LensUtils.setFakePassableLensVersionForTesting(false);
+        LensUtils.setFakePassableLensEnvironmentForTesting(false);
         mDownloadTestRule.startMainActivityWithURL(mTestUrl);
         mDownloadTestRule.assertWaitForPageScaleFactorMatch(0.5f);
     }
@@ -142,7 +142,7 @@
     public void testSearchWithGoogleLensFiresIntent() throws Throwable {
         Tab tab = mDownloadTestRule.getActivity().getActivityTab();
 
-        LensUtils.setFakePassableLensVersionForTesting(true);
+        LensUtils.setFakePassableLensEnvironmentForTesting(true);
         ShareHelper.setIgnoreActivityNotFoundExceptionForTesting(true);
         hardcodeTestImageForSharing();
 
@@ -415,7 +415,7 @@
     @Feature({"Browser", "ContextMenu"})
     @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS})
     public void testContextMenuRetrievesImageOptionsLensEnabled() throws TimeoutException {
-        LensUtils.setFakePassableLensVersionForTesting(true);
+        LensUtils.setFakePassableLensEnvironmentForTesting(true);
 
         Tab tab = mDownloadTestRule.getActivity().getActivityTab();
         ContextMenu menu = ContextMenuUtils.openContextMenu(tab, "testImage");
@@ -455,7 +455,7 @@
     @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS})
     public void testContextMenuRetrievesImageOptions_NoDefaultSearchEngineLensEnabled()
             throws TimeoutException {
-        LensUtils.setFakePassableLensVersionForTesting(true);
+        LensUtils.setFakePassableLensEnvironmentForTesting(true);
 
         Tab tab = mDownloadTestRule.getActivity().getActivityTab();
         ContextMenu menu = ContextMenuUtils.openContextMenu(tab, "testImage");
@@ -495,7 +495,7 @@
     @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS})
     public void testContextMenuRetrievesImageLinkOptionsSearchLensEnabled()
             throws TimeoutException {
-        LensUtils.setFakePassableLensVersionForTesting(true);
+        LensUtils.setFakePassableLensEnvironmentForTesting(true);
 
         Tab tab = mDownloadTestRule.getActivity().getActivityTab();
         ContextMenu menu = ContextMenuUtils.openContextMenu(tab, "testImageLink");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
index cd9c137..8b8f064 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
@@ -20,7 +20,6 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.ContextUtils;
-import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
@@ -251,48 +250,4 @@
         onView(withId(R.id.location_bar_status))
                 .check((view, e) -> Assert.assertEquals(iconView.getVisibility(), GONE));
     }
-
-    @Test
-    @SmallTest
-    public void testSetUrlBarFocus() {
-        final LocationBarLayout locationBar = getLocationBar();
-
-        Assert.assertEquals(
-                0, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason"));
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            locationBar.setUrlBarFocus(
-                    true, SEARCH_TERMS_URL, LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS);
-        });
-        Assert.assertTrue(locationBar.isUrlBarFocused());
-        Assert.assertTrue(locationBar.didFocusUrlFromFakebox());
-        Assert.assertEquals(SEARCH_TERMS_URL, getUrlText(getUrlBar()));
-        Assert.assertEquals(
-                1, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason"));
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            locationBar.setUrlBarFocus(
-                    true, SEARCH_TERMS, LocationBar.OmniboxFocusReason.SEARCH_QUERY);
-        });
-        Assert.assertTrue(locationBar.isUrlBarFocused());
-        Assert.assertTrue(locationBar.didFocusUrlFromFakebox());
-        Assert.assertEquals(SEARCH_TERMS, getUrlText(getUrlBar()));
-        Assert.assertEquals(
-                1, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason"));
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            locationBar.setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS);
-        });
-        Assert.assertFalse(locationBar.isUrlBarFocused());
-        Assert.assertFalse(locationBar.didFocusUrlFromFakebox());
-        Assert.assertEquals(
-                1, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason"));
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            locationBar.setUrlBarFocus(true, null, LocationBar.OmniboxFocusReason.OMNIBOX_TAP);
-        });
-        Assert.assertTrue(locationBar.isUrlBarFocused());
-        Assert.assertFalse(locationBar.didFocusUrlFromFakebox());
-        Assert.assertEquals(
-                2, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason"));
-    }
 }
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 5a90205..3b09b17 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-78.0.3902.0_rc-r1-merged.afdo.bz2
\ No newline at end of file
+gs://chromeos-localmirror/distfiles/afdo/bespoke/chromeos-chrome-amd64-78.0.3902.0_rc-r1-merged-no_indirect_functions.afdo.bz2
diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn
index f179c6a..6039c304 100644
--- a/chrome/app/BUILD.gn
+++ b/chrome/app/BUILD.gn
@@ -49,7 +49,10 @@
 
   if (is_win) {
     sources += [ "chrome_dll.rc" ]
-    deps += [ "//printing/buildflags" ]
+    deps += [
+      "//build:branding_buildflags",
+      "//printing/buildflags",
+    ]
   }
 }
 
diff --git a/chrome/app/chrome_dll.rc b/chrome/app/chrome_dll.rc
index 724208ce..7e63b68 100644
--- a/chrome/app/chrome_dll.rc
+++ b/chrome/app/chrome_dll.rc
@@ -1,5 +1,6 @@
 // Microsoft Visual C++ generated resource script.
 //
+#include "build/branding_buildflags.h"
 #include "chrome_dll_resource.h"
 #include "chrome_command_ids.h"
 #include "printing/buildflags/buildflags.h"
@@ -162,7 +163,7 @@
 // the icon from the current module). We can perhaps work around this in the
 // future to get the icon from the .exe, which would save a copy.
 
-#if defined(GOOGLE_CHROME_BUILD)
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
 IDR_MAINFRAME       ICON                        "theme\google_chrome\win\chrome.ico"
 IDR_SXS             ICON                        "theme\google_chrome\win\chrome_sxs.ico"
 IDR_X004_DEV        ICON                        "theme\google_chrome\win\chrome_dev.ico"
diff --git a/chrome/app/chrome_exe.rc b/chrome/app/chrome_exe.rc
index 4c6be18..5eb0c3b 100644
--- a/chrome/app/chrome_exe.rc
+++ b/chrome/app/chrome_exe.rc
@@ -1,5 +1,6 @@
 // Microsoft Visual C++ generated resource script.
 //
+#include "build/branding_buildflags.h"
 #include "chrome_exe_resource.h"
 
 #define APSTUDIO_READONLY_SYMBOLS
@@ -35,7 +36,7 @@
 // Note: chrome/installer/util/shell_util.cc depends on the order and number of
 // icons.  To avoid breaking existing shortcuts, add new icons at the end
 // (following the ordering described above).
-#if defined(GOOGLE_CHROME_BUILD)
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
 IDR_MAINFRAME           ICON       "theme\\google_chrome\\win\\chrome.ico"
 // These three are no longer used, but remain as placeholders. (They cannot be
 // removed, or existing shortcuts to the later resources will break.)
@@ -54,7 +55,7 @@
 // should be incremented when a new icon is added. The icon indices in
 // chrome_icon_resources_win.h should also be updated.
 
-#if defined(GOOGLE_CHROME_BUILD)
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
 IDR_X001_APP_LIST       ICON       "theme\\google_chrome\\win\\app_list.ico"
 IDR_X002_APP_LIST_SXS   ICON       "theme\\google_chrome\\win\\app_list_sxs.ico"
 IDR_X003_INCOGNITO      ICON       "theme\\google_chrome\\win\\incognito.ico"
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 8a6fbe3..c9d91b3 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4529,10 +4529,16 @@
     {"scalable-app-list", flag_descriptions::kScalableAppListName,
      flag_descriptions::kScalableAppListDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(app_list_features::kScalableAppList)},
+
     {"fuzzy-app-search", flag_descriptions::kFuzzyAppSearchName,
      flag_descriptions::kFuzzyAppSearchDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(app_list_features::kEnableFuzzyAppSearch)},
 
+    {"aggregated-ml-search-ranking",
+     flag_descriptions::kAggregatedMlSearchRankingName,
+     flag_descriptions::kAggregatedMlSearchRankingDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(app_list_features::kEnableAggregatedMlSearchRanking)},
+
 #endif  // defined(OS_CHROMEOS)
 
     {"passwords-account-storage",
diff --git a/chrome/browser/after_startup_task_utils.cc b/chrome/browser/after_startup_task_utils.cc
index 6f9e038..de85c99 100644
--- a/chrome/browser/after_startup_task_utils.cc
+++ b/chrome/browser/after_startup_task_utils.cc
@@ -21,6 +21,7 @@
 #include "build/build_config.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/page_visibility_state.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
@@ -180,6 +181,14 @@
       OnStartupComplete();
   }
 
+  // Starting the browser with a file download url will not result in
+  // DidFinishLoad firing, so watch for this case too. crbug.com/1006954
+  void DidFinishNavigation(
+      content::NavigationHandle* navigation_handle) override {
+    if (navigation_handle->IsInMainFrame() && navigation_handle->IsDownload())
+      OnStartupComplete();
+  }
+
   void WebContentsDestroyed() override { OnStartupComplete(); }
 
   SEQUENCE_CHECKER(sequence_checker_);
diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc
index d44fafc..fc41628 100644
--- a/chrome/browser/android/bookmarks/bookmark_bridge.cc
+++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
@@ -746,7 +746,10 @@
   bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj);
   type = JavaBookmarkIdGetType(env, j_parent_id_obj);
   const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type);
-  bookmark_model_->Move(node, new_parent_node, size_t{index});
+  // Bookmark should not be moved to its own parent folder
+  if (node->parent() != new_parent_node) {
+    bookmark_model_->Move(node, new_parent_node, size_t{index});
+  }
 }
 
 ScopedJavaLocalRef<jobject> BookmarkBridge::AddBookmark(
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
index 1108eba..802df38 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -40,6 +40,7 @@
 #include "net/http/http_status_code.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/cpp/simple_url_loader.h"
+#include "third_party/blink/public/mojom/frame/frame.mojom.h"
 #include "url/gurl.h"
 
 using content::RenderFrameHost;
@@ -103,9 +104,10 @@
     base::WeakPtr<ContextualSearchContext> contextual_search_context,
     content::WebContents* web_contents) {
   DCHECK(web_contents);
-  RenderFrameHost::TextSurroundingSelectionCallback callback = base::BindOnce(
-      &ContextualSearchDelegate::OnTextSurroundingSelectionAvailable,
-      AsWeakPtr());
+  blink::mojom::Frame::GetTextSurroundingSelectionCallback callback =
+      base::BindOnce(
+          &ContextualSearchDelegate::OnTextSurroundingSelectionAvailable,
+          AsWeakPtr());
   context_ = contextual_search_context;
   if (context_ == nullptr)
     return;
diff --git a/chrome/browser/android/provider/chrome_browser_provider.cc b/chrome/browser/android/provider/chrome_browser_provider.cc
index 756e197..2e475ae9 100644
--- a/chrome/browser/android/provider/chrome_browser_provider.cc
+++ b/chrome/browser/android/provider/chrome_browser_provider.cc
@@ -39,7 +39,6 @@
 #include "components/bookmarks/managed/managed_bookmark_service.h"
 #include "components/favicon/core/favicon_service.h"
 #include "components/history/core/browser/android/android_history_types.h"
-#include "components/history/core/browser/history_service.h"
 #include "components/history/core/browser/top_sites.h"
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_service.h"
@@ -793,9 +792,7 @@
 }
 
 ChromeBrowserProvider::ChromeBrowserProvider(JNIEnv* env, jobject obj)
-    : weak_java_provider_(env, obj),
-      history_service_observer_(this),
-      handling_extensive_changes_(false) {
+    : weak_java_provider_(env, obj), handling_extensive_changes_(false) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   profile_ = g_browser_process->profile_manager()->GetLastUsedProfile();
   bookmark_model_ = BookmarkModelFactory::GetForBrowserContext(profile_);
diff --git a/chrome/browser/android/provider/chrome_browser_provider.h b/chrome/browser/android/provider/chrome_browser_provider.h
index d1bed91..87c3153 100644
--- a/chrome/browser/android/provider/chrome_browser_provider.h
+++ b/chrome/browser/android/provider/chrome_browser_provider.h
@@ -15,6 +15,7 @@
 #include "base/task/cancelable_task_tracker.h"
 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
 #include "components/history/core/browser/android/android_history_types.h"
+#include "components/history/core/browser/history_service.h"
 #include "components/history/core/browser/history_service_observer.h"
 
 class AndroidHistoryProviderService;
@@ -229,7 +230,7 @@
   base::CancelableTaskTracker cancelable_task_tracker_;
 
   ScopedObserver<history::HistoryService, history::HistoryServiceObserver>
-      history_service_observer_;
+      history_service_observer_{this};
 
   bool handling_extensive_changes_;
 
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device.cc b/chrome/browser/android/vr/arcore_device/arcore_device.cc
index 2f7afc3..8b713a6 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_device.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_device.cc
@@ -122,11 +122,16 @@
   DVLOG(1) << __func__;
   DCHECK(IsOnMainThread());
 
-  if (session_state_->pending_request_session_callback_) {
+  if (HasExclusiveSession()) {
     DVLOG(1) << __func__ << ": Rejecting additional session request";
     std::move(callback).Run(nullptr, mojo::NullRemote());
     return;
   }
+
+  // Set HasExclusiveSession status to true. This lasts until OnSessionEnded.
+  OnStartPresenting();
+
+  DCHECK(!session_state_->pending_request_session_callback_);
   session_state_->pending_request_session_callback_ = std::move(callback);
 
   bool use_dom_overlay = base::Contains(
@@ -200,6 +205,9 @@
 void ArCoreDevice::OnSessionEnded() {
   DVLOG(1) << __func__;
 
+  if (!HasExclusiveSession())
+    return;
+
   // This may be a no-op in case session end was initiated from the Java side.
   arcore_session_utils_->EndSession();
 
@@ -225,6 +233,9 @@
   // Create a new mailbox bridge for use in the next session. (This is cheap,
   // the constructor doesn't establish a GL context.)
   mailbox_bridge_ = std::make_unique<vr::MailboxToSurfaceBridge>();
+
+  // This sets HasExclusiveSession status to false.
+  OnExitPresent();
 }
 
 void ArCoreDevice::CallDeferredRequestSessionCallback(bool success) {
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index dfd9b23..3f75235 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -625,8 +625,12 @@
     "arc/session/arc_session_manager.h",
     "arc/tracing/arc_app_performance_tracing.cc",
     "arc/tracing/arc_app_performance_tracing.h",
+    "arc/tracing/arc_app_performance_tracing_custom_session.cc",
+    "arc/tracing/arc_app_performance_tracing_custom_session.h",
     "arc/tracing/arc_app_performance_tracing_session.cc",
     "arc/tracing/arc_app_performance_tracing_session.h",
+    "arc/tracing/arc_app_performance_tracing_uma_session.cc",
+    "arc/tracing/arc_app_performance_tracing_uma_session.h",
     "arc/tracing/arc_cpu_event.cc",
     "arc/tracing/arc_cpu_event.h",
     "arc/tracing/arc_graphics_jank_detector.cc",
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc
index aa300a9..014b14f 100644
--- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc
@@ -7,7 +7,9 @@
 #include "base/memory/singleton.h"
 #include "base/no_destructor.h"
 #include "base/strings/string_util.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h"
 #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h"
 #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
 #include "components/arc/arc_features.h"
@@ -99,6 +101,13 @@
   return ArcAppPerformanceTracingFactory::GetForBrowserContext(context);
 }
 
+ArcAppPerformanceTracing*
+ArcAppPerformanceTracing::GetForBrowserContextForTesting(
+    content::BrowserContext* context) {
+  return ArcAppPerformanceTracingFactory::GetForBrowserContextForTesting(
+      context);
+}
+
 // static
 void ArcAppPerformanceTracing::SetFocusAppForTesting(
     const std::string& package_name,
@@ -108,6 +117,11 @@
       ArcAppListPrefs::GetAppId(package_name, activity), category);
 }
 
+void ArcAppPerformanceTracing::SetCustomSessionReadyCallbackForTesting(
+    CustomSessionReadyCallback callback) {
+  custom_session_ready_callback_ = std::move(callback);
+}
+
 void ArcAppPerformanceTracing::Shutdown() {
   MaybeStopTracing();
 
@@ -119,6 +133,26 @@
     exo::WMHelper::GetInstance()->RemoveActivationObserver(this);
 }
 
+bool ArcAppPerformanceTracing::StartCustomTracing() {
+  if (!arc_active_window_)
+    return false;
+
+  session_ = std::make_unique<ArcAppPerformanceTracingCustomSession>(this);
+  session_->Schedule();
+  if (custom_session_ready_callback_)
+    custom_session_ready_callback_.Run();
+
+  return true;
+}
+
+void ArcAppPerformanceTracing::StopCustomTracing(
+    ResultCallback result_callback) {
+  if (!session_ || !session_->AsCustomSession())
+    std::move(result_callback).Run(false /* success */, 0, 0, 0);
+
+  session_->AsCustomSession()->StopAndAnalyze(std::move(result_callback));
+}
+
 void ArcAppPerformanceTracing::OnWindowActivated(ActivationReason reason,
                                                  aura::Window* gained_active,
                                                  aura::Window* lost_active) {
@@ -170,11 +204,6 @@
   reported_categories_.insert(category);
 }
 
-void ArcAppPerformanceTracing::SetTracingPeriodForTesting(
-    const base::TimeDelta& period) {
-  tracing_period_ = period;
-}
-
 void ArcAppPerformanceTracing::MaybeStartTracing() {
   if (session_) {
     // We are already tracing, ignore.
@@ -205,8 +234,8 @@
   }
 
   // Start tracing for |arc_active_window_|.
-  session_ = std::make_unique<ArcAppPerformanceTracingSession>(
-      this, arc_active_window_, category, tracing_period_);
+  session_ =
+      std::make_unique<ArcAppPerformanceTracingUmaSession>(this, category);
   session_->Schedule();
 }
 
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h
index f801c52..687768ea 100644
--- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h
@@ -12,6 +12,7 @@
 #include <set>
 #include <string>
 
+#include "base/callback.h"
 #include "base/macros.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
 #include "components/keyed_service/core/keyed_service.h"
@@ -38,6 +39,12 @@
                                  public aura::WindowObserver,
                                  public ArcAppListPrefs::Observer {
  public:
+  using ResultCallback = base::OnceCallback<void(bool success,
+                                                 double fps,
+                                                 double commit_deviation,
+                                                 double render_quality)>;
+  using CustomSessionReadyCallback = base::RepeatingCallback<void()>;
+
   ArcAppPerformanceTracing(content::BrowserContext* context,
                            ArcBridgeService* bridge);
   ~ArcAppPerformanceTracing() override;
@@ -46,14 +53,23 @@
   // or nullptr if the browser |context| is not allowed to use ARC++.
   static ArcAppPerformanceTracing* GetForBrowserContext(
       content::BrowserContext* context);
+  static ArcAppPerformanceTracing* GetForBrowserContextForTesting(
+      content::BrowserContext* context);
 
   static void SetFocusAppForTesting(const std::string& package_name,
                                     const std::string& activity,
                                     const std::string& category);
+  void SetCustomSessionReadyCallbackForTesting(
+      CustomSessionReadyCallback callback);
 
   // KeyedService:
   void Shutdown() override;
 
+  // Starts custom tracing. Returns true if tracing was successfully started.
+  bool StartCustomTracing();
+  // Stops custom tracing and returns tracing results.
+  void StopCustomTracing(ResultCallback result_callback);
+
   // wm::ActivationChangeObserver:
   void OnWindowActivated(ActivationReason reason,
                          aura::Window* gained_active,
@@ -75,12 +91,13 @@
   // Marks that |category| is reported in the current user's session.
   void SetReported(const std::string& category);
 
-  // Sets different tracing |period| for testing.
-  void SetTracingPeriodForTesting(const base::TimeDelta& period);
-
   // Returns active tracing session or nullptr.
   ArcAppPerformanceTracingSession* session() { return session_.get(); }
 
+  // Returns currently active ARC window or null. It may or may not be currently
+  // profiled.
+  aura::Window* active_window() { return arc_active_window_; }
+
  private:
   // May be start tracing session if all conditions are met. Window creating is
   // controlled by Wayland protocol implementation and task creation is reported
@@ -119,9 +136,8 @@
   // Keeps current active tracing session associated with |arc_active_window_|.
   std::unique_ptr<ArcAppPerformanceTracingSession> session_;
 
-  // Defines the period to capture tracing results. Can be overwritten for
-  // testing.
-  base::TimeDelta tracing_period_ = base::TimeDelta::FromSeconds(15);
+  // Callback to call when custom session is ready for testing.
+  CustomSessionReadyCallback custom_session_ready_callback_;
 
   DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracing);
 };
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.cc
new file mode 100644
index 0000000..21c3d77
--- /dev/null
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.cc
@@ -0,0 +1,57 @@
+// Copyright 2019 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 "arc_app_performance_tracing_custom_session.h"
+
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h"
+
+namespace arc {
+
+ArcAppPerformanceTracingCustomSession::ArcAppPerformanceTracingCustomSession(
+    ArcAppPerformanceTracing* owner)
+    : ArcAppPerformanceTracingSession(owner) {}
+
+ArcAppPerformanceTracingCustomSession::
+    ~ArcAppPerformanceTracingCustomSession() = default;
+
+void ArcAppPerformanceTracingCustomSession::Schedule() {
+  ScheduleInternal(false /* detect_idles */,
+                   base::TimeDelta() /* start_delay */,
+                   base::TimeDelta() /* tracing_period */);
+}
+
+ArcAppPerformanceTracingCustomSession*
+ArcAppPerformanceTracingCustomSession::AsCustomSession() {
+  return this;
+}
+
+void ArcAppPerformanceTracingCustomSession::StopAndAnalyze(
+    ResultCallback callback) {
+  DCHECK(!callback_);
+  DCHECK(callback);
+
+  callback_ = std::move(callback);
+  if (tracing_active())
+    StopAndAnalyzeInternal();
+  else
+    OnTracingFailed();
+
+  DCHECK(!callback_);
+}
+
+void ArcAppPerformanceTracingCustomSession::OnTracingDone(
+    double fps,
+    double commit_deviation,
+    double render_quality) {
+  DCHECK(callback_);
+  std::move(callback_).Run(true /* success */, fps, commit_deviation,
+                           render_quality);
+}
+
+void ArcAppPerformanceTracingCustomSession::OnTracingFailed() {
+  DCHECK(callback_);
+  std::move(callback_).Run(false /* success */, 0, 0, 0);
+}
+
+}  // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h
new file mode 100644
index 0000000..90f1952
--- /dev/null
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h
@@ -0,0 +1,51 @@
+// Copyright 2019 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 CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_CUSTOM_SESSION_H_
+#define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_CUSTOM_SESSION_H_
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
+
+namespace arc {
+
+class ArcAppPerformanceTracing;
+
+// Handles the tracing initiated from a test. It started and stopped explicitly.
+// There is no automatic idle detection.
+class ArcAppPerformanceTracingCustomSession
+    : public ArcAppPerformanceTracingSession {
+ public:
+  using ResultCallback = base::OnceCallback<void(bool success,
+                                                 double fps,
+                                                 double commit_deviation,
+                                                 double render_quality)>;
+
+  explicit ArcAppPerformanceTracingCustomSession(
+      ArcAppPerformanceTracing* owner);
+  ~ArcAppPerformanceTracingCustomSession() override;
+
+  // ArcAppPerformanceTracingSession:
+  void Schedule() override;
+  ArcAppPerformanceTracingCustomSession* AsCustomSession() override;
+
+  void StopAndAnalyze(ResultCallback callback);
+
+ protected:
+  // ArcAppPerformanceTracingSession:
+  void OnTracingDone(double fps,
+                     double commit_deviation,
+                     double render_quality) override;
+  void OnTracingFailed() override;
+
+ private:
+  ResultCallback callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingCustomSession);
+};
+
+}  // namespace arc
+
+#endif  // CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_CUSTOM_SESSION_H_
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc
index 193c0a1..64aef3f 100644
--- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc
@@ -5,8 +5,6 @@
 #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
 
 #include "base/bind.h"
-#include "base/metrics/histogram_functions.h"
-#include "base/strings/stringprintf.h"
 #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h"
 #include "components/exo/shell_surface_util.h"
 #include "components/exo/surface.h"
@@ -17,15 +15,6 @@
 
 namespace {
 
-// Defines the delay to start tracing after ARC++ window gets activated.
-// This is done to avoid likely redundant statistics collection during the app
-// initialization/loading time.
-constexpr base::TimeDelta kInitTracingDelay = base::TimeDelta::FromMinutes(1);
-
-// Defines the delay to start next session of capturing statistics for the same
-// active app or in case the app was already reported.
-constexpr base::TimeDelta kNextTracingDelay = base::TimeDelta::FromMinutes(20);
-
 // Target FPS, all reference devices has 60 FPS.
 // TODO(khmel), detect this per device.
 constexpr uint64_t kTargetFps = 60;
@@ -37,64 +26,47 @@
 // any commit for |kIdleThresholdFrames| frames.
 constexpr uint64_t kIdleThresholdFrames = 10;
 
-std::string GetHistogramName(const std::string& category,
-                             const std::string& name) {
-  return base::StringPrintf("Arc.Runtime.Performance.%s.%s", name.c_str(),
-                            category.c_str());
-}
-
-void ReportFPS(const std::string& category_name, double fps) {
-  DCHECK(!category_name.empty());
-  DCHECK_GT(fps, 0);
-  base::UmaHistogramCounts100(GetHistogramName(category_name, "FPS"),
-                              static_cast<int>(std::round(fps)));
-}
-
-void ReportCommitError(const std::string& category_name, double error_mcs) {
-  DCHECK(!category_name.empty());
-  DCHECK_GE(error_mcs, 0);
-  base::UmaHistogramCustomCounts(
-      GetHistogramName(category_name, "CommitDeviation"),
-      static_cast<int>(std::round(error_mcs)), 100 /* min */, 5000 /* max */,
-      50 /* buckets */);
-}
-
-void ReportQuality(const std::string& category_name, double quality) {
-  DCHECK(!category_name.empty());
-  DCHECK_GT(quality, 0);
-  // Report quality from 0 to 100%.
-  const int sample = (int)(quality * 100.0);
-  base::UmaHistogramPercentage(GetHistogramName(category_name, "RenderQuality"),
-                               sample);
-}
-
 }  // namespace
 
 ArcAppPerformanceTracingSession::ArcAppPerformanceTracingSession(
-    ArcAppPerformanceTracing* owner,
-    aura::Window* window,
-    const std::string& category,
-    const base::TimeDelta& tracing_period)
-    : owner_(owner),
-      window_(window),
-      category_(category),
-      tracing_period_(tracing_period) {}
+    ArcAppPerformanceTracing* owner)
+    : owner_(owner), window_(owner->active_window()) {
+  DCHECK(owner_);
+  DCHECK(window_);
+}
 
 ArcAppPerformanceTracingSession::~ArcAppPerformanceTracingSession() {
   // Discard any active tracing if any.
   Stop();
 }
 
-void ArcAppPerformanceTracingSession::Schedule() {
+ArcAppPerformanceTracingCustomSession*
+ArcAppPerformanceTracingSession::AsCustomSession() {
+  return nullptr;
+}
+
+void ArcAppPerformanceTracingSession::ScheduleInternal(
+    bool detect_idles,
+    const base::TimeDelta& start_delay,
+    const base::TimeDelta& tracing_period) {
   DCHECK(!tracing_active_);
   DCHECK(!tracing_timer_.IsRunning());
-  const base::TimeDelta delay =
-      owner_->WasReported(category_) ? kNextTracingDelay : kInitTracingDelay;
-  tracing_timer_.Start(FROM_HERE, delay,
+  detect_idles_ = detect_idles;
+  tracing_period_ = tracing_period;
+  if (start_delay.is_zero()) {
+    Start();
+    return;
+  }
+  tracing_timer_.Start(FROM_HERE, start_delay,
                        base::BindOnce(&ArcAppPerformanceTracingSession::Start,
                                       base::Unretained(this)));
 }
 
+void ArcAppPerformanceTracingSession::StopAndAnalyzeInternal() {
+  DCHECK(tracing_active_);
+  Analyze(base::TimeTicks::Now() - tracing_start_);
+}
+
 void ArcAppPerformanceTracingSession::OnSurfaceDestroying(
     exo::Surface* surface) {
   Stop();
@@ -116,7 +88,7 @@
 void ArcAppPerformanceTracingSession::Start() {
   DCHECK(!tracing_timer_.IsRunning());
 
-  VLOG(1) << "Start tracing for the category " << category_ << ".";
+  VLOG(1) << "Start tracing.";
 
   frame_deltas_.clear();
   last_commit_timestamp_ = base::Time();
@@ -126,9 +98,15 @@
   surface->AddSurfaceObserver(this);
 
   // Schedule result analyzing at the end of tracing.
-  tracing_timer_.Start(FROM_HERE, tracing_period_,
-                       base::BindOnce(&ArcAppPerformanceTracingSession::Analyze,
-                                      base::Unretained(this)));
+  tracing_start_ = base::TimeTicks::Now();
+  if (!tracing_period_.is_zero()) {
+    // |tracing_period_| is passed to be able to correctly compare expectations
+    // in unit tests.
+    tracing_timer_.Start(
+        FROM_HERE, tracing_period_,
+        base::BindOnce(&ArcAppPerformanceTracingSession::Analyze,
+                       base::Unretained(this), tracing_period_));
+  }
   tracing_active_ = true;
 }
 
@@ -153,33 +131,41 @@
   const base::TimeDelta frame_delta = timestamp - last_commit_timestamp_;
   last_commit_timestamp_ = timestamp;
 
-  const uint64_t display_frames_passed =
-      (frame_delta + kTargetFrameTime / 2) / kTargetFrameTime;
-  if (display_frames_passed >= kIdleThresholdFrames) {
-    // Idle is detected, try the next time.
-    Stop();
-    Schedule();
-    return;
+  if (detect_idles_) {
+    const uint64_t display_frames_passed =
+        (frame_delta + kTargetFrameTime / 2) / kTargetFrameTime;
+    if (display_frames_passed >= kIdleThresholdFrames) {
+      // Idle is detected, try the next time.
+      Stop();
+      OnTracingFailed();
+      return;
+    }
   }
+
   frame_deltas_.emplace_back(frame_delta);
 }
 
-void ArcAppPerformanceTracingSession::Analyze() {
+void ArcAppPerformanceTracingSession::Analyze(base::TimeDelta tracing_period) {
   // No more data is needed, stop active tracing.
   Stop();
 
-  // Check last commit timestamp if we are in idle at this moment.
-  const base::TimeDelta last_frame_delta =
-      base::Time::Now() - last_commit_timestamp_;
-  if (last_frame_delta >= kTargetFrameTime * kIdleThresholdFrames) {
-    // Current idle state is detected, try next time.
-    Schedule();
+  if (frame_deltas_.empty() || tracing_period <= base::TimeDelta()) {
+    OnTracingFailed();
     return;
   }
 
-  VLOG(1) << "Analyze tracing for the category " << category_ << ".";
+  // Check last commit timestamp if we are in idle at this moment.
+  if (detect_idles_) {
+    const base::TimeDelta last_frame_delta =
+        base::Time::Now() - last_commit_timestamp_;
+    if (last_frame_delta >= kTargetFrameTime * kIdleThresholdFrames) {
+      // Current idle state is detected, try next time.
+      OnTracingFailed();
+      return;
+    }
+  }
 
-  DCHECK(!frame_deltas_.empty());
+  VLOG(1) << "Analyze tracing.";
 
   double vsync_error_deviation_accumulator = 0;
   for (const auto& frame_delta : frame_deltas_) {
@@ -197,29 +183,20 @@
     vsync_error_deviation_accumulator +=
         (vsync_error.InMicrosecondsF() * vsync_error.InMicrosecondsF());
   }
-  const double vsync_error =
+  const double commit_deviation =
       sqrt(vsync_error_deviation_accumulator / frame_deltas_.size());
 
   std::sort(frame_deltas_.begin(), frame_deltas_.end());
   // Get 10% and 90% indices.
   const size_t lower_position = frame_deltas_.size() / 10;
   const size_t upper_position = frame_deltas_.size() - 1 - lower_position;
-  const double quality = frame_deltas_[lower_position].InMicrosecondsF() /
-                         frame_deltas_[upper_position].InMicrosecondsF();
+  const double render_quality =
+      frame_deltas_[lower_position].InMicrosecondsF() /
+      frame_deltas_[upper_position].InMicrosecondsF();
 
-  const double fps = frame_deltas_.size() / tracing_period_.InSecondsF();
-  VLOG(1) << "Analyzing is done for " << category_ << " "
-          << " FPS: " << fps << ", quality: " << quality
-          << ", vsync_error: " << vsync_error;
+  const double fps = frame_deltas_.size() / tracing_period.InSecondsF();
 
-  ReportFPS(category_, fps);
-  ReportCommitError(category_, vsync_error);
-  ReportQuality(category_, quality);
-
-  owner_->SetReported(category_);
-
-  // Reschedule the next tracing session.
-  Schedule();
+  OnTracingDone(fps, commit_deviation, render_quality);
 }
 
 }  // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h
index 735d1da..14cabb5 100644
--- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_SESSION_H_
 #define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_SESSION_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -24,32 +25,51 @@
 namespace arc {
 
 class ArcAppPerformanceTracing;
+class ArcAppPerformanceTracingCustomSession;
 
 // Implements Surface commit tracing for the target window.
 class ArcAppPerformanceTracingSession : public exo::SurfaceObserver {
  public:
-  ArcAppPerformanceTracingSession(ArcAppPerformanceTracing* owner,
-                                  aura::Window* window,
-                                  const std::string& category,
-                                  const base::TimeDelta& tracing_period);
+  explicit ArcAppPerformanceTracingSession(ArcAppPerformanceTracing* owner);
   ~ArcAppPerformanceTracingSession() override;
 
-  // Schedules tracing with a delay based on condition if tracing category was
-  // previously reported or not. Creator of |ArcAppPerformanceTracingSession| is
-  // responsible for the initial scheduling. This can internally re-scheduled
-  // during the life-cycle of the tracing session.
-  void Schedule();
+  // Performs initial scheduling of tracing based on session type.
+  virtual void Schedule() = 0;
+
+  // Casts this session to |ArcAppPerformanceTracingCustomSession|.
+  virtual ArcAppPerformanceTracingCustomSession* AsCustomSession();
 
   // exo::SurfaceObserver:
   void OnSurfaceDestroying(exo::Surface* surface) override;
   void OnCommit(exo::Surface* surface) override;
 
+  // Fires tracing timeout for testing.
   void FireTimerForTesting();
+  // Add one more sample for testing.
   void OnCommitForTesting(const base::Time& timestamp);
 
   bool tracing_active() const { return tracing_active_; }
+  ArcAppPerformanceTracing* owner() { return owner_; }
+  const ArcAppPerformanceTracing* owner() const { return owner_; }
   const aura::Window* window() const { return window_; }
 
+ protected:
+  // Called when tracing is done.
+  virtual void OnTracingDone(double fps,
+                             double commit_deviation,
+                             double render_quality) = 0;
+  virtual void OnTracingFailed() = 0;
+
+  // Schedules tracing with a delay and for specific amount of time. If
+  // |tracing_period| is 0 then it means manual tracing and |StopAndAnalyze|
+  // should be called in order to get results.
+  void ScheduleInternal(bool detect_idles,
+                        const base::TimeDelta& start_delay,
+                        const base::TimeDelta& tracing_period);
+
+  // Stops current tracing and analyzes results.
+  void StopAndAnalyzeInternal();
+
  private:
   // Starts tracing by observing commits to the |exo::Surface| attached to the
   // current |window_|.
@@ -63,21 +83,25 @@
   void HandleCommit(const base::Time& timestamp);
 
   // Stops current tracing, analyzes captured tracing results and schedules the
-  // next tracing for the current |window_|.
-  void Analyze();
+  // next tracing for the current |window_|. |tracing_period| indicates the time
+  // spent for tracing.
+  void Analyze(base::TimeDelta tracing_period);
 
-  // Unowned pointer.
+  // Unowned pointers.
   ArcAppPerformanceTracing* const owner_;
   aura::Window* const window_;
 
-  // Current tracing category.
-  const std::string category_;
-
   // Timer to start Surface commit tracing delayed.
   base::OneShotTimer tracing_timer_;
 
-  // Period for tracing sessions.
-  const base::TimeDelta tracing_period_;
+  // Start time of tracing.
+  base::TimeTicks tracing_start_;
+
+  // Requested tracing period.
+  base::TimeDelta tracing_period_;
+
+  // Set to true in case automatic idle detection is required.
+  bool detect_idles_ = false;
 
   // Timestamp of last commit event.
   base::Time last_commit_timestamp_;
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc
new file mode 100644
index 0000000..804676b
--- /dev/null
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc
@@ -0,0 +1,116 @@
+// Copyright 2019 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 "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h"
+
+#include "chrome/browser/chromeos/arc/arc_util.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/exo/shell_surface_util.h"
+#include "components/exo/surface.h"
+#include "components/exo/wm_helper.h"
+#include "components/exo/wm_helper_chromeos.h"
+#include "ui/views/widget/widget.h"
+
+namespace arc {
+
+ArcAppPerformanceTracingTestHelper::ArcAppPerformanceTracingTestHelper() =
+    default;
+ArcAppPerformanceTracingTestHelper::~ArcAppPerformanceTracingTestHelper() =
+    default;
+
+void ArcAppPerformanceTracingTestHelper::SetUp(Profile* profile) {
+  DCHECK(!profile_ && profile);
+  DCHECK(IsArcAllowedForProfile(profile));
+  profile_ = profile;
+  wm_helper_ = std::make_unique<exo::WMHelperChromeOS>();
+  exo::WMHelper::SetInstance(wm_helper_.get());
+  // Make sure it is accessible in test.
+  if (!GetTracing()) {
+    ArcAppPerformanceTracing::GetForBrowserContextForTesting(profile_);
+    DCHECK(GetTracing());
+  }
+}
+
+void ArcAppPerformanceTracingTestHelper::TearDown() {
+  DCHECK(profile_);
+  exo::WMHelper::SetInstance(nullptr);
+  wm_helper_.reset();
+  profile_ = nullptr;
+}
+
+// static
+views::Widget* ArcAppPerformanceTracingTestHelper::CreateArcWindow(
+    const std::string& window_app_id) {
+  views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
+  params.bounds = gfx::Rect(5, 5, 20, 20);
+  params.context = nullptr;
+  views::Widget* widget = new views::Widget();
+  widget->Init(std::move(params));
+  // Set ARC id before showing the window to be recognized in
+  // ArcAppWindowLauncherController.
+  exo::SetShellApplicationId(widget->GetNativeWindow(), window_app_id);
+  exo::SetShellMainSurface(widget->GetNativeWindow(), new exo::Surface());
+  widget->Show();
+  widget->Activate();
+  return widget;
+}
+
+ArcAppPerformanceTracing* ArcAppPerformanceTracingTestHelper::GetTracing() {
+  DCHECK(profile_);
+  return ArcAppPerformanceTracing::GetForBrowserContext(profile_);
+}
+
+ArcAppPerformanceTracingSession*
+ArcAppPerformanceTracingTestHelper::GetTracingSession() {
+  return GetTracing()->session();
+}
+
+void ArcAppPerformanceTracingTestHelper::FireTimerForTesting() {
+  DCHECK(GetTracingSession());
+  DCHECK(GetTracingSession()->tracing_active());
+  GetTracingSession()->FireTimerForTesting();
+}
+
+void ArcAppPerformanceTracingTestHelper::PlaySequence(
+    const std::vector<base::TimeDelta>& deltas) {
+  DCHECK(GetTracingSession());
+  DCHECK(GetTracingSession()->tracing_active());
+  base::Time timestamp = base::Time::Now();
+  GetTracingSession()->OnCommitForTesting(timestamp);
+  for (const base::TimeDelta& delta : deltas) {
+    timestamp += delta;
+    GetTracingSession()->OnCommitForTesting(timestamp);
+  }
+}
+
+void ArcAppPerformanceTracingTestHelper::PlayDefaultSequence() {
+  const base::TimeDelta normal_interval = base::TimeDelta::FromSeconds(1) / 60;
+  const base::TimeDelta error1 = base::TimeDelta::FromMicroseconds(100);
+  const base::TimeDelta error2 = base::TimeDelta::FromMicroseconds(200);
+  const base::TimeDelta error3 = base::TimeDelta::FromMicroseconds(300);
+  const std::vector<base::TimeDelta> sequence = {
+      normal_interval + error1,
+      normal_interval + error2,
+      // One frame skip
+      normal_interval * 2 + error3,
+      normal_interval - error1,
+      normal_interval - error2,
+      // Two frames skip
+      normal_interval * 3 - error3,
+      normal_interval + error1,
+      normal_interval + error2,
+      normal_interval * 2 + error3,
+      normal_interval - error1,
+      normal_interval * 2 - error2,
+      normal_interval - error3,
+      normal_interval + error1,
+      normal_interval + error2,
+      normal_interval + error3,
+  };
+  PlaySequence(sequence);
+}
+
+}  // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h
new file mode 100644
index 0000000..4959c15b2
--- /dev/null
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h
@@ -0,0 +1,70 @@
+// Copyright 2019 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 CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_TEST_HELPER_H_
+#define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_TEST_HELPER_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/time/time.h"
+
+class Profile;
+
+namespace exo {
+class WMHelper;
+}
+
+namespace views {
+class Widget;
+}  // namespace views.
+
+namespace arc {
+
+class ArcAppPerformanceTracing;
+class ArcAppPerformanceTracingSession;
+
+// Helper class to share common functionality in browser and unit tests.
+class ArcAppPerformanceTracingTestHelper {
+ public:
+  ArcAppPerformanceTracingTestHelper();
+  virtual ~ArcAppPerformanceTracingTestHelper();
+
+  // Creates app window as ARC++ window.
+  static views::Widget* CreateArcWindow(const std::string& window_app_id);
+
+  void SetUp(Profile* profile);
+  void TearDown();
+
+  // Helper that returns ArcAppPerformanceTracing as service.
+  ArcAppPerformanceTracing* GetTracing();
+
+  // Helper that returns active ArcAppPerformanceTracingSession.
+  ArcAppPerformanceTracingSession* GetTracingSession();
+
+  // Fires timer to finish statistics tracing or stop waiting for delayed start.
+  void FireTimerForTesting();
+
+  // Sends sequence of commits where each commit is delayed for specific delta
+  // from |deltas|.
+  void PlaySequence(const std::vector<base::TimeDelta>& deltas);
+
+  // Plays default sequence that has FPS = 45, CommitDeviation = 216 and
+  // RenderQuality = 48% for target tracing period as 1/3 seconds.
+  void PlayDefaultSequence();
+
+ private:
+  // Unowned pointer.
+  Profile* profile_ = nullptr;
+
+  std::unique_ptr<exo::WMHelper> wm_helper_;
+
+  DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingTestHelper);
+};
+
+}  // namespace arc
+
+#endif  // CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_TEST_HELPER_H_
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.cc
new file mode 100644
index 0000000..5200964
--- /dev/null
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.cc
@@ -0,0 +1,105 @@
+// Copyright 2019 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 "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h"
+
+#include "base/metrics/histogram_functions.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h"
+
+namespace arc {
+
+namespace {
+
+// Defines the delay to start tracing after ARC++ window gets activated.
+// This is done to avoid likely redundant statistics collection during the app
+// initialization/loading time.
+constexpr base::TimeDelta kInitTracingDelay = base::TimeDelta::FromMinutes(1);
+
+// Defines the delay to start next session of capturing statistics for the same
+// active app or in case the app was already reported.
+constexpr base::TimeDelta kNextTracingDelay = base::TimeDelta::FromMinutes(20);
+
+// Defines the period to capture tracing results. Can be overwritten for
+// testing.
+base::TimeDelta tracing_period = base::TimeDelta::FromSeconds(15);
+
+std::string GetHistogramName(const std::string& category,
+                             const std::string& name) {
+  return base::StringPrintf("Arc.Runtime.Performance.%s.%s", name.c_str(),
+                            category.c_str());
+}
+
+void ReportFPS(const std::string& category_name, double fps) {
+  DCHECK(!category_name.empty());
+  DCHECK_GT(fps, 0);
+  base::UmaHistogramCounts100(GetHistogramName(category_name, "FPS"),
+                              static_cast<int>(std::round(fps)));
+}
+
+void ReportCommitDeviation(const std::string& category_name, double error_mcs) {
+  DCHECK(!category_name.empty());
+  DCHECK_GE(error_mcs, 0);
+  base::UmaHistogramCustomCounts(
+      GetHistogramName(category_name, "CommitDeviation"),
+      static_cast<int>(std::round(error_mcs)), 100 /* min */, 5000 /* max */,
+      50 /* buckets */);
+}
+
+void ReportQuality(const std::string& category_name, double quality) {
+  DCHECK(!category_name.empty());
+  DCHECK_GT(quality, 0);
+  // Report quality from 0 to 100%.
+  const int sample = (int)(quality * 100.0);
+  base::UmaHistogramPercentage(GetHistogramName(category_name, "RenderQuality"),
+                               sample);
+}
+
+}  // namespace
+
+ArcAppPerformanceTracingUmaSession::ArcAppPerformanceTracingUmaSession(
+    ArcAppPerformanceTracing* owner,
+    const std::string& category)
+    : ArcAppPerformanceTracingSession(owner), category_(category) {}
+
+ArcAppPerformanceTracingUmaSession::~ArcAppPerformanceTracingUmaSession() =
+    default;
+
+// static
+void ArcAppPerformanceTracingUmaSession::SetTracingPeriodForTesting(
+    const base::TimeDelta& period) {
+  tracing_period = period;
+}
+
+void ArcAppPerformanceTracingUmaSession::Schedule() {
+  ScheduleInternal(true /* detect_idles */, GetStartDelay(), tracing_period);
+}
+
+void ArcAppPerformanceTracingUmaSession::OnTracingDone(double fps,
+                                                       double commit_deviation,
+                                                       double render_quality) {
+  VLOG(1) << "Analyzing is done for " << category_ << " "
+          << " FPS: " << fps << ", quality: " << render_quality
+          << ", commit_deviation: " << commit_deviation;
+
+  ReportFPS(category_, fps);
+  ReportCommitDeviation(category_, commit_deviation);
+  ReportQuality(category_, render_quality);
+
+  // Report category is processed.
+  owner()->SetReported(category_);
+  Schedule();
+}
+
+void ArcAppPerformanceTracingUmaSession::OnTracingFailed() {
+  // It valid case, just reschedule.
+  Schedule();
+}
+
+base::TimeDelta ArcAppPerformanceTracingUmaSession::GetStartDelay() const {
+  return owner()->WasReported(category_) ? kNextTracingDelay
+                                         : kInitTracingDelay;
+}
+
+}  // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h
new file mode 100644
index 0000000..d3e1f293
--- /dev/null
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h
@@ -0,0 +1,52 @@
+// Copyright 2019 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 CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_UMA_SESSION_H_
+#define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_UMA_SESSION_H_
+
+#include <string>
+
+#include "base/macros.h"
+#include "base/time/time.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
+
+namespace arc {
+
+class ArcAppPerformanceTracing;
+
+// Handles tracing of an app of known category. Tracing is done periodically
+// during the all time of app is active. Tracing results are published in UMA.
+class ArcAppPerformanceTracingUmaSession
+    : public ArcAppPerformanceTracingSession {
+ public:
+  ArcAppPerformanceTracingUmaSession(ArcAppPerformanceTracing* owner,
+                                     const std::string& category);
+  ~ArcAppPerformanceTracingUmaSession() override;
+
+  static void SetTracingPeriodForTesting(const base::TimeDelta& period);
+
+  // ArcAppPerformanceTracingSession:
+  void Schedule() override;
+
+ protected:
+  // ArcAppPerformanceTracingSession:
+  void OnTracingDone(double fps,
+                     double commit_deviation,
+                     double render_quality) override;
+  void OnTracingFailed() override;
+
+ private:
+  // Determines the tracing start delay. If we already reported this category,
+  // start delay will be increased.
+  base::TimeDelta GetStartDelay() const;
+
+  // Tracing category.
+  const std::string category_;
+
+  DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingUmaSession);
+};
+
+}  // namespace arc
+
+#endif  // CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_UMA_SESSION_H_
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc
index 9926dc826..d89316f 100644
--- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc
+++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc
@@ -3,22 +3,18 @@
 // found in the LICENSE file.
 
 #include <memory>
-#include <vector>
 
 #include "base/metrics/histogram_samples.h"
 #include "base/metrics/statistics_recorder.h"
 #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h"
 #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_test.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_profile.h"
-#include "components/exo/shell_surface_util.h"
-#include "components/exo/surface.h"
-#include "components/exo/wm_helper.h"
-#include "components/exo/wm_helper_chromeos.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/views/widget/widget.h"
-#include "ui/wm/public/activation_change_observer.h"
 
 namespace arc {
 
@@ -29,26 +25,11 @@
 constexpr char kFocusCategory[] = "OnlineGame";
 constexpr char kNonFocusAppPackage[] = "nonfocus.app.package";
 constexpr char kNonFocusAppActivity[] = "nonfocus.app.package.Activity";
+
 // For 20 frames.
 constexpr base::TimeDelta kTestPeriod =
     base::TimeDelta::FromSeconds(1) / (60 / 20);
 
-// Creates app window as ARC++ window.
-views::Widget* CreateArcWindow(const std::string& window_app_id) {
-  views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
-  params.bounds = gfx::Rect(5, 5, 20, 20);
-  params.context = nullptr;
-  views::Widget* widget = new views::Widget();
-  widget->Init(std::move(params));
-  // Set ARC id before showing the window to be recognized in
-  // ArcAppWindowLauncherController.
-  exo::SetShellApplicationId(widget->GetNativeWindow(), window_app_id);
-  exo::SetShellMainSurface(widget->GetNativeWindow(), new exo::Surface());
-  widget->Show();
-  widget->Activate();
-  return widget;
-}
-
 // Creates name of histogram with required statistics.
 std::string GetFocusStatisticName(const std::string& name) {
   return base::StringPrintf("Arc.Runtime.Performance.%s.%s", name.c_str(),
@@ -80,180 +61,147 @@
   // testing::Test:
   void SetUp() override {
     BrowserWithTestWindowTest::SetUp();
-    wm_helper_ = std::make_unique<exo::WMHelperChromeOS>();
-    exo::WMHelper::SetInstance(wm_helper_.get());
 
     arc_test_.SetUp(profile());
+    tracing_helper_.SetUp(profile());
 
     ArcAppPerformanceTracing::SetFocusAppForTesting(
         kFocusAppPackage, kFocusAppActivity, kFocusCategory);
 
-    performance_tracing_ = std::make_unique<ArcAppPerformanceTracing>(
-        profile(), nullptr /* bridge, unused */);
-
-    performance_tracing_->SetTracingPeriodForTesting(kTestPeriod);
+    ArcAppPerformanceTracingUmaSession::SetTracingPeriodForTesting(kTestPeriod);
   }
 
   void TearDown() override {
-    performance_tracing_->Shutdown();
-    performance_tracing_.reset();
+    tracing_helper_.TearDown();
     arc_test_.TearDown();
-    exo::WMHelper::SetInstance(nullptr);
-    wm_helper_.reset();
     BrowserWithTestWindowTest::TearDown();
   }
 
  protected:
   // Ensures that tracing is active.
-  void StartArcFocusAppTracing() {
-    views::Widget* const arc_widget = CreateArcWindow("org.chromium.arc.1");
+  views::Widget* StartArcFocusAppTracing() {
+    views::Widget* const arc_widget =
+        ArcAppPerformanceTracingTestHelper::CreateArcWindow(
+            "org.chromium.arc.1");
     DCHECK(arc_widget && arc_widget->GetNativeWindow());
-    performance_tracing().OnWindowActivated(
+    tracing_helper().GetTracing()->OnWindowActivated(
         wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT,
         arc_widget->GetNativeWindow(), arc_widget->GetNativeWindow());
-    performance_tracing().OnTaskCreated(1 /* task_Id */, kFocusAppPackage,
-                                        kFocusAppActivity,
-                                        std::string() /* intent */);
-    DCHECK(performance_tracing().session());
-    DCHECK(!performance_tracing().session()->tracing_active());
-    performance_tracing().session()->FireTimerForTesting();
-    DCHECK(performance_tracing().session());
-    DCHECK(performance_tracing().session()->tracing_active());
+    tracing_helper().GetTracing()->OnTaskCreated(
+        1 /* task_Id */, kFocusAppPackage, kFocusAppActivity,
+        std::string() /* intent */);
+    DCHECK(tracing_helper().GetTracingSession());
+    tracing_helper().GetTracingSession()->FireTimerForTesting();
+    DCHECK(tracing_helper().GetTracingSession());
+    DCHECK(tracing_helper().GetTracingSession()->tracing_active());
+    return arc_widget;
   }
 
-  // Sends sequence of commits where each commit is delayed for specific delta
-  // from |deltas|.
-  void PlaySequence(const std::vector<base::TimeDelta>& deltas) {
-    DCHECK(performance_tracing().session());
-    DCHECK(performance_tracing().session()->tracing_active());
-    base::Time timestamp = base::Time::Now();
-    performance_tracing().session()->OnCommitForTesting(timestamp);
-    for (const base::TimeDelta& delta : deltas) {
-      timestamp += delta;
-      performance_tracing().session()->OnCommitForTesting(timestamp);
-    }
-    // Fire timer at the end to finish statistics tracing.
-    performance_tracing().session()->FireTimerForTesting();
-  }
-
-  ArcAppPerformanceTracing& performance_tracing() {
-    return *performance_tracing_;
+  ArcAppPerformanceTracingTestHelper& tracing_helper() {
+    return tracing_helper_;
   }
 
  private:
+  ArcAppPerformanceTracingTestHelper tracing_helper_;
   ArcAppTest arc_test_;
-  std::unique_ptr<exo::WMHelper> wm_helper_;
-  std::unique_ptr<ArcAppPerformanceTracing> performance_tracing_;
 
   DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingTest);
 };
 
 TEST_F(ArcAppPerformanceTracingTest, TracingScheduled) {
   // By default it is inactive.
-  EXPECT_FALSE(performance_tracing().session());
+  EXPECT_FALSE(tracing_helper().GetTracingSession());
 
   // Report task first.
-  performance_tracing().OnTaskCreated(1 /* task_Id */, kFocusAppPackage,
-                                      kFocusAppActivity,
-                                      std::string() /* intent */);
-  EXPECT_FALSE(performance_tracing().session());
+  tracing_helper().GetTracing()->OnTaskCreated(
+      1 /* task_Id */, kFocusAppPackage, kFocusAppActivity,
+      std::string() /* intent */);
+  EXPECT_FALSE(tracing_helper().GetTracingSession());
 
   // Create window second.
-  views::Widget* const arc_widget1 = CreateArcWindow("org.chromium.arc.1");
+  views::Widget* const arc_widget1 =
+      ArcAppPerformanceTracingTestHelper::CreateArcWindow("org.chromium.arc.1");
   ASSERT_TRUE(arc_widget1);
   ASSERT_TRUE(arc_widget1->GetNativeWindow());
-  performance_tracing().OnWindowActivated(
+  tracing_helper().GetTracing()->OnWindowActivated(
       wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT,
       arc_widget1->GetNativeWindow(), nullptr /* lost_active */);
-  ASSERT_TRUE(performance_tracing().session());
-  EXPECT_FALSE(performance_tracing().session()->tracing_active());
+  ASSERT_TRUE(tracing_helper().GetTracingSession());
+  // Scheduled but not started.
+  EXPECT_FALSE(tracing_helper().GetTracingSession()->tracing_active());
 
   // Test reverse order, create window first.
-  views::Widget* const arc_widget2 = CreateArcWindow("org.chromium.arc.2");
+  views::Widget* const arc_widget2 =
+      ArcAppPerformanceTracingTestHelper::CreateArcWindow("org.chromium.arc.2");
   ASSERT_TRUE(arc_widget2);
   ASSERT_TRUE(arc_widget2->GetNativeWindow());
-  performance_tracing().OnWindowActivated(
+  tracing_helper().GetTracing()->OnWindowActivated(
       wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT,
       arc_widget2->GetNativeWindow(), arc_widget2->GetNativeWindow());
   // Task is not yet created, this also resets previous tracing.
-  EXPECT_FALSE(performance_tracing().session());
+  EXPECT_FALSE(tracing_helper().GetTracingSession());
   // Report task second.
-  performance_tracing().OnTaskCreated(2 /* task_Id */, kFocusAppPackage,
-                                      kFocusAppActivity,
-                                      std::string() /* intent */);
-  ASSERT_TRUE(performance_tracing().session());
-  EXPECT_FALSE(performance_tracing().session()->tracing_active());
+  tracing_helper().GetTracing()->OnTaskCreated(
+      2 /* task_Id */, kFocusAppPackage, kFocusAppActivity,
+      std::string() /* intent */);
+  ASSERT_TRUE(tracing_helper().GetTracingSession());
+  // Scheduled but not started.
+  EXPECT_FALSE(tracing_helper().GetTracingSession()->tracing_active());
+  arc_widget1->Close();
+  arc_widget2->Close();
 }
 
 TEST_F(ArcAppPerformanceTracingTest, TracingNotScheduledForNonFocusApp) {
-  views::Widget* const arc_widget = CreateArcWindow("org.chromium.arc.1");
+  views::Widget* const arc_widget =
+      ArcAppPerformanceTracingTestHelper::CreateArcWindow("org.chromium.arc.1");
   ASSERT_TRUE(arc_widget);
   ASSERT_TRUE(arc_widget->GetNativeWindow());
-  performance_tracing().OnWindowActivated(
+  tracing_helper().GetTracing()->OnWindowActivated(
       wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT,
       arc_widget->GetNativeWindow(), arc_widget->GetNativeWindow());
-  EXPECT_FALSE(performance_tracing().session());
-  performance_tracing().OnTaskCreated(1 /* task_Id */, kNonFocusAppPackage,
-                                      kNonFocusAppActivity,
-                                      std::string() /* intent */);
-  EXPECT_FALSE(performance_tracing().session());
+  EXPECT_FALSE(tracing_helper().GetTracingSession());
+  tracing_helper().GetTracing()->OnTaskCreated(
+      1 /* task_Id */, kNonFocusAppPackage, kNonFocusAppActivity,
+      std::string() /* intent */);
+  EXPECT_FALSE(tracing_helper().GetTracingSession());
+  arc_widget->Close();
 }
 
 TEST_F(ArcAppPerformanceTracingTest, TracingStoppedOnIdle) {
-  StartArcFocusAppTracing();
+  views::Widget* const arc_widget = StartArcFocusAppTracing();
   const base::TimeDelta normal_interval = base::TimeDelta::FromSeconds(1) / 60;
   base::Time timestamp = base::Time::Now();
-  performance_tracing().session()->OnCommitForTesting(timestamp);
+  tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp);
   // Expected updates;
   timestamp += normal_interval;
-  performance_tracing().session()->OnCommitForTesting(timestamp);
-  ASSERT_TRUE(performance_tracing().session());
-  EXPECT_TRUE(performance_tracing().session()->tracing_active());
+  tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp);
+  ASSERT_TRUE(tracing_helper().GetTracingSession());
+  EXPECT_TRUE(tracing_helper().GetTracingSession()->tracing_active());
 
   timestamp += normal_interval * 5;
-  performance_tracing().session()->OnCommitForTesting(timestamp);
-  ASSERT_TRUE(performance_tracing().session());
-  EXPECT_TRUE(performance_tracing().session()->tracing_active());
+  tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp);
+  ASSERT_TRUE(tracing_helper().GetTracingSession());
+  EXPECT_TRUE(tracing_helper().GetTracingSession()->tracing_active());
 
   // Too long update.
   timestamp += normal_interval * 10;
-  performance_tracing().session()->OnCommitForTesting(timestamp);
+  tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp);
   // Tracing is rescheduled and no longer active.
-  ASSERT_TRUE(performance_tracing().session());
-  EXPECT_FALSE(performance_tracing().session()->tracing_active());
+  ASSERT_TRUE(tracing_helper().GetTracingSession());
+  EXPECT_FALSE(tracing_helper().GetTracingSession()->tracing_active());
+  arc_widget->Close();
 }
 
 TEST_F(ArcAppPerformanceTracingTest, StatisticsReported) {
-  StartArcFocusAppTracing();
-  const base::TimeDelta normal_interval = base::TimeDelta::FromSeconds(1) / 60;
-  const base::TimeDelta error1 = base::TimeDelta::FromMicroseconds(100);
-  const base::TimeDelta error2 = base::TimeDelta::FromMicroseconds(200);
-  const base::TimeDelta error3 = base::TimeDelta::FromMicroseconds(300);
-  const std::vector<base::TimeDelta> sequence = {
-      normal_interval + error1,
-      normal_interval + error2,
-      // One frame skip
-      normal_interval * 2 + error3,
-      normal_interval - error1,
-      normal_interval - error2,
-      // Two frames skip
-      normal_interval * 3 - error3,
-      normal_interval + error1,
-      normal_interval + error2,
-      normal_interval * 2 + error3,
-      normal_interval - error1,
-      normal_interval * 2 - error2,
-      normal_interval - error3,
-      normal_interval + error1,
-      normal_interval + error2,
-      normal_interval + error3,
-  };
-  EXPECT_FALSE(performance_tracing().WasReported(kFocusCategory));
-  PlaySequence(sequence);
-  EXPECT_TRUE(performance_tracing().WasReported(kFocusCategory));
+  views::Widget* const arc_widget = StartArcFocusAppTracing();
+  EXPECT_FALSE(tracing_helper().GetTracing()->WasReported(kFocusCategory));
+  tracing_helper().PlayDefaultSequence();
+  tracing_helper().FireTimerForTesting();
+  EXPECT_TRUE(tracing_helper().GetTracing()->WasReported(kFocusCategory));
   EXPECT_EQ(45L, ReadFocusStatistics("FPS"));
   EXPECT_EQ(216L, ReadFocusStatistics("CommitDeviation"));
   EXPECT_EQ(48L, ReadFocusStatistics("RenderQuality"));
+  arc_widget->Close();
 }
 
 }  // namespace arc
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
index fe06e06..79eac27e 100644
--- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
+++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -43,6 +43,8 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/arc/arc_util.h"
 #include "chrome/browser/chromeos/arc/session/arc_session_manager.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
 #include "chrome/browser/chromeos/assistant/assistant_util.h"
 #include "chrome/browser/chromeos/crostini/crostini_export_import.h"
 #include "chrome/browser/chromeos/crostini/crostini_installer.h"
@@ -2488,6 +2490,67 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// AutotestPrivateArcAppTracingStartFunction
+///////////////////////////////////////////////////////////////////////////////
+
+AutotestPrivateArcAppTracingStartFunction::
+    AutotestPrivateArcAppTracingStartFunction() = default;
+AutotestPrivateArcAppTracingStartFunction::
+    ~AutotestPrivateArcAppTracingStartFunction() = default;
+
+ExtensionFunction::ResponseAction
+AutotestPrivateArcAppTracingStartFunction::Run() {
+  DVLOG(1) << "AutotestPrivateArcAppTracingStartFunction";
+
+  arc::ArcAppPerformanceTracing* const tracing =
+      arc::ArcAppPerformanceTracing::GetForBrowserContext(browser_context());
+  if (!tracing)
+    return RespondNow(Error("No ARC performance tracing is available."));
+
+  if (!tracing->StartCustomTracing())
+    return RespondNow(Error("Failed to start custom tracing."));
+
+  return RespondNow(NoArguments());
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// AutotestPrivateArcAppTracingStopAndAnalyzeFunction
+///////////////////////////////////////////////////////////////////////////////
+
+AutotestPrivateArcAppTracingStopAndAnalyzeFunction::
+    AutotestPrivateArcAppTracingStopAndAnalyzeFunction() = default;
+AutotestPrivateArcAppTracingStopAndAnalyzeFunction::
+    ~AutotestPrivateArcAppTracingStopAndAnalyzeFunction() = default;
+
+ExtensionFunction::ResponseAction
+AutotestPrivateArcAppTracingStopAndAnalyzeFunction::Run() {
+  DVLOG(1) << "AutotestPrivateArcAppTracingStopAndAnalyzeFunction";
+
+  arc::ArcAppPerformanceTracing* const tracing =
+      arc::ArcAppPerformanceTracing::GetForBrowserContext(browser_context());
+  if (!tracing)
+    return RespondNow(Error("No ARC performance tracing is available."));
+
+  tracing->StopCustomTracing(base::BindOnce(
+      &AutotestPrivateArcAppTracingStopAndAnalyzeFunction::OnTracingResult,
+      this));
+  return did_respond() ? AlreadyResponded() : RespondLater();
+}
+
+void AutotestPrivateArcAppTracingStopAndAnalyzeFunction::OnTracingResult(
+    bool success,
+    double fps,
+    double commit_deviation,
+    double render_quality) {
+  auto result = std::make_unique<base::Value>(base::Value::Type::DICTIONARY);
+  result->SetBoolKey("success", success);
+  result->SetDoubleKey("fps", fps);
+  result->SetDoubleKey("commitDeviation", commit_deviation);
+  result->SetDoubleKey("renderQuality", render_quality);
+  Respond(OneArgument(std::move(result)));
+}
+
+///////////////////////////////////////////////////////////////////////////////
 // AutotestPrivateSetArcAppWindowStateFunction
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h
index a4fbdbf..bb402d8d 100644
--- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h
+++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h
@@ -829,6 +829,38 @@
   ResponseAction Run() override;
 };
 
+// Starts ARC app performance tracing for the current ARC app window.
+class AutotestPrivateArcAppTracingStartFunction : public ExtensionFunction {
+ public:
+  AutotestPrivateArcAppTracingStartFunction();
+  DECLARE_EXTENSION_FUNCTION("autotestPrivate.arcAppTracingStart",
+                             AUTOTESTPRIVATE_ARCAPPTRACINGSTART)
+
+ private:
+  ~AutotestPrivateArcAppTracingStartFunction() override;
+  ResponseAction Run() override;
+};
+
+// Stops active ARC app performance tracing if it was active and analyzes
+// results. Result is returned to the previously registered callback for
+// traceActiveArcAppStart.
+class AutotestPrivateArcAppTracingStopAndAnalyzeFunction
+    : public ExtensionFunction {
+ public:
+  AutotestPrivateArcAppTracingStopAndAnalyzeFunction();
+  DECLARE_EXTENSION_FUNCTION("autotestPrivate.arcAppTracingStopAndAnalyze",
+                             AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE)
+
+ private:
+  ~AutotestPrivateArcAppTracingStopAndAnalyzeFunction() override;
+  ResponseAction Run() override;
+
+  void OnTracingResult(bool success,
+                       double fps,
+                       double commit_deviation,
+                       double render_quality);
+};
+
 class AutotestPrivateSwapWindowsInSplitViewFunction : public ExtensionFunction {
  public:
   AutotestPrivateSwapWindowsInSplitViewFunction();
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
index 3ac9eb4..741e3e8 100644
--- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
+++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
@@ -2,11 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/callback_forward.h"
 #include "base/macros.h"
-
 #include "build/build_config.h"
 #include "chrome/browser/chromeos/arc/arc_util.h"
 #include "chrome/browser/chromeos/arc/session/arc_session_manager.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h"
+#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h"
 #include "chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h"
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
@@ -25,6 +28,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "content/public/test/test_utils.h"
+#include "ui/views/widget/widget.h"
 
 using testing::_;
 using testing::Return;
@@ -47,26 +51,25 @@
     arc::ArcSessionManager::SetUiEnabledForTesting(false);
   }
 
+  void SetUpOnMainThread() override {
+    ExtensionApiTest::SetUpOnMainThread();
+    // Turn on testing mode so we don't kill the browser.
+    AutotestPrivateAPI::GetFactoryInstance()
+        ->Get(browser()->profile())
+        ->set_test_mode(true);
+  }
+
  private:
   DISALLOW_COPY_AND_ASSIGN(AutotestPrivateApiTest);
 };
 
 IN_PROC_BROWSER_TEST_F(AutotestPrivateApiTest, AutotestPrivate) {
-  // Turn on testing mode so we don't kill the browser.
-  AutotestPrivateAPI::GetFactoryInstance()
-      ->Get(browser()->profile())
-      ->set_test_mode(true);
   ASSERT_TRUE(RunComponentExtensionTestWithArg("autotest_private", "default"))
       << message_;
 }
 
 // Set of tests where ARC is enabled and test apps and packages are registered.
 IN_PROC_BROWSER_TEST_F(AutotestPrivateApiTest, AutotestPrivateArcEnabled) {
-  // Turn on testing mode so we don't kill the browser.
-  AutotestPrivateAPI::GetFactoryInstance()
-      ->Get(browser()->profile())
-      ->set_test_mode(true);
-
   ArcAppListPrefs* const prefs = ArcAppListPrefs::Get(browser()->profile());
   ASSERT_TRUE(prefs);
 
@@ -104,7 +107,7 @@
   arc::SetArcPlayStoreEnabledForProfile(profile(), false);
 }
 
-class AutotestPrivateWithPolicyApiTest : public extensions::ExtensionApiTest {
+class AutotestPrivateWithPolicyApiTest : public AutotestPrivateApiTest {
  public:
   AutotestPrivateWithPolicyApiTest() {}
 
@@ -112,11 +115,11 @@
     EXPECT_CALL(provider_, IsInitializationComplete(_))
         .WillRepeatedly(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
-    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
+    AutotestPrivateApiTest::SetUpInProcessBrowserTestFixture();
   }
 
   void SetUpOnMainThread() override {
-    ExtensionApiTest::SetUpOnMainThread();
+    AutotestPrivateApiTest::SetUpOnMainThread();
     // Set a fake policy
     policy::PolicyMap policy;
     policy.Set(policy::key::kAllowDinosaurEasterEgg,
@@ -129,17 +132,66 @@
 
  protected:
   policy::MockConfigurationPolicyProvider provider_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(AutotestPrivateWithPolicyApiTest);
 };
 
 // GetAllEnterprisePolicies Sanity check.
 IN_PROC_BROWSER_TEST_F(AutotestPrivateWithPolicyApiTest, PolicyAPITest) {
-  // Turn on testing mode so we don't kill the browser.
-  AutotestPrivateAPI::GetFactoryInstance()
-      ->Get(browser()->profile())
-      ->set_test_mode(true);
   ASSERT_TRUE(RunComponentExtensionTestWithArg("autotest_private",
                                                "enterprisePolicies"))
       << message_;
 }
 
+class AutotestPrivateArcPerformanceTracing : public AutotestPrivateApiTest {
+ public:
+  AutotestPrivateArcPerformanceTracing() = default;
+  ~AutotestPrivateArcPerformanceTracing() override = default;
+
+ protected:
+  // AutotestPrivateApiTest:
+  void SetUpOnMainThread() override {
+    AutotestPrivateApiTest::SetUpOnMainThread();
+    tracing_helper_.SetUp(profile());
+    performance_tracing()->SetCustomSessionReadyCallbackForTesting(
+        base::BindRepeating(
+            &arc::ArcAppPerformanceTracingTestHelper::PlayDefaultSequence,
+            base::Unretained(&tracing_helper())));
+  }
+
+  void TearDownOnMainThread() override {
+    performance_tracing()->SetCustomSessionReadyCallbackForTesting(
+        arc::ArcAppPerformanceTracing::CustomSessionReadyCallback());
+    tracing_helper_.TearDown();
+    AutotestPrivateApiTest::TearDownOnMainThread();
+  }
+
+  arc::ArcAppPerformanceTracingTestHelper& tracing_helper() {
+    return tracing_helper_;
+  }
+
+  arc::ArcAppPerformanceTracing* performance_tracing() {
+    return tracing_helper_.GetTracing();
+  }
+
+ private:
+  arc::ArcAppPerformanceTracingTestHelper tracing_helper_;
+
+  DISALLOW_COPY_AND_ASSIGN(AutotestPrivateArcPerformanceTracing);
+};
+
+IN_PROC_BROWSER_TEST_F(AutotestPrivateArcPerformanceTracing, Basic) {
+  views::Widget* const arc_widget =
+      arc::ArcAppPerformanceTracingTestHelper::CreateArcWindow(
+          "org.chromium.arc.1");
+  performance_tracing()->OnWindowActivated(
+      wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT,
+      arc_widget->GetNativeWindow(), arc_widget->GetNativeWindow());
+
+  ASSERT_TRUE(RunComponentExtensionTestWithArg("autotest_private",
+                                               "arcPerformanceTracing"))
+      << message_;
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
index 814a169..243ed5a 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
@@ -69,7 +69,8 @@
   DISALLOW_COPY_AND_ASSIGN(LoginApitest);
 };
 
-IN_PROC_BROWSER_TEST_F(LoginApitest, LaunchManagedGuestSession) {
+// Flaky. https://crbug.com/1014239
+IN_PROC_BROWSER_TEST_F(LoginApitest, DISABLED_LaunchManagedGuestSession) {
   SetUpDeviceLocalAccountPolicy();
   SetUpExtensionAndRunTest(kLaunchManagedGuestSession);
   EXPECT_TRUE(session_manager::SessionManager::Get()->IsSessionStarted());
diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc
index 3aab402..2724017 100644
--- a/chrome/browser/chromeos/login/reset_browsertest.cc
+++ b/chrome/browser/chromeos/login/reset_browsertest.cc
@@ -98,8 +98,8 @@
  private:
   bool signal_emitted_ = false;
 
-  ScopedObserver<SessionManagerClient, LoginPromptVisibleObserver> observer_{
-      this};
+  ScopedObserver<SessionManagerClient, SessionManagerClient::Observer>
+      observer_{this};
 
   DISALLOW_COPY_AND_ASSIGN(LoginPromptVisibleObserver);
 };
diff --git a/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc
index 70a5461..ce9d95b 100644
--- a/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc
@@ -159,7 +159,9 @@
 
 // Test that if there is no Bluetooth device connected on HID screen, the
 // Bluetooth adapter should be disabled after advancing to the next screen.
-IN_PROC_BROWSER_TEST_F(HIDDetectionScreenTest, NoBluetoothDeviceConnected) {
+// Flaky. https://crbug.com/1010866
+IN_PROC_BROWSER_TEST_F(HIDDetectionScreenTest,
+                       DISABLED_NoBluetoothDeviceConnected) {
   OobeScreenWaiter(HIDDetectionView::kScreenId).Wait();
   EXPECT_TRUE(adapter()->IsPowered());
 
diff --git a/chrome/browser/extensions/lazy_background_page_apitest.cc b/chrome/browser/extensions/lazy_background_page_apitest.cc
index 1e15444..9807ed3b 100644
--- a/chrome/browser/extensions/lazy_background_page_apitest.cc
+++ b/chrome/browser/extensions/lazy_background_page_apitest.cc
@@ -301,9 +301,10 @@
   EXPECT_FALSE(IsBackgroundPageAlive(last_loaded_extension_id()));
 }
 
+// Flaky. https://crbug.com/1006634
 // Tests that the lazy background page stays alive until all network requests
 // are complete.
-IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, WaitForRequest) {
+IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, DISABLED_WaitForRequest) {
   ASSERT_TRUE(StartEmbeddedTestServer());
 
   LazyBackgroundObserver page_complete;
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc
index 8e9b385..376c3839 100644
--- a/chrome/browser/extensions/service_worker_apitest.cc
+++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -1519,8 +1519,9 @@
   EXPECT_TRUE(sync_listener.WaitUntilSatisfied());
 }
 
-IN_PROC_BROWSER_TEST_F(ServiceWorkerTest,
-                       FetchFromContentScriptShouldNotGoToServiceWorkerOfPage) {
+IN_PROC_BROWSER_TEST_F(
+    ServiceWorkerTest,
+    DISABLED_FetchFromContentScriptShouldNotGoToServiceWorkerOfPage) {
   ASSERT_TRUE(StartEmbeddedTestServer());
   GURL page_url = embedded_test_server()->GetURL(
       "/extensions/api_test/service_worker/content_script_fetch/"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 80bf058..e572941 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -44,6 +44,11 @@
     "expiry_milestone": 81
   },
   {
+    "name": "aggregated-ml-search-ranking",
+    "owners": [ "thanhdng", "jiameng" ],
+    "expiry_milestone": 82
+  },
+  {
     "name": "allow-disable-mouse-acceleration",
     "owners": [ "zentaro" ],
     "expiry_milestone": 82
@@ -1967,8 +1972,8 @@
   },
   {
     "name": "enable-webrtc-hide-local-ips-with-mdns",
-    "owners": [ "qingsi", "jeroendb" ],
-    "expiry_milestone": 78
+    "owners": [ "qingsi" ],
+    "expiry_milestone": 81
   },
   {
     "name": "enable-webrtc-hw-h264-encoding",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 0845ce6..2e8adc4 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3124,6 +3124,11 @@
 const char kAggregatedMlAppRankingDescription[] =
     "Use the aggregated ML model to rank the suggested apps.";
 
+const char kAggregatedMlSearchRankingName[] = "Rank search results with ML.";
+const char kAggregatedMlSearchRankingDescription[] =
+    "Use the aggregated ML model to rank the non-app search results for "
+    "non-empty queries.";
+
 const char kAllowDisableMouseAccelerationName[] =
     "Allow disabling mouse acceleration";
 const char kAllowDisableMouseAccelerationDescription[] =
@@ -3687,7 +3692,9 @@
     "Enable or disable decode acceleration of WebP images using the VA-API.";
 
 const char kVirtualKeyboardName[] = "Virtual Keyboard";
-const char kVirtualKeyboardDescription[] = "Enable virtual keyboard support.";
+const char kVirtualKeyboardDescription[] =
+    "Always show virtual keyboard regardless of having a physical keyboard "
+    "present";
 
 const char kWakeOnPacketsName[] = "Wake On Packets";
 const char kWakeOnPacketsDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 2712a97..5926a9d 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1845,6 +1845,9 @@
 extern const char kAggregatedMlAppRankingName[];
 extern const char kAggregatedMlAppRankingDescription[];
 
+extern const char kAggregatedMlSearchRankingName[];
+extern const char kAggregatedMlSearchRankingDescription[];
+
 extern const char kAllowDisableMouseAccelerationName[];
 extern const char kAllowDisableMouseAccelerationDescription[];
 
diff --git a/chrome/browser/media/media_engagement_browsertest.cc b/chrome/browser/media/media_engagement_browsertest.cc
index d8aa265..78867d9f6 100644
--- a/chrome/browser/media/media_engagement_browsertest.cc
+++ b/chrome/browser/media/media_engagement_browsertest.cc
@@ -11,6 +11,7 @@
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
+#include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/component_updater/mei_preload_component_installer.h"
 #include "chrome/browser/media/media_engagement_contents_observer.h"
@@ -477,8 +478,16 @@
   ExpectScores(1, 0, 1, 0);
 }
 
+#if defined(OS_WIN) || defined(OS_LINUX)
+// Flaky timeout. https://crbug.com/1014229
+#define MAYBE_RecordSingleVisitOnSameOrigin \
+  DISABLED_RecordSingleVisitOnSameOrigin
+#else
+#define MAYBE_RecordSingleVisitOnSameOrigin RecordSingleVisitOnSameOrigin
+#endif
+
 IN_PROC_BROWSER_TEST_F(MediaEngagementBrowserTest,
-                       RecordSingleVisitOnSameOrigin) {
+                       MAYBE_RecordSingleVisitOnSameOrigin) {
   LoadTestPageAndWaitForPlayAndAudible("engagement_test_small_frame_size.html",
                                        false);
   AdvanceMeaningfulPlaybackTime();
diff --git a/chrome/browser/metrics/renderer_uptime_tracker.cc b/chrome/browser/metrics/renderer_uptime_tracker.cc
index e77aa48..3820de6 100644
--- a/chrome/browser/metrics/renderer_uptime_tracker.cc
+++ b/chrome/browser/metrics/renderer_uptime_tracker.cc
@@ -38,7 +38,7 @@
 
 // static
 RendererUptimeTracker* RendererUptimeTracker::Get() {
-  DCHECK(g_renderer_uptime_tracker_instance);
+  // This can return null in unit tests.
   return g_renderer_uptime_tracker_instance;
 }
 
diff --git a/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc b/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc
index 8c58735..35185b5 100644
--- a/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc
+++ b/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc
@@ -30,8 +30,11 @@
 }
 
 void RendererUptimeWebContentsObserver::DocumentAvailableInMainFrame() {
-  RendererUptimeTracker::Get()->OnLoadInMainFrame(
-      web_contents()->GetMainFrame()->GetProcess()->GetID());
+  // RendererUptimeTracker can be null in unittests.
+  if (RendererUptimeTracker* tracker = RendererUptimeTracker::Get()) {
+    tracker->OnLoadInMainFrame(
+        web_contents()->GetMainFrame()->GetProcess()->GetID());
+  }
 }
 
 WEB_CONTENTS_USER_DATA_KEY_IMPL(RendererUptimeWebContentsObserver)
diff --git a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
index 0e89c92..5d92d1f 100644
--- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
+++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
@@ -417,7 +417,7 @@
 
 ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl::
     WritePermissionGrantImpl(
-        scoped_refptr<ChromeNativeFileSystemPermissionContext> context,
+        base::WeakPtr<ChromeNativeFileSystemPermissionContext> context,
         const url::Origin& origin,
         const Key& key,
         bool is_directory)
@@ -467,7 +467,7 @@
 
 bool ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl::
     CanRequestPermission() {
-  return context_->CanRequestWritePermission(origin_);
+  return context_ && context_->CanRequestWritePermission(origin_);
 }
 
 void ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl::
@@ -481,7 +481,8 @@
 
 ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl::
     ~WritePermissionGrantImpl() {
-  context_->PermissionGrantDestroyed(this);
+  if (context_)
+    context_->PermissionGrantDestroyed(this);
 }
 
 void ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl::
@@ -543,6 +544,9 @@
       HostContentSettingsMapFactory::GetForProfile(profile));
 }
 
+ChromeNativeFileSystemPermissionContext::
+    ~ChromeNativeFileSystemPermissionContext() = default;
+
 scoped_refptr<content::NativeFileSystemPermissionGrant>
 ChromeNativeFileSystemPermissionContext::GetReadPermissionGrant(
     const url::Origin& origin,
@@ -609,7 +613,7 @@
   // status, and store a reference to it in |origin_state| by assigning
   // |existing_grant|.
   auto result = base::MakeRefCounted<WritePermissionGrantImpl>(
-      this, origin, grant_key, is_directory);
+      weak_factory_.GetWeakPtr(), origin, grant_key, is_directory);
   if (result->CanRequestPermission()) {
     if (user_action == UserAction::kSave) {
       result->SetStatus(WritePermissionGrantImpl::PermissionStatus::GRANTED);
@@ -668,8 +672,8 @@
       base::BindOnce(&ShouldBlockAccessToPath, paths[0]),
       base::BindOnce(&ChromeNativeFileSystemPermissionContext::
                          DidConfirmSensitiveDirectoryAccess,
-                     this, origin, paths, is_directory, process_id, frame_id,
-                     std::move(callback)));
+                     weak_factory_.GetWeakPtr(), origin, paths, is_directory,
+                     process_id, frame_id, std::move(callback)));
 }
 
 void ChromeNativeFileSystemPermissionContext::PerformAfterWriteChecks(
@@ -722,28 +726,6 @@
   return grants;
 }
 
-// static
-void ChromeNativeFileSystemPermissionContext::GetPermissionGrantsFromUIThread(
-    content::BrowserContext* browser_context,
-    const url::Origin& origin,
-    int process_id,
-    int frame_id,
-    base::OnceCallback<void(Grants)> callback) {
-  auto permission_context =
-      NativeFileSystemPermissionContextFactory::GetForProfileIfExists(
-          browser_context);
-  if (!permission_context) {
-    std::move(callback).Run(Grants());
-    return;
-  }
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(
-          &ChromeNativeFileSystemPermissionContext::GetPermissionGrants,
-          permission_context, origin, process_id, frame_id),
-      std::move(callback));
-}
-
 void ChromeNativeFileSystemPermissionContext::RevokeDirectoryReadGrants(
     const url::Origin& origin,
     int process_id,
@@ -793,37 +775,14 @@
   }
 }
 
-// static
-void ChromeNativeFileSystemPermissionContext::
-    RevokeGrantsForOriginAndTabFromUIThread(
-        content::BrowserContext* browser_context,
-        const url::Origin& origin,
-        int process_id,
-        int frame_id) {
-  auto permission_context =
-      NativeFileSystemPermissionContextFactory::GetForProfileIfExists(
-          browser_context);
-  if (!permission_context) {
-    // With no context there is nothing to revoke.
-    return;
-  }
-  base::PostTask(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(
-          [](const scoped_refptr<ChromeNativeFileSystemPermissionContext>&
-                 context,
-             const url::Origin& origin, int process_id, int frame_id) {
-            context->RevokeDirectoryReadGrants(origin, process_id, frame_id);
-            context->RevokeWriteGrants(origin, process_id, frame_id);
-          },
-          std::move(permission_context), origin, process_id, frame_id));
+void ChromeNativeFileSystemPermissionContext::RevokeGrantsForOriginAndTab(
+    const url::Origin& origin,
+    int process_id,
+    int frame_id) {
+  RevokeDirectoryReadGrants(origin, process_id, frame_id);
+  RevokeWriteGrants(origin, process_id, frame_id);
 }
 
-void ChromeNativeFileSystemPermissionContext::ShutdownOnUIThread() {}
-
-ChromeNativeFileSystemPermissionContext::
-    ~ChromeNativeFileSystemPermissionContext() = default;
-
 void ChromeNativeFileSystemPermissionContext::PermissionGrantDestroyed(
     WritePermissionGrantImpl* grant) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h
index 86daaa5..0d01c96 100644
--- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h
+++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h
@@ -11,7 +11,7 @@
 #include "base/sequence_checker.h"
 #include "chrome/browser/permissions/permission_util.h"
 #include "components/content_settings/core/common/content_settings_types.h"
-#include "components/keyed_service/core/refcounted_keyed_service.h"
+#include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/native_file_system_permission_context.h"
 #include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
 
@@ -24,11 +24,7 @@
 // Chrome implementation of NativeFileSystemPermissionContext. Currently
 // implements a single per-origin write permission state.
 //
-// All methods should be called on the same sequence, except for the
-// constructor, destructor, and GetPermissionGrantsFromUIThread method.
-//
-// TODO(mek): Reconsider if this class should just be UI-thread only, avoiding
-// the need to make this ref-counted.
+// All methods must be called on the UI thread.
 //
 // This class does not inherit from ChooserContextBase because the model this
 // API uses doesn't really match what ChooserContextBase has to provide. The
@@ -40,10 +36,11 @@
 // ChooserContextBase.
 class ChromeNativeFileSystemPermissionContext
     : public content::NativeFileSystemPermissionContext,
-      public RefcountedKeyedService {
+      public KeyedService {
  public:
   explicit ChromeNativeFileSystemPermissionContext(
       content::BrowserContext* context);
+  ~ChromeNativeFileSystemPermissionContext() override;
 
   class WritePermissionGrantImpl
       : public content::NativeFileSystemPermissionGrant {
@@ -65,7 +62,7 @@
     };
 
     WritePermissionGrantImpl(
-        scoped_refptr<ChromeNativeFileSystemPermissionContext> context,
+        base::WeakPtr<ChromeNativeFileSystemPermissionContext> context,
         const url::Origin& origin,
         const Key& key,
         bool is_directory);
@@ -113,7 +110,7 @@
 
     SEQUENCE_CHECKER(sequence_checker_);
 
-    scoped_refptr<ChromeNativeFileSystemPermissionContext> const context_;
+    base::WeakPtr<ChromeNativeFileSystemPermissionContext> const context_;
     const url::Origin origin_;
     const Key key_;
     const bool is_directory_;
@@ -161,6 +158,9 @@
       int frame_id,
       base::OnceCallback<void(AfterWriteCheckResult)> callback) override;
 
+  // Returns a snapshot of the currently granted permissions.
+  // TODO(https://crbug.com/984769): Eliminate process_id and frame_id from this
+  // method when grants stop being scoped to a frame.
   struct Grants {
     Grants();
     ~Grants();
@@ -174,17 +174,6 @@
                              int process_id,
                              int frame_id);
 
-  // This method must be called on the UI thread, and calls the callback with a
-  // snapshot of the currently granted permissions after looking them up.
-  // TODO(https://crbug.com/984769): Eliminate process_id and frame_id from this
-  // method when grants stop being scoped to a frame.
-  static void GetPermissionGrantsFromUIThread(
-      content::BrowserContext* browser_context,
-      const url::Origin& origin,
-      int process_id,
-      int frame_id,
-      base::OnceCallback<void(Grants)> callback);
-
   // Revokes directory read access for the given origin in the given tab.
   void RevokeDirectoryReadGrants(const url::Origin& origin,
                                  int process_id,
@@ -196,21 +185,13 @@
 
   // Revokes write access and directory read access for the given origin in the
   // given tab.
-  static void RevokeGrantsForOriginAndTabFromUIThread(
-      content::BrowserContext* browser_context,
-      const url::Origin& origin,
-      int process_id,
-      int frame_id);
-
-  // RefcountedKeyedService:
-  void ShutdownOnUIThread() override;
+  void RevokeGrantsForOriginAndTab(const url::Origin& origin,
+                                   int process_id,
+                                   int frame_id);
 
   HostContentSettingsMap* content_settings() { return content_settings_.get(); }
 
  private:
-  // Destructor is private because this class is refcounted.
-  ~ChromeNativeFileSystemPermissionContext() override;
-
   void PermissionGrantDestroyed(WritePermissionGrantImpl* grant);
 
   void DidConfirmSensitiveDirectoryAccess(
@@ -230,6 +211,8 @@
 
   scoped_refptr<HostContentSettingsMap> content_settings_;
 
+  base::WeakPtrFactory<ChromeNativeFileSystemPermissionContext> weak_factory_{
+      this};
   DISALLOW_COPY_AND_ASSIGN(ChromeNativeFileSystemPermissionContext);
 };
 
diff --git a/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc b/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc
index e8ae25a..3de8ca6 100644
--- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc
+++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc
@@ -46,7 +46,7 @@
     web_contents_ =
         content::WebContentsTester::CreateTestWebContents(&profile_, nullptr);
     permission_context_ =
-        base::MakeRefCounted<ChromeNativeFileSystemPermissionContext>(
+        std::make_unique<ChromeNativeFileSystemPermissionContext>(
             browser_context());
   }
 
@@ -119,7 +119,7 @@
 
   content::BrowserTaskEnvironment task_environment_;
   base::ScopedTempDir temp_dir_;
-  scoped_refptr<ChromeNativeFileSystemPermissionContext> permission_context_;
+  std::unique_ptr<ChromeNativeFileSystemPermissionContext> permission_context_;
   content::RenderViewHostTestEnabler render_view_host_test_enabler_;
   TestingProfile profile_;
   std::unique_ptr<WebContents> web_contents_;
diff --git a/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc b/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc
index 4741d21..f327367 100644
--- a/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc
+++ b/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc
@@ -11,19 +11,19 @@
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 // static
-scoped_refptr<ChromeNativeFileSystemPermissionContext>
+ChromeNativeFileSystemPermissionContext*
 NativeFileSystemPermissionContextFactory::GetForProfile(
     content::BrowserContext* profile) {
   return static_cast<ChromeNativeFileSystemPermissionContext*>(
-      GetInstance()->GetServiceForBrowserContext(profile, true).get());
+      GetInstance()->GetServiceForBrowserContext(profile, true));
 }
 
 // static
-scoped_refptr<ChromeNativeFileSystemPermissionContext>
+ChromeNativeFileSystemPermissionContext*
 NativeFileSystemPermissionContextFactory::GetForProfileIfExists(
     content::BrowserContext* profile) {
   return static_cast<ChromeNativeFileSystemPermissionContext*>(
-      GetInstance()->GetServiceForBrowserContext(profile, false).get());
+      GetInstance()->GetServiceForBrowserContext(profile, false));
 }
 
 // static
@@ -35,7 +35,7 @@
 
 NativeFileSystemPermissionContextFactory::
     NativeFileSystemPermissionContextFactory()
-    : RefcountedBrowserContextKeyedServiceFactory(
+    : BrowserContextKeyedServiceFactory(
           "NativeFileSystemPermissionContext",
           BrowserContextDependencyManager::GetInstance()) {
   DependsOn(HostContentSettingsMapFactory::GetInstance());
@@ -50,8 +50,7 @@
   return chrome::GetBrowserContextOwnInstanceInIncognito(context);
 }
 
-scoped_refptr<RefcountedKeyedService>
-NativeFileSystemPermissionContextFactory::BuildServiceInstanceFor(
+KeyedService* NativeFileSystemPermissionContextFactory::BuildServiceInstanceFor(
     content::BrowserContext* profile) const {
   return new ChromeNativeFileSystemPermissionContext(profile);
 }
diff --git a/chrome/browser/native_file_system/native_file_system_permission_context_factory.h b/chrome/browser/native_file_system/native_file_system_permission_context_factory.h
index 4bbc2b3..152c2a4d 100644
--- a/chrome/browser/native_file_system/native_file_system_permission_context_factory.h
+++ b/chrome/browser/native_file_system/native_file_system_permission_context_factory.h
@@ -7,19 +7,19 @@
 
 #include "base/macros.h"
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/refcounted_browser_context_keyed_service_factory.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 
 class ChromeNativeFileSystemPermissionContext;
 
 // Factory to get or create an instance of
 // ChromeNativeFileSystemPermissionContext from a Profile.
 class NativeFileSystemPermissionContextFactory
-    : public RefcountedBrowserContextKeyedServiceFactory {
+    : public BrowserContextKeyedServiceFactory {
  public:
-  static scoped_refptr<ChromeNativeFileSystemPermissionContext> GetForProfile(
+  static ChromeNativeFileSystemPermissionContext* GetForProfile(
       content::BrowserContext* profile);
-  static scoped_refptr<ChromeNativeFileSystemPermissionContext>
-  GetForProfileIfExists(content::BrowserContext* profile);
+  static ChromeNativeFileSystemPermissionContext* GetForProfileIfExists(
+      content::BrowserContext* profile);
   static NativeFileSystemPermissionContextFactory* GetInstance();
 
  private:
@@ -28,10 +28,10 @@
   NativeFileSystemPermissionContextFactory();
   ~NativeFileSystemPermissionContextFactory() override;
 
-  // RefcountedBrowserContextKeyedServiceFactory:
+  // BrowserContextKeyedServiceFactory:
   content::BrowserContext* GetBrowserContextToUse(
       content::BrowserContext* context) const override;
-  scoped_refptr<RefcountedKeyedService> BuildServiceInstanceFor(
+  KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* profile) const override;
 
   DISALLOW_COPY_AND_ASSIGN(NativeFileSystemPermissionContextFactory);
diff --git a/chrome/browser/net/ftp_browsertest.cc b/chrome/browser/net/ftp_browsertest.cc
index 5b0ba383..1b3fe62 100644
--- a/chrome/browser/net/ftp_browsertest.cc
+++ b/chrome/browser/net/ftp_browsertest.cc
@@ -2,13 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <vector>
+
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_features.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/browser_context.h"
@@ -19,15 +23,19 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
+namespace {
+
 class FtpBrowserTest : public InProcessBrowserTest {
  public:
   FtpBrowserTest()
       : ftp_server_(net::SpawnedTestServer::TYPE_FTP,
                     base::FilePath(FILE_PATH_LITERAL("chrome/test/data/ftp"))) {
+    scoped_feature_list_.InitAndEnableFeature(features::kEnableFtp);
   }
 
  protected:
   net::SpawnedTestServer ftp_server_;
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 void WaitForTitle(content::WebContents* contents, const char* expected_title) {
@@ -38,6 +46,8 @@
             title_watcher.WaitAndGetTitle());
 }
 
+}  // namespace
+
 IN_PROC_BROWSER_TEST_F(FtpBrowserTest, BasicFtpUrlAuthentication) {
   ASSERT_TRUE(ftp_server_.Start());
   ui_test_utils::NavigateToURL(
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc
index f3c55a9c..344a3d2 100644
--- a/chrome/browser/net/profile_network_context_service.cc
+++ b/chrome/browser/net/profile_network_context_service.cc
@@ -492,7 +492,8 @@
   // ProfileIOData::IsHandledProtocol().
   // TODO(mmenke): Find a better way of handling tracking supported schemes.
 #if !BUILDFLAG(DISABLE_FTP_SUPPORT)
-  network_context_params->enable_ftp_url_support = true;
+  network_context_params->enable_ftp_url_support =
+      base::FeatureList::IsEnabled(features::kEnableFtp);
 #endif  // !BUILDFLAG(DISABLE_FTP_SUPPORT)
 
   proxy_config_monitor_.AddToNetworkContextParams(network_context_params.get());
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
index dcc5b84..59f49c0 100644
--- a/chrome/browser/net/system_network_context_manager.cc
+++ b/chrome/browser/net/system_network_context_manager.cc
@@ -851,7 +851,8 @@
 
   // These are needed for PAC scripts that use FTP URLs.
 #if !BUILDFLAG(DISABLE_FTP_SUPPORT)
-  network_context_params->enable_ftp_url_support = true;
+  network_context_params->enable_ftp_url_support =
+      base::FeatureList::IsEnabled(features::kEnableFtp);
 #endif
 
   network_context_params->primary_network_context = true;
diff --git a/chrome/browser/notifications/chrome_ash_message_center_client.cc b/chrome/browser/notifications/chrome_ash_message_center_client.cc
index b304b9d..782592d 100644
--- a/chrome/browser/notifications/chrome_ash_message_center_client.cc
+++ b/chrome/browser/notifications/chrome_ash_message_center_client.cc
@@ -8,7 +8,6 @@
 #include "ash/public/cpp/notifier_settings_observer.h"
 #include "base/i18n/string_compare.h"
 #include "base/stl_util.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/notifications/arc_application_notifier_controller.h"
 #include "chrome/browser/notifications/extension_notifier_controller.h"
@@ -16,8 +15,8 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/settings_window_manager_chromeos.h"
 #include "chrome/common/webui_url_constants.h"
+#include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
-#include "content/public/browser/notification_service.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/public/cpp/notifier_id.h"
 
@@ -32,8 +31,8 @@
 // All notifier actions are performed on the notifiers for the currently active
 // profile, so this just returns the active profile.
 Profile* GetProfileForNotifiers() {
-  const auto* user = user_manager::UserManager::Get()->GetActiveUser();
-  return chromeos::ProfileHelper::Get()->GetProfileByUser(user);
+  return chromeos::ProfileHelper::Get()->GetProfileByUser(
+      user_manager::UserManager::Get()->GetActiveUser());
 }
 
 class NotifierComparator {
@@ -145,8 +144,16 @@
 }
 
 void ChromeAshMessageCenterClient::GetNotifiers() {
+  if (!notifier_observers_.might_have_observers())
+    return;
+
   Profile* profile = GetProfileForNotifiers();
   if (!profile) {
+    user_manager::UserManager::Get()
+        ->GetActiveUser()
+        ->AddProfileCreatedObserver(
+            base::BindOnce(&ChromeAshMessageCenterClient::GetNotifiers,
+                           weak_ptr_.GetWeakPtr()));
     LOG(ERROR) << "GetNotifiers called before profile fully loaded, see "
                   "https://crbug.com/968825";
     return;
@@ -171,9 +178,8 @@
 void ChromeAshMessageCenterClient::SetNotifierEnabled(
     const NotifierId& notifier_id,
     bool enabled) {
-  Profile* profile = GetProfileForNotifiers();
-  CHECK(profile);
-  sources_[notifier_id.type]->SetNotifierEnabled(profile, notifier_id, enabled);
+  sources_[notifier_id.type]->SetNotifierEnabled(GetProfileForNotifiers(),
+                                                 notifier_id, enabled);
 }
 
 void ChromeAshMessageCenterClient::AddNotifierSettingsObserver(
@@ -199,15 +205,3 @@
   if (!enabled)
     MessageCenter::Get()->RemoveNotificationsForNotifierId(notifier_id);
 }
-
-void ChromeAshMessageCenterClient::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  DCHECK_EQ(type, chrome::NOTIFICATION_PROFILE_ADDED);
-  Profile* profile = GetProfileForNotifiers();
-  if (profile) {
-    GetNotifiers();
-    registrar_.RemoveAll();
-  }
-}
diff --git a/chrome/browser/notifications/chrome_ash_message_center_client.h b/chrome/browser/notifications/chrome_ash_message_center_client.h
index 2fca655..7bae2a8 100644
--- a/chrome/browser/notifications/chrome_ash_message_center_client.h
+++ b/chrome/browser/notifications/chrome_ash_message_center_client.h
@@ -6,12 +6,11 @@
 #define CHROME_BROWSER_NOTIFICATIONS_CHROME_ASH_MESSAGE_CENTER_CLIENT_H_
 
 #include "ash/public/cpp/notifier_settings_controller.h"
+#include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "chrome/browser/notifications/notification_platform_bridge.h"
 #include "chrome/browser/notifications/notification_platform_bridge_chromeos.h"
 #include "chrome/browser/notifications/notifier_controller.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
 
 // This class serves as Chrome's AshMessageCenterClient, as well as the
 // NotificationPlatformBridge for ChromeOS. It dispatches notifications to Ash
@@ -19,8 +18,7 @@
 // NotifierControllers to provide notifier settings information to Ash (visible
 // in NotifierSettingsView).
 class ChromeAshMessageCenterClient : public ash::NotifierSettingsController,
-                                     public NotifierController::Observer,
-                                     public content::NotificationObserver {
+                                     public NotifierController::Observer {
  public:
   explicit ChromeAshMessageCenterClient(
       NotificationPlatformBridgeDelegate* delegate);
@@ -46,11 +44,6 @@
                                 bool enabled) override;
 
  private:
-  // content::NotificationObserver override.
-  void Observe(int type,
-               const content::NotificationSource& source,
-               const content::NotificationDetails& details) override;
-
   NotificationPlatformBridgeDelegate* delegate_;
 
   // Notifier source for each notifier type.
@@ -59,7 +52,7 @@
 
   base::ObserverList<ash::NotifierSettingsObserver> notifier_observers_;
 
-  content::NotificationRegistrar registrar_;
+  base::WeakPtrFactory<ChromeAshMessageCenterClient> weak_ptr_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ChromeAshMessageCenterClient);
 };
diff --git a/chrome/browser/offline_pages/recent_tab_helper_unittest.cc b/chrome/browser/offline_pages/recent_tab_helper_unittest.cc
index 2515200..0c48b94 100644
--- a/chrome/browser/offline_pages/recent_tab_helper_unittest.cc
+++ b/chrome/browser/offline_pages/recent_tab_helper_unittest.cc
@@ -279,6 +279,7 @@
 void RecentTabHelperTest::StartAndCommitNavigation(
     std::unique_ptr<content::NavigationSimulator> simulator) {
   simulator->SetAutoAdvance(false);
+  simulator->SetKeepLoading(true);
   simulator->Start();
 
   // Need to flush the task queue manually since there may be async tasks
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
index 425e785..4a8b8f1 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -74,6 +74,23 @@
       rfh, page_load_features);
 }
 
+std::string GetHeavyAdReportMessage(const FrameData& frame_data) {
+  const char kChromeStatusMessage[] =
+      "See https://www.chromestatus.com/feature/4800491902992384";
+  switch (frame_data.heavy_ad_status()) {
+    case FrameData::HeavyAdStatus::kNetwork:
+      return "Ad was removed because its network usage exceeded the limit. " +
+             std::string(kChromeStatusMessage);
+    case FrameData::HeavyAdStatus::kTotalCpu:
+    case FrameData::HeavyAdStatus::kPeakCpu:
+      return "Ad was removed because its CPU usage exceeded the limit. " +
+             std::string(kChromeStatusMessage);
+    case FrameData::HeavyAdStatus::kNone:
+      NOTREACHED();
+      return "";
+  }
+}
+
 using ResourceMimeType = AdsPageLoadMetricsObserver::ResourceMimeType;
 const char kDisallowedByBlocklistHistogramName[] =
     "PageLoad.Clients.Ads.HeavyAds.DisallowedByBlocklist";
@@ -177,59 +194,11 @@
   FrameData* ancestor_data = FindFrameData(subframe_rfh->GetFrameTreeNodeId());
 
   // Only update the frame with the root frames timing updates.
-  if (ancestor_data &&
-      ancestor_data->frame_tree_node_id() == subframe_rfh->GetFrameTreeNodeId())
+  if (ancestor_data && ancestor_data->root_frame_tree_node_id() ==
+                           subframe_rfh->GetFrameTreeNodeId())
     ancestor_data->set_timing(timing.Clone());
 }
 
-void AdsPageLoadMetricsObserver::MaybeTriggerHeavyAdIntervention(
-    content::RenderFrameHost* render_frame_host,
-    FrameData* frame_data) {
-  DCHECK(render_frame_host);
-  if (!frame_data->MaybeTriggerHeavyAdIntervention())
-    return;
-
-  // Check to see if we are allowed to activate on this host.
-  if (IsBlocklisted())
-    return;
-
-  // Find the RenderFrameHost associated with this frame data. It is possible
-  // that this frame no longer exists. We do not care if the frame has
-  // moved to a new process because once the frame has been tagged as an ad, it
-  // is always considered an ad.
-  while (render_frame_host && render_frame_host->GetFrameTreeNodeId() !=
-                                  frame_data->frame_tree_node_id()) {
-    render_frame_host = render_frame_host->GetParent();
-  }
-  if (!render_frame_host)
-    return;
-
-  // Ensure that this RenderFrameHost is a subframe.
-  DCHECK(render_frame_host->GetParent());
-
-  GetDelegate().GetWebContents()->GetController().LoadPostCommitErrorPage(
-      render_frame_host, render_frame_host->GetLastCommittedURL(),
-      heavy_ads::PrepareHeavyAdPage(), net::ERR_BLOCKED_BY_CLIENT);
-
-  RecordFeatureUsage(render_frame_host,
-                     blink::mojom::WebFeature::kHeavyAdIntervention);
-
-  ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION,
-                FrameData::FrameVisibility::kAnyVisibility,
-                frame_data->heavy_ad_status_with_noise());
-  ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION,
-                frame_data->visibility(),
-                frame_data->heavy_ad_status_with_noise());
-
-  // Report intervention to the blocklist.
-  if (auto* blocklist = GetHeavyAdBlocklist()) {
-    blocklist->AddEntry(
-        GetDelegate().GetWebContents()->GetLastCommittedURL().host(),
-        true /* opt_out */,
-        static_cast<int>(HeavyAdBlocklistType::kHeavyAdOnlyType));
-  }
-}
-
 void AdsPageLoadMetricsObserver::OnCpuTimingUpdate(
     content::RenderFrameHost* subframe_rfh,
     const page_load_metrics::mojom::CpuTiming& timing) {
@@ -422,7 +391,7 @@
   // chain, then update it. The display property is propagated to all child
   // frames.
   if (ancestor_data && render_frame_host->GetFrameTreeNodeId() ==
-                           ancestor_data->frame_tree_node_id()) {
+                           ancestor_data->root_frame_tree_node_id()) {
     ancestor_data->SetDisplayState(is_display_none);
   }
 }
@@ -435,7 +404,7 @@
   // If the frame whose size has changed is the root of the ad ancestry chain,
   // then update it
   if (ancestor_data && render_frame_host->GetFrameTreeNodeId() ==
-                           ancestor_data->frame_tree_node_id()) {
+                           ancestor_data->root_frame_tree_node_id()) {
     ancestor_data->SetFrameSize(frame_size);
   }
 }
@@ -472,7 +441,7 @@
 
   // If the root ad frame has been deleted, flush histograms for the frame and
   // remove it from storage. All child frames should be deleted by this point.
-  if (ancestor_data && ancestor_data->frame_tree_node_id() ==
+  if (ancestor_data && ancestor_data->root_frame_tree_node_id() ==
                            render_frame_host->GetFrameTreeNodeId()) {
     RecordPerFrameHistogramsForAdTagging(*ancestor_data);
     RecordPerFrameHistogramsForCpuUsage(*ancestor_data);
@@ -975,6 +944,74 @@
   return &*id_and_data->second;
 }
 
+void AdsPageLoadMetricsObserver::MaybeTriggerHeavyAdIntervention(
+    content::RenderFrameHost* render_frame_host,
+    FrameData* frame_data) {
+  DCHECK(render_frame_host);
+  if (!frame_data->MaybeTriggerHeavyAdIntervention())
+    return;
+
+  // Check to see if we are allowed to activate on this host.
+  if (IsBlocklisted())
+    return;
+
+  // We should always unload the root of the ad subtree. Find the
+  // RenderFrameHost of the root ad frame associated with |frame_data|.
+  // |render_frame_host| may be the frame host for a subframe of the ad which we
+  // received a resource update for. Traversing the tree here guarantees
+  // that the frame we unload is an ancestor of |render_frame_host|. We cannot
+  // check if render frame hosts are ads so we rely on matching the
+  // root_frame_tree_node_id of |frame_data|. It is possible that this frame no
+  // longer exists. We do not care if the frame has moved to a new process
+  // because once the frame has been tagged as an ad, it is always considered an
+  // ad by our heuristics.
+  while (render_frame_host && render_frame_host->GetFrameTreeNodeId() !=
+                                  frame_data->root_frame_tree_node_id()) {
+    render_frame_host = render_frame_host->GetParent();
+  }
+  if (!render_frame_host)
+    return;
+
+  // Ensure that this RenderFrameHost is a subframe.
+  DCHECK(render_frame_host->GetParent());
+
+  const char kReportId[] = "HeavyAdIntervention";
+  std::string report_message = GetHeavyAdReportMessage(*frame_data);
+
+  // Report to all child frames that will be unloaded. Once all reports are
+  // queued, the frame will be unloaded. Because the IPC messages are ordered
+  // wrt to each frames unload, we do not need to wait before loading the error
+  // page. Reports will be added to ReportingObserver queues synchronously when
+  // the IPC message is handled, which guarantees they will be available in the
+  // the unload handler.
+  for (content::RenderFrameHost* reporting_frame :
+       render_frame_host->GetFramesInSubtree()) {
+    reporting_frame->SendInterventionReport(kReportId, report_message);
+  }
+
+  // Report intervention to the blocklist.
+  if (auto* blocklist = GetHeavyAdBlocklist()) {
+    blocklist->AddEntry(
+        GetDelegate().GetWebContents()->GetLastCommittedURL().host(),
+        true /* opt_out */,
+        static_cast<int>(HeavyAdBlocklistType::kHeavyAdOnlyType));
+  }
+
+  GetDelegate().GetWebContents()->GetController().LoadPostCommitErrorPage(
+      render_frame_host, render_frame_host->GetLastCommittedURL(),
+      heavy_ads::PrepareHeavyAdPage(), net::ERR_BLOCKED_BY_CLIENT);
+
+  RecordFeatureUsage(render_frame_host,
+                     blink::mojom::WebFeature::kHeavyAdIntervention);
+
+  ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION,
+                FrameData::FrameVisibility::kAnyVisibility,
+                frame_data->heavy_ad_status_with_noise());
+  ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION,
+                frame_data->visibility(),
+                frame_data->heavy_ad_status_with_noise());
+}
+
 bool AdsPageLoadMetricsObserver::IsBlocklisted() {
   if (!heavy_ad_blocklist_enabled_)
     return false;
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h
index 629a771..63a4ff33 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h
@@ -30,7 +30,6 @@
     : public page_load_metrics::PageLoadMetricsObserver,
       public subresource_filter::SubresourceFilterObserver {
  public:
-
   // Returns a new AdsPageLoadMetricObserver. If the feature is disabled it
   // returns nullptr.
   static std::unique_ptr<AdsPageLoadMetricsObserver> CreateIfNeeded(
@@ -164,12 +163,10 @@
   // |ad_frames_data_storage_|.
   FrameData* FindFrameData(FrameTreeNodeId id);
 
-  // Loads the heavy ad intervention page in the target frame if it is safe to
-  // do so on this origin, and the frame meets the criteria to be considered a
-  // heavy ad.
-  // TODO(johnidel): Ads may only automatically be unloaded 5 times per-origin
-  // per day and to prevent a side channel leak of cross-origin resource size /
-  // CPU usage.
+  // Triggers the heavy ad intervention page in the target frame if it is safe
+  // to do so on this origin, and the frame meets the criteria to be considered
+  // a heavy ad. This first sends an intervention report to every affected
+  // frame then loads an error page in the root ad frame.
   void MaybeTriggerHeavyAdIntervention(
       content::RenderFrameHost* render_frame_host,
       FrameData* frame_data);
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
index 8f1f4fe..1707d59 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
@@ -876,6 +876,123 @@
       entries.front(), ukm::builders::AdFrameLoad::kLoading_CacheBytes2Name, 0);
 }
 
+// Verifies that the ad unloaded by the heavy ad intervention receives an
+// intervention report prior to being unloaded.
+IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest,
+                       HeavyAdInterventionFired_ReportSent) {
+  base::HistogramTester histogram_tester;
+  auto incomplete_resource_response =
+      std::make_unique<net::test_server::ControllableHttpResponse>(
+          embedded_test_server(), "/ads_observer/incomplete_resource.js",
+          true /*relative_url_is_prefix*/);
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  // Create a navigation observer that will watch for the intervention to
+  // navigate the frame.
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+
+  auto waiter = CreateAdsPageLoadMetricsTestWaiter();
+  GURL url = embedded_test_server()->GetURL(
+      "/ads_observer/ad_with_incomplete_resource.html");
+  ui_test_utils::NavigateToURL(browser(), url);
+
+  content::RenderFrameHost* ad_frame =
+      ChildFrameAt(web_contents->GetMainFrame(), 0);
+
+  content::DOMMessageQueue message_queue(ad_frame);
+
+  const std::string report_script = R"(
+      function process(report) {
+        if (report.body.id === 'HeavyAdIntervention')
+          window.domAutomationController.send('REPORT');
+      }
+
+      let observer = new ReportingObserver((reports, observer) => {
+        reports.forEach(process);
+      });
+      observer.observe();
+
+      window.addEventListener('unload', function(event) {
+        observer.takeRecords().forEach(process);
+        window.domAutomationController.send('END');
+      });
+  )";
+  EXPECT_TRUE(content::ExecJs(ad_frame, report_script,
+                              content::EXECUTE_SCRIPT_NO_USER_GESTURE));
+
+  // Load a resource large enough to trigger the intervention.
+  LoadLargeResource(incomplete_resource_response.get(), kMaxHeavyAdNetworkSize);
+
+  std::string message;
+  bool got_report = false;
+  while (message_queue.WaitForMessage(&message)) {
+    if (message == "\"REPORT\"") {
+      got_report = true;
+      break;
+    }
+    if (message == "\"END\"")
+      break;
+  }
+  EXPECT_TRUE(got_report);
+}
+
+// Verifies that reports are sent to all children.
+IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest,
+                       HeavyAdInterventionFired_ReportsToAllChildren) {
+  base::HistogramTester histogram_tester;
+  auto large_resource =
+      std::make_unique<net::test_server::ControllableHttpResponse>(
+          embedded_test_server(), "/ads_observer/incomplete_resource.js",
+          false /*relative_url_is_prefix*/);
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  // Create a navigation observer that will watch for the intervention to
+  // navigate the frame.
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  content::TestNavigationObserver child_observer(web_contents, 2);
+  content::TestNavigationObserver error_observer(web_contents,
+                                                 net::ERR_BLOCKED_BY_CLIENT);
+
+  auto waiter = CreateAdsPageLoadMetricsTestWaiter();
+  auto console_delegate = std::make_unique<content::ConsoleObserverDelegate>(
+      web_contents, "Ad was removed*");
+  web_contents->SetDelegate(console_delegate.get());
+
+  ui_test_utils::NavigateToURL(
+      browser(), embedded_test_server()->GetURL(
+                     "foo.com", "/ad_tagging/frame_factory.html"));
+
+  EXPECT_TRUE(ExecJs(web_contents,
+                     "createAdFrame('/ad_tagging/frame_factory.html', '');"));
+
+  child_observer.Wait();
+
+  content::RenderFrameHost* ad_frame =
+      ChildFrameAt(web_contents->GetMainFrame(), 0);
+
+  auto cross_origin_ad_url = embedded_test_server()->GetURL(
+      "xyz.com", "/ad_tagging/frame_factory.html");
+
+  EXPECT_TRUE(ExecJs(
+      ad_frame,
+      "createAdFrame('/ads_observer/ad_with_incomplete_resource.html', '');",
+      content::EXECUTE_SCRIPT_NO_USER_GESTURE));
+  EXPECT_TRUE(ExecJs(ad_frame,
+                     "createAdFrame('" + cross_origin_ad_url.spec() + "', '');",
+                     content::EXECUTE_SCRIPT_NO_USER_GESTURE));
+
+  // Load a resource large enough to trigger the intervention.
+  LoadLargeResource(large_resource.get(), kMaxHeavyAdNetworkSize);
+
+  error_observer.WaitForNavigationFinished();
+
+  // Every frame should get a report (ad_with_incomplete_resource.html loads two
+  // frames).
+  EXPECT_EQ(4u, console_delegate->messages().size());
+}
+
 // Verifies that the frame is navigated to the intervention page when a
 // heavy ad intervention triggers.
 IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest,
@@ -905,6 +1022,9 @@
   // Wait for the intervention page navigation to finish on the frame.
   error_observer.WaitForNavigationFinished();
 
+  histogram_tester.ExpectUniqueSample(kHeavyAdInterventionTypeHistogramId,
+                                      FrameData::HeavyAdStatus::kNetwork, 1);
+
   // Check that the ad frame was navigated to the intervention page.
   EXPECT_FALSE(error_observer.last_navigation_succeeded());
 
@@ -1031,6 +1151,9 @@
   // Wait for the intervention page navigation to finish on the frame.
   error_observer.WaitForNavigationFinished();
 
+  histogram_tester.ExpectUniqueSample(kHeavyAdInterventionTypeHistogramId,
+                                      FrameData::HeavyAdStatus::kNetwork, 1);
+
   // Check that the ad frame was navigated to the intervention page.
   EXPECT_FALSE(error_observer.last_navigation_succeeded());
 
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
index 65ed7e7..aa11190 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -11,6 +11,7 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
+#include "base/callback.h"
 #include "base/macros.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/stringprintf.h"
@@ -48,10 +49,14 @@
 #include "content/public/test/test_navigation_throttle.h"
 #include "content/public/test/test_navigation_throttle_inserter.h"
 #include "content/public/test/test_renderer_host.h"
+#include "content/public/test/test_utils.h"
 #include "content/public/test/web_contents_tester.h"
+#include "mojo/public/cpp/bindings/associated_receiver_set.h"
 #include "net/base/host_port_pair.h"
 #include "services/metrics/public/cpp/metrics_utils.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
+#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
+#include "third_party/blink/public/mojom/frame/frame.mojom.h"
 #include "url/gurl.h"
 
 using content::NavigationSimulator;
@@ -280,6 +285,86 @@
   }
 }
 
+// Waits for an error page for the heavy ad intervention to be navigated to.
+class ErrorPageWaiter : public content::WebContentsObserver {
+ public:
+  explicit ErrorPageWaiter(content::WebContents* contents)
+      : content::WebContentsObserver(contents) {}
+  ~ErrorPageWaiter() override = default;
+
+  // content::WebContentsObserver:
+  void DidFinishNavigation(content::NavigationHandle* handle) override {
+    if (handle->GetNetErrorCode() != net::ERR_BLOCKED_BY_CLIENT) {
+      is_error_page_ = false;
+      return;
+    }
+
+    is_error_page_ = true;
+    if (quit_closure_)
+      std::move(quit_closure_).Run();
+  }
+
+  // Immediately returns if we are on an error page.
+  void WaitForError() {
+    if (is_error_page_)
+      return;
+    base::RunLoop run_loop;
+    quit_closure_ = run_loop.QuitClosure();
+    run_loop.Run();
+  }
+
+ private:
+  base::OnceClosure quit_closure_;
+  bool is_error_page_ = false;
+};
+
+// Mock frame remote. Processes calls to SendInterventionReport and waits
+// for all pending messages to be sent.
+class FrameRemoteTester : public blink::mojom::Frame {
+ public:
+  FrameRemoteTester() = default;
+  ~FrameRemoteTester() override = default;
+
+  void BindPendingReceiver(mojo::ScopedInterfaceEndpointHandle handle) {
+    receivers_.Add(this, mojo::PendingAssociatedReceiver<blink::mojom::Frame>(
+                             std::move(handle)));
+  }
+
+  // blink::mojom::Frame
+  void SendInterventionReport(const std::string& id,
+                              const std::string& message) override {
+    if (!on_empty_report_callback_)
+      return;
+
+    if (id.empty()) {
+      std::move(on_empty_report_callback_).Run();
+      return;
+    }
+    had_message_ = true;
+  }
+
+  void GetTextSurroundingSelection(
+      uint32_t max_length,
+      GetTextSurroundingSelectionCallback callback) override {}
+
+  // Sends an empty message and waits for it to be received. Returns true if any
+  // other messages were received.
+  bool FlushForTesting(RenderFrameHost* render_frame_host) {
+    base::RunLoop run_loop;
+    on_empty_report_callback_ = run_loop.QuitClosure();
+    render_frame_host->SendInterventionReport("", "");
+    run_loop.Run();
+    int had_message = had_message_;
+    had_message_ = false;
+    return had_message;
+  }
+
+ private:
+  bool had_message_ = false;
+  base::OnceClosure on_empty_report_callback_;
+  mojo::AssociatedReceiverSet<blink::mojom::Frame> receivers_;
+};
+
 }  // namespace
 
 class AdsPageLoadMetricsObserverTest
@@ -373,6 +458,15 @@
     auto navigation_simulator =
         NavigationSimulator::CreateRendererInitiated(GURL(url), subframe);
     navigation_simulator->Commit();
+
+    blink::AssociatedInterfaceProvider* remote_interfaces =
+        navigation_simulator->GetFinalRenderFrameHost()
+            ->GetRemoteAssociatedInterfaces();
+    remote_interfaces->OverrideBinderForTesting(
+        blink::mojom::Frame::Name_,
+        base::BindRepeating(&FrameRemoteTester::BindPendingReceiver,
+                            base::Unretained(&frame_remote_tester_)));
+
     return navigation_simulator->GetFinalRenderFrameHost();
   }
 
@@ -427,6 +521,12 @@
 
   HeavyAdBlocklist* blocklist() { return test_blocklist_.get(); }
 
+  // Flushes all intervention report messages and returns a bool if there was a
+  // message.
+  bool HasInterventionReportsAfterFlush(RenderFrameHost* render_frame_host) {
+    return frame_remote_tester_.FlushForTesting(render_frame_host);
+  }
+
   void OverrideVisibilityTrackerWithMockClock() {
     clock_ = std::make_unique<base::SimpleTestTickClock>();
     clock_->SetNowTicks(base::TimeTicks::Now());
@@ -491,6 +591,7 @@
   base::HistogramTester histogram_tester_;
   ukm::TestAutoSetUkmRecorder test_ukm_recorder_;
   std::unique_ptr<page_load_metrics::PageLoadMetricsObserverTester> tester_;
+  FrameRemoteTester frame_remote_tester_;
 
   // The clock used by the ui::ScopedVisibilityTracker, assigned if non-null.
   std::unique_ptr<base::SimpleTestTickClock> clock_;
@@ -1648,12 +1749,17 @@
   // Load just under the threshold amount of bytes.
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached,
                      (heavy_ad_thresholds::kMaxNetworkBytes / 1024) - 1);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 0);
+
+  // Verify we did not trigger the intervention.
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
+
+  ErrorPageWaiter waiter(web_contents());
 
   // Load enough bytes to trigger the intervention.
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, 2);
 
+  EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame));
+  waiter.WaitForError();
   histogram_tester().ExpectUniqueSample(
       SuffixedHistogram("HeavyAds.InterventionType2"),
       FrameData::HeavyAdStatus::kNetwork, 1);
@@ -1676,9 +1782,12 @@
   histogram_tester().ExpectTotalCount(
       SuffixedHistogram("HeavyAds.InterventionType2"), 0);
 
+  ErrorPageWaiter waiter(web_contents());
+
   // Load enough bytes to meet the noised threshold criteria.
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, 1);
 
+  waiter.WaitForError();
   histogram_tester().ExpectUniqueSample(
       SuffixedHistogram("HeavyAds.InterventionType2"),
       FrameData::HeavyAdStatus::kNetwork, 1);
@@ -1700,8 +1809,9 @@
   // Load network bytes that trip the heavy ad threshold without noise.
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached,
                      heavy_ad_thresholds::kMaxNetworkBytes / 1024 + 1);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 0);
+
+  // Verify we did not trigger the intervention.
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
 
   // Navigate again to trigger histograms.
   NavigateFrame(kNonAdUrl, main_frame);
@@ -1735,6 +1845,9 @@
   // Verify the frame can still trip the CPU threshold.
   UseCpuTimeUnderThreshold(ad_frame, base::TimeDelta::FromMilliseconds(
                                          heavy_ad_thresholds::kMaxCpuTime + 1));
+
+  // Verify we did not trigger the intervention.
+  EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame));
   histogram_tester().ExpectUniqueSample(
       SuffixedHistogram("HeavyAds.InterventionType2"),
       FrameData::HeavyAdStatus::kTotalCpu, 1);
@@ -1766,12 +1879,18 @@
   AdvancePageDuration(base::TimeDelta::FromSeconds(30));
   UseCpuTimeUnderThreshold(ad_frame, base::TimeDelta::FromMilliseconds(
                                          heavy_ad_thresholds::kMaxCpuTime - 1));
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 0);
+
+  // Verify we did not trigger the intervention.
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
+
   AdvancePageDuration(base::TimeDelta::FromSeconds(30));
+
   // Use enough CPU to trigger the intervention.
+  ErrorPageWaiter waiter(web_contents());
   OnCpuTimingUpdate(ad_frame, base::TimeDelta::FromMilliseconds(1));
 
+  EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame));
+  waiter.WaitForError();
   histogram_tester().ExpectUniqueSample(
       SuffixedHistogram("HeavyAds.InterventionType2"),
       FrameData::HeavyAdStatus::kTotalCpu, 1);
@@ -1793,13 +1912,17 @@
       ad_frame,
       base::TimeDelta::FromMilliseconds(
           heavy_ad_thresholds::kMaxPeakWindowedPercent * 30000 / 100 - 1));
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 0);
+
+  // Verify we did not trigger the intervention.
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
 
   // Use enough CPU to trigger the intervention.
+  ErrorPageWaiter waiter(web_contents());
   AdvancePageDuration(base::TimeDelta::FromSeconds(10));
   OnCpuTimingUpdate(ad_frame, base::TimeDelta::FromMilliseconds(1));
 
+  EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame));
+  waiter.WaitForError();
   histogram_tester().ExpectUniqueSample(
       SuffixedHistogram("HeavyAds.InterventionType2"),
       FrameData::HeavyAdStatus::kPeakCpu, 1);
@@ -1816,8 +1939,9 @@
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached,
                      (kMaxHeavyAdNetworkBytes / 1024) + 1);
 
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 0);
+  // Verify we did not trigger the intervention.
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
+
   histogram_tester().ExpectTotalCount(
       SuffixedHistogram("HeavyAds.DisallowedByBlocklist"), 0);
 }
@@ -1837,8 +1961,7 @@
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached,
                      (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1);
 
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 0);
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
 
   // Navigate again to trigger histograms.
   NavigateFrame(kNonAdUrl, main_frame);
@@ -1864,8 +1987,8 @@
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached,
                      (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1);
 
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 0);
+  // Verify we did not trigger the intervention.
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
 }
 
 TEST_F(AdsPageLoadMetricsObserverTest,
@@ -1886,11 +2009,15 @@
   RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame);
 
   // Add enough data to trigger the intervention.
+  ErrorPageWaiter waiter(web_contents());
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached,
                      (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1);
 
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("HeavyAds.InterventionType2"), 1);
+  EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame));
+  waiter.WaitForError();
+  histogram_tester().ExpectUniqueSample(
+      SuffixedHistogram("HeavyAds.InterventionType2"),
+      FrameData::HeavyAdStatus::kNetwork, 1);
 
   // This histogram should not be recorded when the blocklist is disabled.
   histogram_tester().ExpectTotalCount(
@@ -1913,10 +2040,13 @@
   RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame);
 
   // Add enough data to trigger the intervention.
+  ErrorPageWaiter waiter(web_contents());
   ResourceDataUpdate(ad_frame, ResourceCached::kNotCached,
                      (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1);
 
   // Verify the intervention triggered.
+  EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame));
+  waiter.WaitForError();
   histogram_tester().ExpectUniqueSample(
       SuffixedHistogram("HeavyAds.InterventionType2"),
       FrameData::HeavyAdStatus::kNetwork, 1);
@@ -1931,9 +2061,7 @@
                      (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1);
 
   // Verify the intervention did not occur again.
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("HeavyAds.InterventionType2"),
-      FrameData::HeavyAdStatus::kNetwork, 1);
+  EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame));
   histogram_tester().ExpectBucketCount(
       SuffixedHistogram("HeavyAds.DisallowedByBlocklist"), true, 1);
 }
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc
index 8548027..26e2c03f 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc
@@ -55,12 +55,12 @@
   return ResourceMimeType::kOther;
 }
 
-FrameData::FrameData(FrameTreeNodeId frame_tree_node_id,
+FrameData::FrameData(FrameTreeNodeId root_frame_tree_node_id,
                      int heavy_ad_network_threshold_noise)
-    : bytes_(0u),
+    : root_frame_tree_node_id_(root_frame_tree_node_id),
+      bytes_(0u),
       network_bytes_(0u),
       same_origin_bytes_(0u),
-      frame_tree_node_id_(frame_tree_node_id),
       origin_status_(OriginStatus::kUnknown),
       frame_navigated_(false),
       user_activation_status_(UserActivationStatus::kNoActivation),
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h
index 0f85a8b..d34a4c0 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h
@@ -118,7 +118,9 @@
   static ResourceMimeType GetResourceMimeType(
       const page_load_metrics::mojom::ResourceDataUpdatePtr& resource);
 
-  explicit FrameData(FrameTreeNodeId frame_tree_node_id,
+  // |root_frame_tree_node_id| is the root frame of the subtree that FrameData
+  // stores information for.
+  explicit FrameData(FrameTreeNodeId root_frame_tree_node_id,
                      int heavy_ad_network_threshold_noise);
   ~FrameData();
 
@@ -191,7 +193,9 @@
     return peak_window_start_time_;
   }
 
-  FrameTreeNodeId frame_tree_node_id() const { return frame_tree_node_id_; }
+  FrameTreeNodeId root_frame_tree_node_id() const {
+    return root_frame_tree_node_id_;
+  }
 
   OriginStatus origin_status() const { return origin_status_; }
 
@@ -253,6 +257,10 @@
   // computing the status.
   HeavyAdStatus ComputeHeavyAdStatus(bool use_network_threshold_noise) const;
 
+  // The frame tree node id of root frame of the subtree that |this| is
+  // tracking information for.
+  const FrameTreeNodeId root_frame_tree_node_id_;
+
   // The most recently updated timing received for this frame.
   page_load_metrics::mojom::PageLoadTimingPtr timing_;
 
@@ -310,7 +318,6 @@
 
   // The number of bytes that are same origin to the root ad frame.
   size_t same_origin_bytes_;
-  const FrameTreeNodeId frame_tree_node_id_;
   OriginStatus origin_status_;
   bool frame_navigated_;
   UserActivationStatus user_activation_status_;
diff --git a/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc b/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc
index 3a63105..0b818d2 100644
--- a/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc
+++ b/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc
@@ -254,8 +254,9 @@
   RunOriginTrialTestOnPMSequence(mojom::InterventionPolicy::kOptOut);
 }
 
+// Flaky. https://crbug.com/1014282
 IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
-                       PageFreezeOriginTrialOptOutOptIn) {
+                       DISABLED_PageFreezeOriginTrialOptOutOptIn) {
   ui_test_utils::NavigateToURL(
       browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
                                         kOriginTrialOptOutOptIn},
diff --git a/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc b/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc
index 987ea4c3..d5b4fe03 100644
--- a/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc
+++ b/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc
@@ -98,6 +98,10 @@
     content::RenderFrameHost* rfh) {
   auto navigation =
       content::NavigationSimulator::CreateRendererInitiated(GURL(url), rfh);
+  // These tests simulate loading events manually.
+  // TODO(ahemery): Consider refactoring to rely on load events dispatched by
+  // NavigationSimulator.
+  navigation->SetKeepLoading(true);
   navigation->Start();
   navigation->Commit();
 }
@@ -114,6 +118,11 @@
 TEST_F(LoadingPredictorTabHelperTest, MainFrameNavigationWithRedirects) {
   auto navigation = content::NavigationSimulator::CreateRendererInitiated(
       GURL("http://test.org"), main_rfh());
+  // The problem here is that mock_collector_ is a strict mock, which expects
+  // a particular set of loading events and fails when extra is present.
+  // TOOO(ahemery): Consider refactoring this to rely on loading events
+  // in NavigationSimulator.
+  navigation->SetKeepLoading(true);
   auto navigation_id = CreateNavigationID(GetTabID(), "http://test.org");
   EXPECT_CALL(*mock_collector_, RecordStartNavigation(navigation_id));
   navigation->Start();
@@ -143,6 +152,11 @@
 TEST_F(LoadingPredictorTabHelperTest, MainFrameNavigationFailed) {
   auto navigation = content::NavigationSimulator::CreateRendererInitiated(
       GURL("http://test.org"), main_rfh());
+  navigation->SetKeepLoading(true);
+  // The problem here is that mock_collector_ is a strict mock, which expects
+  // a particular set of loading events and fails when extra is present.
+  // TOOO(ahemery): Consider refactoring this to rely on loading events
+  // in NavigationSimulator.
   auto navigation_id = CreateNavigationID(GetTabID(), "http://test.org");
   EXPECT_CALL(*mock_collector_, RecordStartNavigation(navigation_id));
   EXPECT_CALL(*mock_collector_,
diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc
index 4d9be47..ef148eb 100644
--- a/chrome/browser/printing/print_view_manager.cc
+++ b/chrome/browser/printing/print_view_manager.cc
@@ -26,7 +26,6 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/webplugininfo.h"
 #include "ipc/ipc_message_macros.h"
-#include "mojo/public/cpp/bindings/associated_remote.h"
 #include "printing/buildflags/buildflags.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
 
@@ -90,9 +89,13 @@
   is_switching_to_system_dialog_ = true;
 
   SetPrintingRFH(print_preview_rfh_);
-  int32_t id = print_preview_rfh_->GetRoutingID();
-  return PrintNowInternal(print_preview_rfh_,
-                          std::make_unique<PrintMsg_PrintForSystemDialog>(id));
+
+  // Don't print / print preview interstitials or crashed tabs.
+  if (IsInterstitialOrCrashed())
+    return false;
+
+  GetPrintRenderFrame(print_preview_rfh_)->PrintForSystemDialog();
+  return true;
 }
 
 bool PrintViewManager::BasicPrint(content::RenderFrameHost* rfh) {
@@ -143,22 +146,20 @@
   if (print_preview_state_ == NOT_PREVIEWING)
     return;
 
-// Send ClosePrintPreview message for 'afterprint' event.
+// Send OnPrintPreviewDialogClosed message for 'afterprint' event.
 #if defined(OS_WIN)
-  // On Windows, we always send ClosePrintPreviewDialog. It's ok to dispatch
+  // On Windows, we always send OnPrintPreviewDialogClosed. It's ok to dispatch
   // 'afterprint' at this timing because system dialog printing on
   // Windows doesn't need the original frame.
   bool send_message = true;
 #else
-  // On non-Windows, we don't need to send ClosePrintPreviewDialog when we are
-  // switching to system dialog. PrintRenderFrameHelper is responsible to
+  // On non-Windows, we don't need to send OnPrintPreviewDialogClosed when we
+  // are switching to system dialog. PrintRenderFrameHelper is responsible to
   // dispatch 'afterprint' event.
   bool send_message = !is_switching_to_system_dialog_;
 #endif
-  if (send_message) {
-    print_preview_rfh_->Send(new PrintMsg_ClosePrintPreviewDialog(
-        print_preview_rfh_->GetRoutingID()));
-  }
+  if (send_message)
+    GetPrintRenderFrame(print_preview_rfh_)->OnPrintPreviewDialogClosed();
   is_switching_to_system_dialog_ = false;
 
   if (print_preview_state_ == SCRIPTED_PREVIEW) {
@@ -193,6 +194,21 @@
   PrintViewManagerBase::RenderFrameDeleted(render_frame_host);
 }
 
+const mojo::AssociatedRemote<printing::mojom::PrintRenderFrame>&
+PrintViewManager::GetPrintRenderFrame(content::RenderFrameHost* rfh) {
+  if (!print_render_frame_.is_bound()) {
+    rfh->GetRemoteAssociatedInterfaces()->GetInterface(&print_render_frame_);
+    print_render_frame_.set_disconnect_handler(
+        base::BindOnce(&PrintViewManager::OnPrintRenderFrameDisconnected,
+                       base::Unretained(this)));
+  }
+  return print_render_frame_;
+}
+
+void PrintViewManager::OnPrintRenderFrameDisconnected() {
+  print_render_frame_.reset();
+}
+
 bool PrintViewManager::PrintPreview(
     content::RenderFrameHost* rfh,
     mojom::PrintRendererAssociatedPtrInfo print_renderer,
@@ -207,10 +223,8 @@
   if (IsInterstitialOrCrashed())
     return false;
 
-  mojo::AssociatedRemote<mojom::PrintRenderFrame> print_render_frame;
-  rfh->GetRemoteAssociatedInterfaces()->GetInterface(&print_render_frame);
-  print_render_frame->InitiatePrintPreview(std::move(print_renderer),
-                                           has_selection);
+  GetPrintRenderFrame(rfh)->InitiatePrintPreview(std::move(print_renderer),
+                                                 has_selection);
 
   DCHECK(!print_preview_rfh_);
   print_preview_rfh_ = rfh;
diff --git a/chrome/browser/printing/print_view_manager.h b/chrome/browser/printing/print_view_manager.h
index 4cabe91d..76f9e7b 100644
--- a/chrome/browser/printing/print_view_manager.h
+++ b/chrome/browser/printing/print_view_manager.h
@@ -9,6 +9,7 @@
 #include "chrome/browser/printing/print_view_manager_base.h"
 #include "components/printing/common/print.mojom.h"
 #include "content/public/browser/web_contents_user_data.h"
+#include "mojo/public/cpp/bindings/associated_remote.h"
 #include "printing/buildflags/buildflags.h"
 
 namespace content {
@@ -79,6 +80,15 @@
 
   struct FrameDispatchHelper;
 
+  // Helper method to fetch the PrintRenderFrame associated remote interface
+  // pointer.
+  const mojo::AssociatedRemote<printing::mojom::PrintRenderFrame>&
+  GetPrintRenderFrame(content::RenderFrameHost* rfh);
+
+  // Resets the PrintRenderFrame associated remote when it's disconnected from
+  // its receiver.
+  void OnPrintRenderFrameDisconnected();
+
   // Helper method for PrintPreviewNow() and PrintPreviewWithRenderer().
   // Initiate print preview of the current document by first notifying the
   // renderer. Since this happens asynchronously, the print preview dialog
@@ -117,6 +127,10 @@
   // flag is true between PrintForSystemDialogNow() and PrintPreviewDone().
   bool is_switching_to_system_dialog_ = false;
 
+  // Used to transmit mojom interface method calls to the PrintRenderFrame
+  // associated remote.
+  mojo::AssociatedRemote<printing::mojom::PrintRenderFrame> print_render_frame_;
+
   WEB_CONTENTS_USER_DATA_KEY_DECL();
 
   DISALLOW_COPY_AND_ASSIGN(PrintViewManager);
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc
index 9085b98..d2ac0790 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.cc
+++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -532,7 +532,7 @@
 
 content::NativeFileSystemPermissionContext*
 OffTheRecordProfileImpl::GetNativeFileSystemPermissionContext() {
-  return NativeFileSystemPermissionContextFactory::GetForProfile(this).get();
+  return NativeFileSystemPermissionContextFactory::GetForProfile(this);
 }
 
 bool OffTheRecordProfileImpl::IsSameProfile(Profile* profile) {
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index f5a7af2..2ecafc3 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -1345,7 +1345,7 @@
 
 content::NativeFileSystemPermissionContext*
 ProfileImpl::GetNativeFileSystemPermissionContext() {
-  return NativeFileSystemPermissionContextFactory::GetForProfile(this).get();
+  return NativeFileSystemPermissionContextFactory::GetForProfile(this);
 }
 
 bool ProfileImpl::IsSameProfile(Profile* profile) {
diff --git a/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js b/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js
index 18acfee..a3d1e88b 100644
--- a/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js
+++ b/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js
@@ -306,11 +306,14 @@
     // sorted by user preference of constant fps.
     const getFpses = (r) => {
       let constFpses = [null];
-      if (this.constFpsInfo_[deviceId][r].includes(30) &&
-          this.constFpsInfo_[deviceId][r].includes(60)) {
-        const prefFps =
-            this.prefFpses_[deviceId] && this.prefFpses_[deviceId][r] || 30;
-        constFpses = prefFps == 30 ? [30, 60] : [60, 30];
+      if (this.constFpsInfo_[deviceId][r].includes(30)) {
+        if (this.constFpsInfo_[deviceId][r].includes(60)) {
+          const prefFps =
+              this.prefFpses_[deviceId] && this.prefFpses_[deviceId][r] || 30;
+          constFpses = prefFps == 30 ? [30, 60] : [60, 30];
+        } else {
+          constFpses = [30];
+        }
       }
       return constFpses.map((fps) => [...r, fps]);
     };
diff --git a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
index 5d06cda7..8c963f0 100644
--- a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
+++ b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
@@ -523,7 +523,7 @@
       return;
     }
     const config = this.getDefaultConfigProperties_();
-    config.proxySetings = event.detail;
+    config.proxySettings = event.detail;
     this.setMojoNetworkProperties_(config);
   },
 
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js
index c0f3295..e48f39cd 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.js
+++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -1269,6 +1269,7 @@
       // this forwards key modifiers. This enables Shift+Enter to open a match
       // in a new window, for example.
       matchEls[selected].dispatchEvent(new MouseEvent('click', e));
+      e.preventDefault();
     }
     return;
   }
@@ -1494,14 +1495,15 @@
   const realboxWrapper = $(IDS.REALBOX_INPUT_WRAPPER);
   realboxWrapper.appendChild(realboxMatchesEl);
 
-  const hasMatches = matches.length > 0;
-  realboxWrapper.classList.toggle(CLASSES.SHOW_MATCHES, hasMatches);
-
-  if (hasMatches) {
+  if (matches.length > 0) {
+    realboxWrapper.classList.add(CLASSES.SHOW_MATCHES);
     realboxWrapper.addEventListener('keydown', onRealboxKeyDown);
+    autocompleteMatches = matches;
+  } else {
+    // removesEventListener('keydown', onRealboxKeyDown) and also clears
+    // |autocompleteMatches|.
+    hideRealboxMatches();
   }
-
-  autocompleteMatches = matches;
 }
 
 /**
diff --git a/chrome/browser/resources/settings/autofill_page/payments_section.html b/chrome/browser/resources/settings/autofill_page/payments_section.html
index 55257fa..2109d33 100644
--- a/chrome/browser/resources/settings/autofill_page/payments_section.html
+++ b/chrome/browser/resources/settings/autofill_page/payments_section.html
@@ -52,7 +52,7 @@
           label="$i18n{enableCreditCardFIDOAuthLabel}"
           sub-label="$i18n{enableCreditCardFIDOAuthSublabel}"
           pref="{{prefs.autofill.credit_card_fido_auth_enabled}}"
-          on-click="setFIDOAuthenticationEnabledState_">
+          on-change="setFIDOAuthenticationEnabledState_">
       </settings-toggle-button>
     </template>
     <template is="dom-if"
diff --git a/chrome/browser/task_manager/providers/service_worker_task_provider.cc b/chrome/browser/task_manager/providers/service_worker_task_provider.cc
index b4f9c7d..b6545a1 100644
--- a/chrome/browser/task_manager/providers/service_worker_task_provider.cc
+++ b/chrome/browser/task_manager/providers/service_worker_task_provider.cc
@@ -13,7 +13,6 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
 #include "content/public/browser/render_process_host.h"
-#include "content/public/browser/service_worker_context.h"
 #include "content/public/browser/service_worker_running_info.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/common/child_process_host.h"
@@ -23,9 +22,7 @@
 
 namespace task_manager {
 
-ServiceWorkerTaskProvider::ServiceWorkerTaskProvider()
-    : scoped_context_observer_(this) {}
-
+ServiceWorkerTaskProvider::ServiceWorkerTaskProvider() = default;
 ServiceWorkerTaskProvider::~ServiceWorkerTaskProvider() = default;
 
 Task* ServiceWorkerTaskProvider::GetTaskOfUrlRequest(int child_id,
diff --git a/chrome/browser/task_manager/providers/service_worker_task_provider.h b/chrome/browser/task_manager/providers/service_worker_task_provider.h
index 54f95f8..05ac7496 100644
--- a/chrome/browser/task_manager/providers/service_worker_task_provider.h
+++ b/chrome/browser/task_manager/providers/service_worker_task_provider.h
@@ -14,12 +14,9 @@
 #include "chrome/browser/task_manager/providers/task_provider.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
+#include "content/public/browser/service_worker_context.h"
 #include "content/public/browser/service_worker_context_observer.h"
 
-namespace content {
-class ServiceWorkerContext;
-}
-
 namespace task_manager {
 
 // This provides tasks that describe running service workers
@@ -82,7 +79,7 @@
 
   ScopedObserver<content::ServiceWorkerContext,
                  content::ServiceWorkerContextObserver>
-      scoped_context_observer_;
+      scoped_context_observer_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerTaskProvider);
 };
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 6c4ca84b..8776b47 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -3516,6 +3516,8 @@
       "app_list/search/common/file_icon_util.h",
       "app_list/search/common/url_icon_source.cc",
       "app_list/search/common/url_icon_source.h",
+      "app_list/search/cros_action_history/cros_action_recorder.cc",
+      "app_list/search/cros_action_history/cros_action_recorder.h",
       "app_list/search/drive_quick_access_provider.cc",
       "app_list/search/drive_quick_access_provider.h",
       "app_list/search/drive_quick_access_result.cc",
@@ -3591,6 +3593,7 @@
       "//ash/app_list",
       "//ash/public/cpp/app_list/vector_icons",
       "//ash/resources/vector_icons",
+      "//chrome/browser/ui/app_list/search/cros_action_history:cros_action_proto",
       "//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_event_logger_proto",
       "//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_predictor_proto",
       "//chrome/browser/ui/app_list/search/search_result_ranker:app_list_launch_recorder_proto",
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn b/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn
new file mode 100644
index 0000000..19d6c058
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn
@@ -0,0 +1,11 @@
+# Copyright 2018 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("//third_party/protobuf/proto_library.gni")
+
+proto_library("cros_action_proto") {
+  sources = [
+    "cros_action.proto",
+  ]
+}
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/OWNERS b/chrome/browser/ui/app_list/search/cros_action_history/OWNERS
new file mode 100644
index 0000000..bea249a
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/cros_action_history/OWNERS
@@ -0,0 +1,4 @@
+charleszhao@chromium.org
+jiameng@chromium.org
+xiyuan@chromium.org
+tby@chromium.org
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action.proto b/chrome/browser/ui/app_list/search/cros_action_history/cros_action.proto
new file mode 100644
index 0000000..08b1803a
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action.proto
@@ -0,0 +1,33 @@
+// Copyright 2019 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.
+
+syntax = "proto2";
+
+option optimize_for = LITE_RUNTIME;
+
+package app_list;
+
+// CrOSActionProto records one individual action.
+message CrOSActionProto {
+  // Name of the action.
+  optional string action_name = 1;
+  // Time of the action.
+  optional int64 secs_since_epoch = 2;
+
+  // CrOSActionConditionProto records other features that may useful for this
+  // action.
+  message CrOSActionConditionProto {
+    // name of the condition.
+    optional string name = 1;
+    // value of the condition.
+    optional int32 value = 2;
+  }
+
+  repeated CrOSActionConditionProto conditions = 3;
+}
+
+// A history consists a list of actions.
+message CrOSActionHistoryProto {
+  repeated CrOSActionProto actions = 1;
+}
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.cc b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.cc
new file mode 100644
index 0000000..9fec75b
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.cc
@@ -0,0 +1,126 @@
+// Copyright 2019 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 "chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h"
+
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/files/important_file_writer.h"
+#include "base/metrics/metrics_hashes.h"
+#include "base/no_destructor.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/task/post_task.h"
+#include "base/threading/scoped_blocking_call.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/app_list/search/cros_action_history/cros_action.pb.h"
+
+namespace app_list {
+namespace {
+
+constexpr int kSecondsPerDay = 86400;
+
+void SaveToDiskOnWorkerThread(const CrOSActionHistoryProto actions,
+                              const base::FilePath action_filepath) {
+  // Loads proto string from local disk.
+  std::string proto_str;
+  if (!base::ReadFileToString(action_filepath, &proto_str))
+    proto_str.clear();
+
+  CrOSActionHistoryProto actions_to_write;
+  if (!actions_to_write.ParseFromString(proto_str))
+    actions_to_write.Clear();
+
+  actions_to_write.MergeFrom(actions);
+  const std::string proto_str_to_write = actions_to_write.SerializeAsString();
+
+  // Create directory if it's not there yet.
+  const bool create_directory_sucess =
+      base::CreateDirectory(action_filepath.DirName());
+  DCHECK(create_directory_sucess)
+      << "Error create directory for " << action_filepath;
+  const bool write_success = base::ImportantFileWriter::WriteFileAtomically(
+      action_filepath, proto_str_to_write, "CrOSActionHistory");
+  DCHECK(write_success) << "Error writing action_file " << action_filepath;
+}
+
+}  // namespace
+
+constexpr char CrOSActionRecorder::kActionHistoryDir[];
+constexpr base::TimeDelta CrOSActionRecorder::kSaveInternal;
+
+CrOSActionRecorder::CrOSActionRecorder()
+    : should_log_(false),
+      should_hash_(true),
+      last_save_timestamp_(base::Time::Now()) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  Profile* profile = ProfileManager::GetPrimaryUserProfile();
+  if (profile) {
+    profile_path_ = profile->GetPath();
+  } else {
+    // If profile_path_ is not set, then there is no point to record anything.
+    should_log_ = false;
+  }
+
+  task_runner_ = base::CreateSequencedTaskRunner(
+      {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock(),
+       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+}
+
+CrOSActionRecorder::~CrOSActionRecorder() = default;
+
+CrOSActionRecorder* CrOSActionRecorder::GetCrosActionRecorder() {
+  static base::NoDestructor<CrOSActionRecorder> recorder;
+  return recorder.get();
+}
+
+void CrOSActionRecorder::RecordAction(
+    const CrOSAction& action,
+    const std::vector<std::pair<std::string, int>>& conditions) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (!should_log_)
+    return;
+
+  CrOSActionProto& cros_action_proto = *actions_.add_actions();
+
+  // Record action.
+  cros_action_proto.set_action_name(
+      MaybeHashed(std::get<0>(action), should_hash_));
+  cros_action_proto.set_secs_since_epoch(base::Time::Now().ToDoubleT());
+
+  // Record conditions.
+  for (const auto& pair : conditions) {
+    auto& condition = *cros_action_proto.add_conditions();
+    condition.set_name(MaybeHashed(pair.first, should_hash_));
+    condition.set_value(pair.second);
+  }
+
+  // May flush to disk.
+  MaybeFlushToDisk();
+}
+
+void CrOSActionRecorder::MaybeFlushToDisk() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  const base::Time now = base::Time::Now();
+  if (now - last_save_timestamp_ >= kSaveInternal) {
+    last_save_timestamp_ = now;
+
+    // Writes the predictor proto to disk asynchronously.
+    const std::string day = base::NumberToString(
+        static_cast<int>(now.ToDoubleT() / kSecondsPerDay));
+    const base::FilePath action_filepath =
+        profile_path_.Append(CrOSActionRecorder::kActionHistoryDir).Append(day);
+
+    task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(&SaveToDiskOnWorkerThread,
+                                  std::move(actions_), action_filepath));
+    actions_.Clear();
+  }
+}
+
+std::string CrOSActionRecorder::MaybeHashed(const std::string& input,
+                                            const bool should_hash) {
+  return should_hash ? base::NumberToString(base::HashMetricName(input))
+                     : input;
+}
+}  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h
new file mode 100644
index 0000000..b6a9a3fa
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h
@@ -0,0 +1,81 @@
+// Copyright 2019 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 CHROME_BROWSER_UI_APP_LIST_SEARCH_CROS_ACTION_HISTORY_CROS_ACTION_RECORDER_H_
+#define CHROME_BROWSER_UI_APP_LIST_SEARCH_CROS_ACTION_HISTORY_CROS_ACTION_RECORDER_H_
+
+#include <cstdint>
+#include <string>
+#include <tuple>
+#include <vector>
+
+#include "base/files/file_path.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/sequenced_task_runner.h"
+#include "base/time/time.h"
+#include "chrome/browser/ui/app_list/search/cros_action_history/cros_action.pb.h"
+
+namespace app_list {
+
+class CrOSActionHistoryProto;
+
+// CrOSActionRecorder is a singleton that used to record any CrOSAction.
+// CrOSAction may contains:
+//   (1) App-launchings.
+//   (2) File-openings.
+//   (3) Settings.
+//   (4) Tab-navigations.
+// and so on.
+class CrOSActionRecorder {
+ public:
+  using CrOSActionName = std::string;
+  using CrOSAction = std::tuple<CrOSActionName>;
+
+  CrOSActionRecorder();
+  ~CrOSActionRecorder();
+  // Get the pointer of the singleton.
+  static CrOSActionRecorder* GetCrosActionRecorder();
+
+  // Record a user |action| with |conditions|.
+  void RecordAction(
+      const CrOSAction& action,
+      const std::vector<std::pair<std::string, int>>& conditions = {});
+
+ private:
+  friend class CrOSActionRecorderTest;
+
+  // kSaveInternal controls how often we save the action history to disk.
+  static constexpr base::TimeDelta kSaveInternal =
+      base::TimeDelta::FromHours(1);
+  // The sub-directory in profile path where the action history is stored.
+  static constexpr char kActionHistoryDir[] = "cros_action_history/";
+
+  // Saves the current |actions_| to disk and clear it when certain
+  // criteria is met.
+  void MaybeFlushToDisk();
+
+  // Hashes the |input| if |should_hash| is true; otherwise return |input|.
+  static std::string MaybeHashed(const std::string& input, bool should_hash);
+
+  // Controls whether the logging is enabled.
+  bool should_log_ = false;
+  // Controls whether to hash the action and condition names before log.
+  bool should_hash_ = true;
+  // The timestamp of last save to disk.
+  base::Time last_save_timestamp_;
+  // A list of actions since last save.
+  CrOSActionHistoryProto actions_;
+  // Profile path to save the actions.
+  base::FilePath profile_path_;
+
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+
+  DISALLOW_COPY_AND_ASSIGN(CrOSActionRecorder);
+};
+
+}  // namespace app_list
+
+#endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_CROS_ACTION_HISTORY_CROS_ACTION_RECORDER_H_
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc
new file mode 100644
index 0000000..cc05f54
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc
@@ -0,0 +1,204 @@
+// Copyright 2019 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 "chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/metrics/metrics_hashes.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/test/scoped_mock_clock_override.h"
+#include "base/test/task_environment.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace app_list {
+namespace {
+
+constexpr int kSecondsPerDay = 86400;
+// Condition values start from this number for tests.
+constexpr int kConditionValue = 11;
+
+}  // namespace
+
+// Test functions of CrOSActionRecorder.
+class CrOSActionRecorderTest : public testing::Test {
+ protected:
+  void SetUp() override {
+    Test::SetUp();
+    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+    profile_path_ = temp_dir_.GetPath();
+    actions_ = {"Action0", "Action1", "Action2"};
+    conditions_ = {"Condition0", "Condition1", "Condition2"};
+
+    save_internal_secs_ = CrOSActionRecorder::kSaveInternal.InSeconds();
+
+    // Set time_ to be base::Time::UnixEpoch().
+    time_.Advance(base::TimeDelta::FromSeconds(11612937600));
+
+    // Reset the CrOSActionRecorder to be default.
+    CrOSActionRecorder::GetCrosActionRecorder()->actions_.Clear();
+    CrOSActionRecorder::GetCrosActionRecorder()->last_save_timestamp_ =
+        base::Time::UnixEpoch();
+    CrOSActionRecorder::GetCrosActionRecorder()->should_log_ = false;
+    CrOSActionRecorder::GetCrosActionRecorder()->should_hash_ = true;
+    CrOSActionRecorder::GetCrosActionRecorder()->profile_path_ = profile_path_;
+  }
+
+  CrOSActionHistoryProto GetCrOSActionHistory() {
+    return CrOSActionRecorder::GetCrosActionRecorder()->actions_;
+  }
+
+  void EnableLog() {
+    CrOSActionRecorder::GetCrosActionRecorder()->should_log_ = true;
+  }
+
+  void DisableHash() {
+    CrOSActionRecorder::GetCrosActionRecorder()->should_hash_ = false;
+  }
+
+  // Read and Parse log from |day|-th file.
+  CrOSActionHistoryProto ReadLog(const int day) {
+    const base::FilePath action_file_path =
+        profile_path_.Append(CrOSActionRecorder::kActionHistoryDir)
+            .Append(base::NumberToString(day));
+    std::string proto_str;
+    CHECK(base::ReadFileToString(action_file_path, &proto_str));
+    CrOSActionHistoryProto actions_history;
+    CHECK(actions_history.ParseFromString(proto_str));
+    return actions_history;
+  }
+
+  // Expects |action| to be actions_[i], with certain features.
+  void ExpectCrOSAction(const CrOSActionProto& action,
+                        const int i,
+                        const int64_t secs_since_epoch,
+                        const bool should_hash = true) {
+    EXPECT_EQ(action.action_name(),
+              CrOSActionRecorder::MaybeHashed(actions_[i], should_hash));
+    EXPECT_EQ(action.secs_since_epoch(), secs_since_epoch);
+    EXPECT_EQ(action.conditions_size(), 1);
+    const CrOSActionProto::CrOSActionConditionProto& condition =
+        action.conditions(0);
+    EXPECT_EQ(condition.name(),
+              CrOSActionRecorder::MaybeHashed(conditions_[i], should_hash));
+    EXPECT_EQ(condition.value(), i + kConditionValue);
+  }
+
+  void Wait() { task_environment_.RunUntilIdle(); }
+
+  std::vector<std::string> actions_;
+  std::vector<std::string> conditions_;
+  base::ScopedTempDir temp_dir_;
+  base::FilePath profile_path_;
+  int64_t save_internal_secs_ = 0;
+  base::ScopedMockClockOverride time_;
+  base::test::TaskEnvironment task_environment_{
+      base::test::TaskEnvironment::MainThreadType::DEFAULT,
+      base::test::TaskEnvironment::ThreadPoolExecutionMode::QUEUED};
+};
+
+// Log is disabled by default.
+TEST_F(CrOSActionRecorderTest, NoLogAsDefault) {
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction({actions_[0]});
+  EXPECT_TRUE(GetCrOSActionHistory().actions().empty());
+}
+
+// Log is hashed by default.
+TEST_F(CrOSActionRecorderTest, HashActionNameByDefault) {
+  EnableLog();
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction(
+      {actions_[0]}, {{conditions_[0], kConditionValue}});
+  const CrOSActionHistoryProto& action_history = GetCrOSActionHistory();
+  EXPECT_EQ(action_history.actions_size(), 1);
+
+  ExpectCrOSAction(action_history.actions(0), 0, 0);
+}
+
+// DisableHash will log action name and condition name explicitly.
+TEST_F(CrOSActionRecorderTest, DisableHashToLogExplicitly) {
+  EnableLog();
+  DisableHash();
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction(
+      {actions_[0]}, {{conditions_[0], kConditionValue}});
+  const CrOSActionHistoryProto& action_history = GetCrOSActionHistory();
+  EXPECT_EQ(action_history.actions_size(), 1);
+  ExpectCrOSAction(action_history.actions(0), 0, 0, false);
+}
+
+// Check a new file is written every day for expected values.
+TEST_F(CrOSActionRecorderTest, WriteToNewFileEveryDay) {
+  EnableLog();
+  time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_));
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction(
+      {actions_[0]}, {{conditions_[0], kConditionValue}});
+  Wait();
+
+  // Expect the GetCrOSActionHistory() is already cleared.
+  EXPECT_TRUE(GetCrOSActionHistory().actions().empty());
+  // Expect the log to have correct values.
+  const CrOSActionHistoryProto action_history_0 = ReadLog(0);
+  EXPECT_EQ(action_history_0.actions_size(), 1);
+  ExpectCrOSAction(action_history_0.actions(0), 0, save_internal_secs_);
+
+  // Advance for 1 day.
+  time_.Advance(base::TimeDelta::FromSeconds(kSecondsPerDay));
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction(
+      {actions_[1]}, {{conditions_[1], kConditionValue + 1}});
+  Wait();
+
+  // Expect the GetCrOSActionHistory() is already cleared.
+  EXPECT_TRUE(GetCrOSActionHistory().actions().empty());
+  // Expect the new log file to have correct values.
+  const CrOSActionHistoryProto action_history_1 = ReadLog(1);
+  EXPECT_EQ(action_history_1.actions_size(), 1);
+  ExpectCrOSAction(action_history_1.actions(0), 1,
+                   save_internal_secs_ + kSecondsPerDay);
+}
+
+// Check that the result is appended to previous log within a day.
+TEST_F(CrOSActionRecorderTest, AppendToFileEverySaveInAday) {
+  EnableLog();
+  time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_));
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction(
+      {actions_[0]}, {{conditions_[0], kConditionValue}});
+  Wait();
+
+  // Expect the GetCrOSActionHistory() is already cleared.
+  EXPECT_TRUE(GetCrOSActionHistory().actions().empty());
+  // Expect the log has correct values.
+  const CrOSActionHistoryProto action_history_0 = ReadLog(0);
+  EXPECT_EQ(action_history_0.actions_size(), 1);
+  ExpectCrOSAction(action_history_0.actions(0), 0, save_internal_secs_);
+
+  // Advance for 1 kSaveInternal.
+  time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_));
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction(
+      {actions_[1]}, {{conditions_[1], kConditionValue + 1}});
+  Wait();
+
+  // Expect the GetCrOSActionHistory() is already cleared.
+  EXPECT_TRUE(GetCrOSActionHistory().actions().empty());
+  // Expect the log to have correct values (two actions).
+  const CrOSActionHistoryProto action_history_1 = ReadLog(0);
+  EXPECT_EQ(action_history_1.actions_size(), 2);
+  ExpectCrOSAction(action_history_1.actions(0), 0, save_internal_secs_);
+  ExpectCrOSAction(action_history_1.actions(1), 1, save_internal_secs_ * 2);
+
+  // Advance for 3 kSaveInternal.
+  time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_ * 3));
+  CrOSActionRecorder::GetCrosActionRecorder()->RecordAction(
+      {actions_[2]}, {{conditions_[2], kConditionValue + 2}});
+  Wait();
+
+  // Expect the GetCrOSActionHistory() is already cleared.
+  EXPECT_TRUE(GetCrOSActionHistory().actions().empty());
+  // Expect the log to have correct values (three actions).
+  const CrOSActionHistoryProto action_history_2 = ReadLog(0);
+  EXPECT_EQ(action_history_2.actions_size(), 3);
+  ExpectCrOSAction(action_history_1.actions(0), 0, save_internal_secs_);
+  ExpectCrOSAction(action_history_1.actions(1), 1, save_internal_secs_ * 2);
+  ExpectCrOSAction(action_history_2.actions(2), 2, save_internal_secs_ * 5);
+}
+
+}  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
index e3fd40cd..b07b6d8 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
@@ -210,7 +210,8 @@
           config, chromeos::ProfileHelper::IsEphemeralUserProfile(profile_));
     } else if (GetFieldTrialParamByFeatureAsBool(
                    app_list_features::kEnableQueryBasedMixedTypesRanker,
-                   "use_aggregated_model", false)) {
+                   "use_aggregated_model", false) ||
+               app_list_features::IsAggregatedMlSearchRankingEnabled()) {
       use_aggregated_search_ranking_inference_ = true;
     } else {
       // Item ranker model.
diff --git a/chrome/browser/ui/ash/network/network_state_notifier.cc b/chrome/browser/ui/ash/network/network_state_notifier.cc
index 46af5b6..21fd9e2e 100644
--- a/chrome/browser/ui/ash/network/network_state_notifier.cc
+++ b/chrome/browser/ui/ash/network/network_state_notifier.cc
@@ -70,13 +70,14 @@
   return kNotificationWifiOffIcon;
 }
 
-void ShowErrorNotification(const std::string& service_path,
+// |identifier| may be a service path or guid.
+void ShowErrorNotification(const std::string& identifier,
                            const std::string& notification_id,
                            const std::string& network_type,
                            const base::string16& title,
                            const base::string16& message,
                            const base::Closure& callback) {
-  NET_LOG(ERROR) << "ShowErrorNotification: " << service_path << ": "
+  NET_LOG(ERROR) << "ShowErrorNotification: " << identifier << ": "
                  << base::UTF16ToUTF8(title);
   std::unique_ptr<message_center::Notification> notification =
       ash::CreateSystemNotification(
@@ -160,7 +161,7 @@
       NetworkHandler::Get()->network_state_handler()->GetNetworkState(
           service_path);
   if (network && network->type() == shill::kTypeVPN)
-    connected_vpn_guid_.clear();
+    connected_vpn_.reset();
 
   RemoveConnectNotification();
 }
@@ -188,18 +189,30 @@
       NetworkHandler::Get()->network_state_handler()->GetNetworkState(
           service_path);
   if (network && network->type() == shill::kTypeVPN)
-    connected_vpn_guid_.clear();
+    connected_vpn_.reset();
 }
 
 void NetworkStateNotifier::ActiveNetworksChanged(
     const std::vector<const NetworkState*>& active_networks) {
+  const NetworkState* active_vpn = nullptr;
   std::string active_non_vpn_network_guid;
+  // NOTE: The list of 'active' networks includes disconnected networks that
+  // were connected or connecting.
   for (const auto* network : active_networks) {
-    if (network->type() == shill::kTypeVPN)
-      UpdateVpnConnectionState(network);
-    else if (active_non_vpn_network_guid.empty())
-      active_non_vpn_network_guid = network->guid();
+    if (network->type() == shill::kTypeVPN) {
+      // Make sure that if there is an edge case with two active VPNs that we
+      // track the first active one.
+      if (!active_vpn)
+        active_vpn = network;
+    } else if (active_non_vpn_network_guid.empty()) {
+      // We are only interested in the "default" (first active) non virtual
+      // network.
+      if (network->IsConnectingOrConnected())
+        active_non_vpn_network_guid = network->guid();
+    }
   }
+  UpdateVpnConnectionState(active_vpn);
+
   // If the default network changes, allow the out of credits notification to be
   // shown again. A delay prevents the notification from being shown too
   // frequently (see below).
@@ -219,16 +232,41 @@
   UpdateCellularActivating(network);
 }
 
-void NetworkStateNotifier::UpdateVpnConnectionState(const NetworkState* vpn) {
-  if (vpn->guid() == connected_vpn_guid_) {
-    if (!vpn->IsConnectingOrConnected()) {
-      if (vpn->GetVpnProviderType() != shill::kProviderArcVpn) {
-        ShowVpnDisconnectedNotification(vpn);
-      }
-      connected_vpn_guid_.clear();
+void NetworkStateNotifier::UpdateVpnConnectionState(
+    const NetworkState* active_vpn) {
+  if (!active_vpn || !active_vpn->IsConnectingOrConnected()) {
+    // No connecting or connected VPN. If we were tracking a connected VPN,
+    // show a notification.
+    if (connected_vpn_) {
+      ShowVpnDisconnectedNotification(connected_vpn_.get());
+      connected_vpn_.reset();
     }
-  } else if (vpn->IsConnectedState()) {
-    connected_vpn_guid_ = vpn->guid();
+    return;
+  }
+  if (connected_vpn_ && active_vpn->guid() == connected_vpn_->guid) {
+    // The connected VPN is unchanged and still connected or connecting. If the
+    // VPN goes from connected -> connecting -> connected, we do not want to
+    // show a notification.
+    return;
+  }
+
+  // Do not track ARC VPNs for showing disconnect notifications. Also make sure
+  // |connected_vpn_| is cleared when connected to an ARC VPN.
+  if (active_vpn->GetVpnProviderType() == shill::kProviderArcVpn) {
+    connected_vpn_.reset();
+    return;
+  }
+
+  // If we are connected to a new VPN, track it as the connected VPN. Do not
+  // show a notification, even if we were tracking a different connected VPN,
+  // since we are still connected to a VPN (i.e. just replace |connected_vpn_|).
+  if (active_vpn->IsConnectedState()) {
+    connected_vpn_ =
+        std::make_unique<VpnDetails>(active_vpn->guid(), active_vpn->name());
+  } else {
+    // |active_vpn| is connecting. Clear |connected_vpn_| so that we do not
+    // show a notification for the previous VPN.
+    connected_vpn_.reset();
   }
 }
 
@@ -453,7 +491,7 @@
 
   base::string16 error_msg;
   if (!network_error_details.empty()) {
-    // network_name should't be empty if network_error_details is set.
+    // network_name shouldn't be empty if network_error_details is set.
     error_msg = l10n_util::GetStringFUTF16(
         IDS_NETWORK_CONNECTION_ERROR_MESSAGE_WITH_SERVER_MESSAGE,
         base::UTF8ToUTF16(network_name), error,
@@ -478,16 +516,16 @@
                  weak_ptr_factory_.GetWeakPtr(), guid));
 }
 
-void NetworkStateNotifier::ShowVpnDisconnectedNotification(
-    const NetworkState* vpn) {
+void NetworkStateNotifier::ShowVpnDisconnectedNotification(VpnDetails* vpn) {
+  DCHECK(vpn);
   base::string16 error_msg = l10n_util::GetStringFUTF16(
-      IDS_NETWORK_VPN_CONNECTION_LOST_BODY, base::UTF8ToUTF16(vpn->name()));
+      IDS_NETWORK_VPN_CONNECTION_LOST_BODY, base::UTF8ToUTF16(vpn->name));
   ShowErrorNotification(
-      vpn->path(), kNetworkConnectNotificationId, shill::kTypeVPN,
+      vpn->guid, kNetworkConnectNotificationId, shill::kTypeVPN,
       l10n_util::GetStringUTF16(IDS_NETWORK_VPN_CONNECTION_LOST_TITLE),
       error_msg,
       base::Bind(&NetworkStateNotifier::ShowNetworkSettings,
-                 weak_ptr_factory_.GetWeakPtr(), vpn->guid()));
+                 weak_ptr_factory_.GetWeakPtr(), vpn->guid));
 }
 
 void NetworkStateNotifier::ShowNetworkSettings(const std::string& network_id) {
diff --git a/chrome/browser/ui/ash/network/network_state_notifier.h b/chrome/browser/ui/ash/network/network_state_notifier.h
index 143c7a2..30daf85 100644
--- a/chrome/browser/ui/ash/network/network_state_notifier.h
+++ b/chrome/browser/ui/ash/network/network_state_notifier.h
@@ -55,6 +55,13 @@
   static const char kNetworkOutOfCreditsNotificationId[];
 
  private:
+  struct VpnDetails {
+    VpnDetails(const std::string& guid, const std::string& name)
+        : guid(guid), name(name) {}
+    std::string guid;
+    std::string name;
+  };
+
   // NetworkConnectionObserver
   void ConnectToNetworkRequested(const std::string& service_path) override;
   void ConnectSucceeded(const std::string& service_path) override;
@@ -80,7 +87,7 @@
       const std::string& error_name,
       const std::string& service_path,
       const base::DictionaryValue& shill_properties);
-  void ShowVpnDisconnectedNotification(const NetworkState* vpn);
+  void ShowVpnDisconnectedNotification(VpnDetails* vpn);
 
   // Removes any existing connect notifications.
   void RemoveConnectNotification();
@@ -89,7 +96,7 @@
   bool UpdateDefaultNetwork(const NetworkState* network);
 
   // Helper methods to update state and check for notifications.
-  void UpdateVpnConnectionState(const NetworkState* vpn);
+  void UpdateVpnConnectionState(const NetworkState* active_vpn);
   void UpdateCellularOutOfCredits();
   void UpdateCellularActivating(const NetworkState* cellular);
 
@@ -99,9 +106,9 @@
   // Shows the mobile setup dialog for |network_id|.
   void ShowMobileSetup(const std::string& network_id);
 
-  // Set to the GUID of the connected VPN network if any, otherwise empty.
-  // Used for displaying VPN disconnected notification.
-  std::string connected_vpn_guid_;
+  // The details of the connected VPN network if any, otherwise null.
+  // Used for displaying the VPN disconnected notification.
+  std::unique_ptr<VpnDetails> connected_vpn_;
 
   // Tracks state for out of credits notification.
   bool did_show_out_of_credits_ = false;
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index d0dd501..ea919c4 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -2320,10 +2320,6 @@
   if (tab_strip_model_->GetIndexOfWebContents(source) == TabStripModel::kNoTab)
     return;
 
-  // We ignore |INVALIDATE_TYPE_AUDIO| since we subscribe to
-  // RecentlyAudibleHelper via |OnTabAudibilityChanged()|.
-  changed_flags &= ~content::INVALIDATE_TYPE_AUDIO;
-
   // Do some synchronous updates.
   if (changed_flags & content::INVALIDATE_TYPE_URL) {
     if (source == tab_strip_model_->GetActiveWebContents()) {
@@ -2413,8 +2409,8 @@
     }
 
     // Updates that don't depend upon the selected state go here.
-    if (flags &
-        (content::INVALIDATE_TYPE_TAB | content::INVALIDATE_TYPE_TITLE)) {
+    if (flags & (content::INVALIDATE_TYPE_TAB | content::INVALIDATE_TYPE_TITLE |
+                 content::INVALIDATE_TYPE_AUDIO)) {
       tab_strip_model_->UpdateWebContentsStateAt(
           tab_strip_model_->GetIndexOfWebContents(contents),
           TabChangeType::kAll);
@@ -2592,16 +2588,10 @@
     zoom::ZoomController::FromWebContents(web_contents)->AddObserver(this);
     content_translate_driver->AddObserver(this);
     BookmarkTabHelper::FromWebContents(web_contents)->AddObserver(this);
-    audibility_subscriptions_[web_contents] =
-        RecentlyAudibleHelper::FromWebContents(web_contents)
-            ->RegisterCallback(
-                base::BindRepeating(&Browser::OnTabAudibilityChanged,
-                                    base::Unretained(this), web_contents));
   } else {
     zoom::ZoomController::FromWebContents(web_contents)->RemoveObserver(this);
     content_translate_driver->RemoveObserver(this);
     BookmarkTabHelper::FromWebContents(web_contents)->RemoveObserver(this);
-    audibility_subscriptions_.erase(web_contents);
   }
 }
 
@@ -2913,9 +2903,3 @@
 
   return contents;
 }
-
-void Browser::OnTabAudibilityChanged(content::WebContents* contents,
-                                     bool recently_audible) {
-  tab_strip_model_->UpdateWebContentsStateAt(
-      tab_strip_model_->GetIndexOfWebContents(contents), TabChangeType::kAll);
-}
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index 1d8277f..82e2ee1 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -29,7 +29,6 @@
 #include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h"
 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
 #include "chrome/browser/ui/profile_chooser_constants.h"
-#include "chrome/browser/ui/recently_audible_helper.h"
 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
 #include "chrome/browser/ui/unload_controller.h"
 #include "components/content_settings/core/common/content_settings.h"
@@ -1008,10 +1007,6 @@
       const std::string& partition_id,
       content::SessionStorageNamespace* session_storage_namespace);
 
-  // Callback for RecentlyAudibleHelper.
-  void OnTabAudibilityChanged(content::WebContents* contents,
-                              bool recently_audible);
-
   // Data members /////////////////////////////////////////////////////////////
 
   std::vector<InterstitialObserver*> interstitial_observers_;
@@ -1153,13 +1148,6 @@
       extension_browser_window_helper_;
 #endif
 
-  // These subscriptions are returned by RecentlyAudibleHelper when registering
-  // a callback. They de-register the callback when destroyed and safely handle
-  // destruction of the associated RecentlyAudibleHelper.
-  std::map<content::WebContents*,
-           std::unique_ptr<RecentlyAudibleHelper::Subscription>>
-      audibility_subscriptions_;
-
   // The following factory is used for chrome update coalescing.
   base::WeakPtrFactory<Browser> chrome_updater_factory_{this};
 
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc
index e18fa6e..301764f 100644
--- a/chrome/browser/ui/search/search_tab_helper.cc
+++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -115,6 +115,9 @@
 // calculates and logs the total load time.
 void RecordNewTabLoadTime(content::WebContents* contents) {
   CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
+  // CoreTabHelper can be null in unittests.
+  if (!core_tab_helper)
+    return;
   if (core_tab_helper->new_tab_start_time().is_null())
     return;
 
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
index 654c318ff..9283555 100644
--- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
+++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
@@ -46,8 +46,7 @@
     : DesktopWindowTreeHostWin(native_widget_delegate,
                                desktop_native_widget_aura),
       browser_view_(browser_view),
-      browser_frame_(browser_frame),
-      profile_observer_(this) {
+      browser_frame_(browser_frame) {
   profile_observer_.Add(
       &g_browser_process->profile_manager()->GetProfileAttributesStorage());
 }
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h
index 7093adf..5968e03 100644
--- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h
+++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h
@@ -98,8 +98,8 @@
 
   // This is used to monitor when the window icon needs to be updated because
   // the icon badge has changed (e.g., avatar icon changed).
-  ScopedObserver<ProfileAttributesStorage, BrowserDesktopWindowTreeHostWin>
-      profile_observer_;
+  ScopedObserver<ProfileAttributesStorage, ProfileAttributesStorage::Observer>
+      profile_observer_{this};
 
   base::win::ScopedHICON icon_handle_;
 
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
index ac4e1f3..b52f59e 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -199,14 +199,17 @@
   double size_fraction = 1.0;
   if (state < open_state_fraction_)
     size_fraction = state / open_state_fraction_;
-  if (state > (1.0 - open_state_fraction_))
+  else if (state > (1.0 - open_state_fraction_))
     size_fraction = (1.0 - state) / open_state_fraction_;
   return size_fraction;
 }
 
 bool IconLabelBubbleView::IsShrinking() const {
-  return slide_animation_.is_animating() && !is_animation_paused_ &&
-         slide_animation_.GetCurrentValue() > (1.0 - open_state_fraction_);
+  if (!slide_animation_.is_animating() || is_animation_paused_)
+    return false;
+  return slide_animation_.IsClosing() ||
+         (open_state_fraction_ < 1.0 &&
+          slide_animation_.GetCurrentValue() > (1.0 - open_state_fraction_));
 }
 
 bool IconLabelBubbleView::ShowBubble(const ui::Event& event) {
@@ -401,10 +404,6 @@
   return 0;
 }
 
-base::TimeDelta IconLabelBubbleView::GetSlideDurationTime() const {
-  return base::TimeDelta::FromMilliseconds(3000);
-}
-
 int IconLabelBubbleView::GetWidthBetweenIconAndSeparator() const {
   return ShouldShowSeparator() ? kIconLabelBubbleSpaceBesideSeparator : 0;
 }
@@ -421,13 +420,23 @@
   return "IconLabelBubbleView";
 }
 
-void IconLabelBubbleView::SetUpForInOutAnimation() {
+void IconLabelBubbleView::SetUpForAnimation() {
   SetInkDropMode(InkDropMode::ON);
   SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
   label()->SetElideBehavior(gfx::NO_ELIDE);
   label()->SetVisible(false);
-  slide_animation_.SetSlideDuration(GetSlideDurationTime());
+  slide_animation_.SetSlideDuration(base::TimeDelta::FromMilliseconds(150));
   slide_animation_.SetTweenType(kIconLabelBubbleTweenType);
+  open_state_fraction_ = 1.0;
+}
+
+void IconLabelBubbleView::SetUpForInOutAnimation() {
+  SetUpForAnimation();
+  // The duration of the slide includes the appearance of the label (600ms),
+  // statically showing the label (1800ms), and hiding the label (600ms). The
+  // proportion of time spent in each portion of the animation is controlled by
+  // kIconLabelBubbleOpenTimeFraction.
+  slide_animation_.SetSlideDuration(base::TimeDelta::FromMilliseconds(3000));
   open_state_fraction_ = gfx::Tween::CalculateValue(
       kIconLabelBubbleTweenType, kIconLabelBubbleOpenTimeFraction);
 }
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
index d99cba0..c91c085 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
@@ -155,7 +155,12 @@
 
   gfx::Size GetSizeForLabelWidth(int label_width) const;
 
-  // Set up for icons that animate their labels in and then out.
+  // Set up for icons that animate their labels in. Animating out is initiated
+  // manually.
+  void SetUpForAnimation();
+
+  // Set up for icons that animate their labels in and then automatically out
+  // after a period of time.
   void SetUpForInOutAnimation();
 
   // Animates the view in and disables highlighting for hover and focus. If a
@@ -191,10 +196,6 @@
   // to the suggestion text, like in the SelectedKeywordView.
   virtual int GetExtraInternalSpacing() const;
 
-  // Subclasses that want a different duration for the slide animation can
-  // override this method.
-  virtual base::TimeDelta GetSlideDurationTime() const;
-
   // Returns the width after the icon and before the separator. If the
   // separator is not shown, and ShouldShowExtraEndSpace() is false, this
   // returns 0.
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.cc b/chrome/browser/ui/views/location_bar/location_icon_view.cc
index 8b298aa0..222fab0 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_icon_view.cc
@@ -31,10 +31,9 @@
 LocationIconView::LocationIconView(const gfx::FontList& font_list,
                                    Delegate* delegate)
     : IconLabelBubbleView(font_list), delegate_(delegate) {
-  label()->SetElideBehavior(gfx::ELIDE_MIDDLE);
   SetID(VIEW_ID_LOCATION_ICON);
   Update(true);
-  SetUpForInOutAnimation();
+  SetUpForAnimation();
 
   // Readability is guaranteed by the omnibox theme.
   label()->SetAutoColorReadabilityEnabled(false);
@@ -262,10 +261,6 @@
   return IconLabelBubbleView::IsTriggerableEvent(event);
 }
 
-double LocationIconView::WidthMultiplier() const {
-  return GetAnimationValue();
-}
-
 gfx::Size LocationIconView::GetMinimumSizeForPreferredSize(
     gfx::Size size) const {
   const int kMinCharacters = 10;
@@ -273,7 +268,3 @@
       GetSizeForLabelWidth(font_list().GetExpectedTextWidth(kMinCharacters)));
   return size;
 }
-
-base::TimeDelta LocationIconView::GetSlideDurationTime() const {
-  return base::TimeDelta::FromMilliseconds(150);
-}
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.h b/chrome/browser/ui/views/location_bar/location_icon_view.h
index 915b094..30fa313 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view.h
+++ b/chrome/browser/ui/views/location_bar/location_icon_view.h
@@ -106,7 +106,6 @@
  protected:
   // IconLabelBubbleView:
   bool IsTriggerableEvent(const ui::Event& event) override;
-  double WidthMultiplier() const override;
 
  private:
   // The security level when the location icon was last updated. Used to decide
@@ -121,8 +120,6 @@
   // Returns what the minimum size would be if the preferred size were |size|.
   gfx::Size GetMinimumSizeForPreferredSize(gfx::Size size) const;
 
-  base::TimeDelta GetSlideDurationTime() const override;
-
   Delegate* delegate_;
 
   // Used to scope the lifetime of asynchronous icon fetch callbacks to the
diff --git a/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc b/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc
index dff389a..7ab2f6f 100644
--- a/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc
+++ b/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc
@@ -8,6 +8,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/native_file_system/chrome_native_file_system_permission_context.h"
+#include "chrome/browser/native_file_system/native_file_system_permission_context_factory.h"
 #include "chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/vector_icons/vector_icons.h"
@@ -72,47 +73,31 @@
   url::Origin origin =
       url::Origin::Create(GetWebContents()->GetLastCommittedURL());
 
-  ChromeNativeFileSystemPermissionContext::GetPermissionGrantsFromUIThread(
-      GetWebContents()->GetBrowserContext(), origin,
-      GetWebContents()->GetMainFrame()->GetProcess()->GetID(),
-      GetWebContents()->GetMainFrame()->GetRoutingID(),
-      base::BindOnce(
-          [](int frame_tree_node_id, const url::Origin& origin,
-             ChromeNativeFileSystemPermissionContext::Grants grants) {
-            auto* web_contents =
-                content::WebContents::FromFrameTreeNodeId(frame_tree_node_id);
-            if (!web_contents ||
-                url::Origin::Create(web_contents->GetLastCommittedURL()) !=
-                    origin) {
-              // If web-contents has navigated to a different origin while we
-              // were looking up current usage, don't show the dialog to avoid
-              // showing the dialog for the wrong origin.
-              return;
-            }
+  auto* web_contents = GetWebContents();
+  auto* context =
+      NativeFileSystemPermissionContextFactory::GetForProfileIfExists(
+          web_contents->GetBrowserContext());
+  if (!context) {
+    // If there is no context, there can't be any usage either, so just return.
+    return;
+  }
 
-            NativeFileSystemUsageBubbleView::Usage usage;
-            if (base::FeatureList::IsEnabled(
-                    kNativeFileSystemReadOnlyUsageIndicatorFeature)) {
-              usage.readable_directories =
-                  web_contents->GetNativeFileSystemDirectoryHandles();
-            }
-            usage.writable_files = std::move(grants.file_write_grants);
-            usage.writable_directories =
-                std::move(grants.directory_write_grants);
+  ChromeNativeFileSystemPermissionContext::Grants grants =
+      context->GetPermissionGrants(
+          origin, web_contents->GetMainFrame()->GetProcess()->GetID(),
+          web_contents->GetMainFrame()->GetRoutingID());
 
-            if (usage.readable_directories.empty() &&
-                usage.writable_files.empty() &&
-                usage.writable_directories.empty()) {
-              // Async looking up of usage might result in there no longer being
-              // usage by the time we get here, in that case just abort and
-              // don't show the bubble.
-              return;
-            }
+  NativeFileSystemUsageBubbleView::Usage usage;
+  if (base::FeatureList::IsEnabled(
+          kNativeFileSystemReadOnlyUsageIndicatorFeature)) {
+    usage.readable_directories =
+        web_contents->GetNativeFileSystemDirectoryHandles();
+  }
+  usage.writable_files = std::move(grants.file_write_grants);
+  usage.writable_directories = std::move(grants.directory_write_grants);
 
-            NativeFileSystemUsageBubbleView::ShowBubble(web_contents, origin,
-                                                        std::move(usage));
-          },
-          GetWebContents()->GetMainFrame()->GetFrameTreeNodeId(), origin));
+  NativeFileSystemUsageBubbleView::ShowBubble(web_contents, origin,
+                                              std::move(usage));
 }
 
 const gfx::VectorIcon& NativeFileSystemAccessIconView::GetVectorIcon() const {
diff --git a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
index 49a2166..ee39794 100644
--- a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
+++ b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
@@ -10,6 +10,7 @@
 #include "base/stl_util.h"
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/native_file_system/chrome_native_file_system_permission_context.h"
+#include "chrome/browser/native_file_system/native_file_system_permission_context_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
@@ -137,12 +138,12 @@
     label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
     label_layout->SetFlexForView(label, 1);
     auto button = views::CreateVectorToggleImageButton(this);
-    views::SetImageFromVectorIcon(button.get(), kCaretDownIcon,
-                                  ui::TableModel::kIconSize, icon_color);
+    views::SetImageFromVectorIconWithColor(
+        button.get(), kCaretDownIcon, ui::TableModel::kIconSize, icon_color);
     button->SetTooltipText(
         l10n_util::GetStringUTF16(IDS_NATIVE_FILE_SYSTEM_USAGE_EXPAND));
-    views::SetToggledImageFromVectorIcon(button.get(), kCaretUpIcon,
-                                         ui::TableModel::kIconSize, icon_color);
+    views::SetToggledImageFromVectorIconWithColor(
+        button.get(), kCaretUpIcon, ui::TableModel::kIconSize, icon_color);
     button->SetToggledTooltipText(
         l10n_util::GetStringUTF16(IDS_NATIVE_FILE_SYSTEM_USAGE_COLLAPSE));
     expand_collapse_button_ = label_container->AddChildView(std::move(button));
@@ -427,9 +428,12 @@
     return;
 
   content::BrowserContext* profile = web_contents()->GetBrowserContext();
-  ChromeNativeFileSystemPermissionContext::
-      RevokeGrantsForOriginAndTabFromUIThread(
-          profile, origin_,
-          web_contents()->GetMainFrame()->GetProcess()->GetID(),
-          web_contents()->GetMainFrame()->GetRoutingID());
+  auto* context =
+      NativeFileSystemPermissionContextFactory::GetForProfileIfExists(profile);
+  if (!context)
+    return;
+
+  context->RevokeGrantsForOriginAndTab(
+      origin_, web_contents()->GetMainFrame()->GetProcess()->GetID(),
+      web_contents()->GetMainFrame()->GetRoutingID());
 }
diff --git a/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc b/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc
index 0a3d90a6..5ea8f88 100644
--- a/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc
+++ b/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc
@@ -17,21 +17,51 @@
 AppManagementShelfDelegate::AppManagementShelfDelegate(
     AppManagementPageHandler* page_handler)
     : page_handler_(page_handler) {
-  ChromeLauncherController::instance()->shelf_model()->AddObserver(this);
+  auto* launcher_controller = ChromeLauncherController::instance();
+  if (!launcher_controller) {
+    return;
+  }
+
+  auto* shelf_model = launcher_controller->shelf_model();
+  if (!shelf_model) {
+    return;
+  }
+
+  shelf_model->AddObserver(this);
 }
 
 AppManagementShelfDelegate::~AppManagementShelfDelegate() {
-  ChromeLauncherController::instance()->shelf_model()->RemoveObserver(this);
+  auto* launcher_controller = ChromeLauncherController::instance();
+  if (!launcher_controller) {
+    return;
+  }
+
+  auto* shelf_model = launcher_controller->shelf_model();
+  if (!shelf_model) {
+    return;
+  }
+
+  shelf_model->RemoveObserver(this);
 }
 
 bool AppManagementShelfDelegate::IsPinned(const std::string& app_id) {
-  return ChromeLauncherController::instance()->IsAppPinned(app_id);
+  auto* launcher_controller = ChromeLauncherController::instance();
+  if (!launcher_controller) {
+    return false;
+  }
+  return launcher_controller->IsAppPinned(app_id);
 }
 
 bool AppManagementShelfDelegate::IsPolicyPinned(
     const std::string& app_id) const {
-  auto* shelf_item =
-      ChromeLauncherController::instance()->GetItem(ash::ShelfID(app_id));
+  auto* launcher_controller = ChromeLauncherController::instance();
+
+  if (!launcher_controller) {
+    return false;
+  }
+
+  auto* shelf_item = launcher_controller->GetItem(ash::ShelfID(app_id));
+
   // If the app does not exist on the launcher, it has not been pinned by
   // policy.
   return shelf_item && shelf_item->pinned_by_policy;
@@ -39,21 +69,39 @@
 
 void AppManagementShelfDelegate::SetPinned(const std::string& app_id,
                                            OptionalBool pinned) {
+  auto* launcher_controller = ChromeLauncherController::instance();
+
+  if (!launcher_controller) {
+    return;
+  }
+
   if (pinned == OptionalBool::kTrue) {
-    ChromeLauncherController::instance()->PinAppWithID(app_id);
+    launcher_controller->PinAppWithID(app_id);
   } else if (pinned == OptionalBool::kFalse) {
-    ChromeLauncherController::instance()->UnpinAppWithID(app_id);
+    launcher_controller->UnpinAppWithID(app_id);
   } else {
     NOTREACHED();
   }
 }
 
 void AppManagementShelfDelegate::ShelfItemAdded(int index) {
-  const std::string& app_id = ChromeLauncherController::instance()
-                                  ->shelf_model()
-                                  ->items()[index]
-                                  .id.app_id;
-  bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id);
+  auto* launcher_controller = ChromeLauncherController::instance();
+  if (!launcher_controller) {
+    return;
+  }
+
+  auto* shelf_model = launcher_controller->shelf_model();
+  if (!shelf_model) {
+    return;
+  }
+
+  if (index >= shelf_model->item_count()) {
+    // index out of bounds.
+    return;
+  }
+
+  const std::string& app_id = shelf_model->items()[index].id.app_id;
+  bool is_pinned = launcher_controller->IsAppPinned(app_id);
 
   page_handler_->OnPinnedChanged(app_id, is_pinned);
 }
@@ -68,11 +116,23 @@
 void AppManagementShelfDelegate::ShelfItemChanged(
     int index,
     const ash::ShelfItem& old_item) {
-  const std::string& app_id = ChromeLauncherController::instance()
-                                  ->shelf_model()
-                                  ->items()[index]
-                                  .id.app_id;
-  bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id);
+  auto* launcher_controller = ChromeLauncherController::instance();
+  if (!launcher_controller) {
+    return;
+  }
+
+  auto* shelf_model = launcher_controller->shelf_model();
+  if (!shelf_model) {
+    return;
+  }
+
+  if (index >= shelf_model->item_count()) {
+    // index out of bounds.
+    return;
+  }
+
+  const std::string& app_id = shelf_model->items()[index].id.app_id;
+  bool is_pinned = launcher_controller->IsAppPinned(app_id);
 
   page_handler_->OnPinnedChanged(app_id, is_pinned);
 }
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 3538802..3381563 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -63,6 +63,7 @@
   if (is_chromeos) {
     deps += [
       "//ash/public/cpp:cpp",
+      "//chromeos/components/media_app_ui",
       "//chromeos/constants",
       "//components/arc:arc_base",
       "//components/arc/mojom",
diff --git a/chrome/browser/web_applications/extensions/BUILD.gn b/chrome/browser/web_applications/extensions/BUILD.gn
index 66999b4..7fb53aa 100644
--- a/chrome/browser/web_applications/extensions/BUILD.gn
+++ b/chrome/browser/web_applications/extensions/BUILD.gn
@@ -84,6 +84,7 @@
     "bookmark_app_registrar_browsertest.cc",
     "system_web_app_manager_browsertest.cc",
     "system_web_app_manager_browsertest.h",
+    "system_web_app_manager_browsertest_chromeos.cc",
     "web_app_audio_focus_browsertest.cc",
   ]
 
@@ -95,6 +96,7 @@
     "//chrome/app/theme:chrome_unscaled_resources_grit",
     "//chrome/browser",
     "//chrome/browser/ui",
+    "//chrome/browser/web_applications",
     "//chrome/browser/web_applications:web_app_test_group",
     "//chrome/browser/web_applications:web_applications_on_extensions",
     "//chrome/browser/web_applications:web_applications_on_extensions_test_support",
@@ -107,4 +109,11 @@
     "//extensions/common",
     "//net:test_support",
   ]
+
+  if (is_chromeos) {
+    deps += [
+      "//chromeos/components/media_app_ui",
+      "//chromeos/constants",
+    ]
+  }
 }
diff --git a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc
index 7af49ae1..b9773bb 100644
--- a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc
+++ b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc
@@ -126,17 +126,36 @@
   DISALLOW_COPY_AND_ASSIGN(TestWebUIControllerFactory);
 };
 
-SystemWebAppManagerBrowserTest::SystemWebAppManagerBrowserTest()
-    : factory_(std::make_unique<TestWebUIControllerFactory>()),
-      test_web_app_provider_creator_(
-          base::BindOnce(&SystemWebAppManagerBrowserTest::CreateWebAppProvider,
-                         base::Unretained(this))) {
+SystemWebAppManagerBrowserTest::SystemWebAppManagerBrowserTest(
+    bool install_mock) {
   scoped_feature_list_.InitWithFeatures({features::kSystemWebApps}, {});
-  content::WebUIControllerFactory::RegisterFactory(factory_.get());
+  if (install_mock) {
+    factory_ = std::make_unique<TestWebUIControllerFactory>();
+    test_web_app_provider_creator_ =
+        std::make_unique<TestWebAppProviderCreator>(base::BindOnce(
+            &SystemWebAppManagerBrowserTest::CreateWebAppProvider,
+            base::Unretained(this)));
+    content::WebUIControllerFactory::RegisterFactory(factory_.get());
+  }
 }
 
 SystemWebAppManagerBrowserTest::~SystemWebAppManagerBrowserTest() {
-  content::WebUIControllerFactory::UnregisterFactoryForTesting(factory_.get());
+  if (factory_) {
+    content::WebUIControllerFactory::UnregisterFactoryForTesting(
+        factory_.get());
+  }
+}
+
+// static
+const extensions::Extension*
+SystemWebAppManagerBrowserTest::GetExtensionForAppBrowser(Browser* browser) {
+  return static_cast<extensions::HostedAppBrowserController*>(
+             browser->app_controller())
+      ->GetExtensionForTesting();
+}
+
+SystemWebAppManager& SystemWebAppManagerBrowserTest::GetManager() {
+  return WebAppProvider::Get(browser()->profile())->system_web_app_manager();
 }
 
 std::unique_ptr<KeyedService>
@@ -165,18 +184,20 @@
 
 Browser* SystemWebAppManagerBrowserTest::WaitForSystemAppInstallAndLaunch(
     SystemAppType system_app_type) {
-  Profile* profile = browser()->profile();
-
   // Wait for the System Web Apps to install.
-  base::RunLoop run_loop;
-  test_system_web_app_manager_->on_apps_synchronized().Post(
-      FROM_HERE, run_loop.QuitClosure());
-  run_loop.Run();
+  if (factory_) {
+    base::RunLoop run_loop;
+    GetManager().on_apps_synchronized().Post(FROM_HERE, run_loop.QuitClosure());
+    run_loop.Run();
+  } else {
+    GetManager().InstallSystemAppsForTesting();
+  }
 
   base::Optional<AppId> app_id =
-      test_system_web_app_manager_->GetAppIdForSystemApp(system_app_type);
+      GetManager().GetAppIdForSystemApp(system_app_type);
   DCHECK(app_id.has_value());
 
+  Profile* profile = browser()->profile();
   const extensions::Extension* app =
       extensions::ExtensionRegistry::Get(profile)->enabled_extensions().GetByID(
           app_id.value());
@@ -187,11 +208,8 @@
 
 // Test that System Apps install correctly with a manifest.
 IN_PROC_BROWSER_TEST_F(SystemWebAppManagerBrowserTest, Install) {
-  const extensions::Extension* app =
-      static_cast<extensions::HostedAppBrowserController*>(
-          WaitForSystemAppInstallAndLaunch(SystemAppType::SETTINGS)
-              ->app_controller())
-          ->GetExtensionForTesting();
+  const extensions::Extension* app = GetExtensionForAppBrowser(
+      WaitForSystemAppInstallAndLaunch(SystemAppType::SETTINGS));
   EXPECT_EQ("Test System App", app->name());
   EXPECT_EQ(SkColorSetRGB(0, 0xFF, 0),
             extensions::AppThemeColorInfo::GetThemeColor(app));
@@ -202,9 +220,7 @@
   EXPECT_EQ(extensions::util::GetInstalledPwaForUrl(
                 browser()->profile(), content::GetWebUIURL("test-system-app/")),
             app);
-  EXPECT_TRUE(WebAppProvider::Get(browser()->profile())
-                  ->system_web_app_manager()
-                  .IsSystemWebApp(app->id()));
+  EXPECT_TRUE(GetManager().IsSystemWebApp(app->id()));
 }
 
 // Check the toolbar is not shown for system web apps for pages on the chrome://
diff --git a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h
index 1d88faa..1dcba66 100644
--- a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h
+++ b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h
@@ -15,6 +15,10 @@
 class Browser;
 class KeyedService;
 
+namespace extensions {
+class Extension;
+}
+
 namespace web_app {
 
 class TestSystemWebAppManager;
@@ -23,10 +27,23 @@
 
 class SystemWebAppManagerBrowserTest : public InProcessBrowserTest {
  public:
-  SystemWebAppManagerBrowserTest();
+  // Performs common initialization for testing SystemWebAppManager features.
+  // If true, |install_mock| installs a WebUIController that serves a mock
+  // System PWA, and ensures the WebAppProvider associated with the startup
+  // profile is a TestWebAppProviderCreator.
+  explicit SystemWebAppManagerBrowserTest(bool install_mock = true);
+
   ~SystemWebAppManagerBrowserTest() override;
 
- protected:
+  // Gets the Extension* from the HostedAppBrowserController associated with
+  // |browser|.
+  static const extensions::Extension* GetExtensionForAppBrowser(
+      Browser* browser);
+
+  // Returns the SystemWebAppManager for browser()->profile(). This will be a
+  // TestSystemWebAppManager if initialized with |install_mock| true.
+  SystemWebAppManager& GetManager();
+
   Browser* WaitForSystemAppInstallAndLaunch(SystemAppType system_app_type);
 
  private:
@@ -34,7 +51,7 @@
 
   base::test::ScopedFeatureList scoped_feature_list_;
   std::unique_ptr<TestWebUIControllerFactory> factory_;
-  TestWebAppProviderCreator test_web_app_provider_creator_;
+  std::unique_ptr<TestWebAppProviderCreator> test_web_app_provider_creator_;
   TestSystemWebAppManager* test_system_web_app_manager_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(SystemWebAppManagerBrowserTest);
diff --git a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest_chromeos.cc b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest_chromeos.cc
new file mode 100644
index 0000000..928803ab
--- /dev/null
+++ b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest_chromeos.cc
@@ -0,0 +1,83 @@
+// Copyright 2019 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 "chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/extensions/extension_util.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/web_applications/system_web_app_manager.h"
+#include "chromeos/components/media_app_ui/url_constants.h"
+#include "chromeos/constants/chromeos_features.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "content/public/test/test_utils.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/aura/window.h"
+
+namespace web_app {
+
+namespace {
+
+class SystemWebAppManagerBrowserTestChromeos
+    : public SystemWebAppManagerBrowserTest {
+ public:
+  SystemWebAppManagerBrowserTestChromeos()
+      : SystemWebAppManagerBrowserTest(false /* install_mock */) {
+    scoped_feature_list_.InitAndEnableFeature(chromeos::features::kMediaApp);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+}  // namespace
+
+// Test that the Media App installs and launches correctly. Runs some spot
+// checks on the manifest.
+IN_PROC_BROWSER_TEST_F(SystemWebAppManagerBrowserTestChromeos, MediaApp) {
+  Browser* app_browser = WaitForSystemAppInstallAndLaunch(SystemAppType::MEDIA);
+  const extensions::Extension* installed_app =
+      extensions::util::GetInstalledPwaForUrl(
+          browser()->profile(),
+          content::GetWebUIURL(chromeos::kChromeUIMediaAppHost));
+
+  EXPECT_TRUE(GetManager().IsSystemWebApp(installed_app->id()));
+  EXPECT_TRUE(installed_app->from_bookmark());
+
+  EXPECT_EQ("Media App", installed_app->name());
+  EXPECT_EQ(base::ASCIIToUTF16("Media App"),
+            app_browser->window()->GetNativeWindow()->GetTitle());
+  EXPECT_EQ(extensions::Manifest::EXTERNAL_COMPONENT,
+            installed_app->location());
+
+  // The installed app should match the opened app window.
+  EXPECT_EQ(installed_app, GetExtensionForAppBrowser(app_browser));
+  content::WebContents* web_contents =
+      app_browser->tab_strip_model()->GetActiveWebContents();
+
+  // The opened window should be showing chrome://media-app with attached WebUI.
+  EXPECT_EQ(chromeos::kChromeUIMediaAppURL, web_contents->GetVisibleURL());
+
+  content::TestNavigationObserver observer(web_contents);
+  observer.WaitForNavigationFinished();
+  EXPECT_EQ(chromeos::kChromeUIMediaAppURL,
+            web_contents->GetLastCommittedURL());
+
+  content::WebUI* web_ui = web_contents->GetCommittedWebUI();
+  ASSERT_TRUE(web_ui);
+  EXPECT_TRUE(web_ui->GetController());
+
+  // A completed navigation could change the window title. Check again.
+  EXPECT_EQ(base::ASCIIToUTF16("Media App"),
+            app_browser->window()->GetNativeWindow()->GetTitle());
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_app_manager.cc
index f1cafc02..deb78f7 100644
--- a/chrome/browser/web_applications/system_web_app_manager.cc
+++ b/chrome/browser/web_applications/system_web_app_manager.cc
@@ -31,6 +31,7 @@
 #if defined(OS_CHROMEOS)
 #include "ash/public/cpp/app_list/internal_app_id_constants.h"
 #include "chrome/browser/chromeos/extensions/default_web_app_ids.h"
+#include "chromeos/components/media_app_ui/url_constants.h"
 #include "chromeos/constants/chromeos_features.h"
 #endif  // defined(OS_CHROMEOS)
 
@@ -72,6 +73,10 @@
     constexpr char kChromeTerminalPWAURL[] = "chrome://terminal/html/pwa.html";
     infos[SystemAppType::TERMINAL].install_url = GURL(kChromeTerminalPWAURL);
   }
+  if (SystemWebAppManager::IsAppEnabled(SystemAppType::MEDIA)) {
+    constexpr char kChromeMediaAppURL[] = "chrome://media-app/pwa.html";
+    infos[SystemAppType::MEDIA].install_url = {GURL(kChromeMediaAppURL)};
+  }
 #endif  // OS_CHROMEOS
 
   return infos;
@@ -121,6 +126,8 @@
           chromeos::features::kCameraSystemWebApp);
     case SystemAppType::TERMINAL:
       return base::FeatureList::IsEnabled(features::kTerminalSystemApp);
+    case SystemAppType::MEDIA:
+      return base::FeatureList::IsEnabled(chromeos::features::kMediaApp);
   }
 #else
   return false;
diff --git a/chrome/browser/web_applications/system_web_app_manager.h b/chrome/browser/web_applications/system_web_app_manager.h
index 1609222..8ff8f01 100644
--- a/chrome/browser/web_applications/system_web_app_manager.h
+++ b/chrome/browser/web_applications/system_web_app_manager.h
@@ -41,6 +41,7 @@
   DISCOVER,
   CAMERA,
   TERMINAL,
+  MEDIA,
 };
 
 // The configuration options for a System App.
diff --git a/chrome/browser/web_launch/web_launch_files_helper.cc b/chrome/browser/web_launch/web_launch_files_helper.cc
index 7e3e9f5..2c6c25d 100644
--- a/chrome/browser/web_launch/web_launch_files_helper.cc
+++ b/chrome/browser/web_launch/web_launch_files_helper.cc
@@ -23,30 +23,6 @@
 #include "third_party/blink/public/mojom/native_file_system/native_file_system_directory_handle.mojom.h"
 #include "url/origin.h"
 
-namespace {
-
-// Converts |paths| to |NativeFileSystemEntries|, which can be manipulated by
-// |context|. Must be called on IO thread.
-std::vector<blink::mojom::NativeFileSystemEntryPtr> GetEntries(
-    scoped_refptr<content::NativeFileSystemEntryFactory> entry_factory,
-    content::NativeFileSystemEntryFactory::BindingContext context,
-    std::vector<base::FilePath> paths) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  DCHECK(entry_factory);
-
-  std::vector<blink::mojom::NativeFileSystemEntryPtr> launch_entries;
-  launch_entries.reserve(paths.size());
-
-  for (const auto& path : paths) {
-    launch_entries.push_back(
-        entry_factory->CreateFileEntryFromPath(context, path));
-  }
-
-  return launch_entries;
-}
-
-}  // namespace
-
 namespace web_launch {
 
 WEB_CONTENTS_USER_DATA_KEY_IMPL(WebLaunchFilesHelper)
@@ -93,23 +69,20 @@
       web_contents->GetMainFrame()->GetProcess()->GetID(),
       web_contents->GetMainFrame()->GetRoutingID());
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&GetEntries, std::move(entry_factory), std::move(context),
-                     std::move(launch_paths)),
-      base::BindOnce(&WebLaunchFilesHelper::SetLaunchEntries,
-                     weak_ptr_factory.GetWeakPtr()));
+  launch_entries_.reserve(launch_paths.size());
+  for (const auto& path : launch_paths) {
+    launch_entries_.push_back(
+        entry_factory->CreateFileEntryFromPath(context, path));
+  }
+
+  // Asynchronously call MaybeSendLaunchEntries, since it may destroy |this|.
+  base::PostTask(FROM_HERE, {content::BrowserThread::UI},
+                 base::BindOnce(&WebLaunchFilesHelper::MaybeSendLaunchEntries,
+                                weak_ptr_factory.GetWeakPtr()));
 }
+
 WebLaunchFilesHelper::~WebLaunchFilesHelper() = default;
 
-void WebLaunchFilesHelper::SetLaunchEntries(
-    std::vector<blink::mojom::NativeFileSystemEntryPtr> launch_entries) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  launch_entries_ = std::move(launch_entries);
-  MaybeSendLaunchEntries();
-}
-
 void WebLaunchFilesHelper::MaybeSendLaunchEntries() {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
diff --git a/chrome/browser/web_launch/web_launch_files_helper.h b/chrome/browser/web_launch/web_launch_files_helper.h
index 454b8f0..fccfae3 100644
--- a/chrome/browser/web_launch/web_launch_files_helper.h
+++ b/chrome/browser/web_launch/web_launch_files_helper.h
@@ -28,10 +28,9 @@
 namespace web_launch {
 
 // A helper for sending launch paths to the renderer process.
-// Launch files cannot be sent immediately for two reasons:
-// 1) Creating NativeFileSystemFileEntries has to happen on the IO thread.
-// 2) The data is stored on a document for |launch_url_|, which is not created
-// until |launch_url_| is committed.
+// Launch files cannot be sent immediately because the data is stored on a
+// document for |launch_url_|, which is not created until |launch_url_| is
+// committed.
 //
 // Note: The lifetime of this class is tied to the WebContents it is attached
 // to. However, in general it will be destroyed before the WebContents, when the
@@ -54,10 +53,6 @@
   void DidFinishNavigation(content::NavigationHandle* handle) override;
 
  private:
-  // Callback which fires when launch entries have been created.
-  void SetLaunchEntries(
-      std::vector<blink::mojom::NativeFileSystemEntryPtr> launch_entries);
-
   // Sends the launch entries to the renderer if they have been created and the
   // renderer is ready to receive them.
   void MaybeSendLaunchEntries();
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
index c0e0887..3cf0e1a7 100644
--- a/chrome/common/BUILD.gn
+++ b/chrome/common/BUILD.gn
@@ -590,6 +590,7 @@
     "//device/vr/buildflags",
     "//extensions/buildflags",
     "//media:media_buildflags",
+    "//net:buildflags",
     "//ppapi/buildflags",
     "//printing/buildflags",
     "//rlz/buildflags",
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 3db08a52..362171b 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -340,6 +340,14 @@
     "EnableAmbientAuthenticationInGuestSession",
     base::FEATURE_ENABLED_BY_DEFAULT};
 
+#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
+// Enables support for FTP URLs. When disabled ftp:// URLs will behave the same
+// as any other URL scheme that's unknown to the browser.
+// TODO(https://crbug.com/333943): FTP support is being phased out.
+const base::Feature kEnableFtp{"EnableFtpSupport",
+                               base::FEATURE_ENABLED_BY_DEFAULT};
+#endif
+
 #if !defined(OS_ANDROID)
 // Upload enterprise cloud reporting without the extension.
 const base::Feature kEnterpriseReportingInBrowser{
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index 329cb9d..a305be4 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -16,6 +16,7 @@
 #include "chrome/common/buildflags.h"
 #include "device/vr/buildflags/buildflags.h"
 #include "extensions/buildflags/buildflags.h"
+#include "net/net_buildflags.h"
 #include "ppapi/buildflags/buildflags.h"
 #include "printing/buildflags/buildflags.h"
 #include "ui/base/buildflags.h"
@@ -193,6 +194,11 @@
 COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kEnableAmbientAuthenticationInIncognito;
 
+#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
+COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::Feature kEnableFtp;
+#endif
+
 #if !defined(OS_ANDROID)
 COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kEnterpriseReportingInBrowser;
diff --git a/chrome/common/extensions/api/autotest_private.idl b/chrome/common/extensions/api/autotest_private.idl
index 1cddd72b..dc07467 100644
--- a/chrome/common/extensions/api/autotest_private.idl
+++ b/chrome/common/extensions/api/autotest_private.idl
@@ -264,7 +264,14 @@
     boolean isAnimating;
     boolean isVisible;
   };
-  
+
+  dictionary ArcAppTracingInfo {
+    boolean success;
+    double fps;
+    double commitDeviation;
+    double renderQuality;
+  };
+
   callback GetArcAppWindowInfoCallback = void (ArcAppWindowInfo info);
 
   callback LaunchArcAppCallback = void (boolean appLaunched);
@@ -279,6 +286,8 @@
 
   callback SetOverviewModeStateCallback = void(boolean finished);
 
+  callback ArcAppTracingCallback = void(ArcAppTracingInfo info);
+
   callback WaitForDisplayRotationCallback = void (boolean success);
 
   dictionary App {
@@ -614,6 +623,14 @@
     static void getArcAppWindowInfo(DOMString packageName,
                                     GetArcAppWindowInfoCallback callback);
 
+    // Start ARC performance tracing for the active ARC app window.
+    // |callback|: Called when the operation has completed.
+    static void arcAppTracingStart(VoidCallback callback);
+
+    // Stop ARC performance tracing if it was started and analyze results.
+    // |callback|: callback to deliver tracing results.
+    static void arcAppTracingStopAndAnalyze(ArcAppTracingCallback callback);
+
     // Swap the windows in the split view.
     // |callback|: Called when the operation has completed.
     static void swapWindowsInSplitView(VoidCallback callback);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 7097bf2..2a248e2 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -295,6 +295,8 @@
     sources += [
       "../browser/chromeos/accessibility/speech_monitor.cc",
       "../browser/chromeos/accessibility/speech_monitor.h",
+      "../browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc",
+      "../browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h",
       "../browser/chromeos/ownership/fake_owner_settings_service.cc",
       "../browser/chromeos/ownership/fake_owner_settings_service.h",
       "../browser/chromeos/settings/scoped_cros_settings_test_helper.cc",
@@ -5135,6 +5137,7 @@
       "../browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc",
       "../browser/ui/app_list/search/arc/arc_playstore_search_provider_unittest.cc",
       "../browser/ui/app_list/search/common/file_icon_util_unittest.cc",
+      "../browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc",
       "../browser/ui/app_list/search/launcher_search/launcher_search_icon_image_loader_unittest.cc",
       "../browser/ui/app_list/search/search_result_ranker/app_launch_event_logger_unittest.cc",
       "../browser/ui/app_list/search/search_result_ranker/app_launch_predictor_unittest.cc",
diff --git a/chrome/test/data/extensions/api_test/autotest_private/test.js b/chrome/test/data/extensions/api_test/autotest_private/test.js
index 4b9e573..7252b3b 100644
--- a/chrome/test/data/extensions/api_test/autotest_private/test.js
+++ b/chrome/test/data/extensions/api_test/autotest_private/test.js
@@ -497,6 +497,10 @@
           });
     });
   },
+  function arcAppTracingNoArcWindow() {
+    chrome.autotestPrivate.arcAppTracingStart(chrome.test.callbackFail(
+        'Failed to start custom tracing.'));
+  },
 ];
 
 var arcEnabledTests = [
@@ -624,11 +628,63 @@
   },
 ];
 
+var arcPerformanceTracingTests = [
+  function arcAppTracingNormal() {
+    chrome.autotestPrivate.arcAppTracingStart(async function() {
+      chrome.test.assertNoLastError();
+      function sleep(ms) {
+        return new Promise(resolve => setTimeout(resolve, ms));
+      }
+      // We generate 15 frames in test.
+      await sleep(250);
+      chrome.autotestPrivate.arcAppTracingStopAndAnalyze(
+          function(tracing) {
+            chrome.test.assertNoLastError();
+            chrome.test.assertTrue(tracing.success);
+            // FPS is based on real time. Make sure it is positive.
+            chrome.test.assertTrue(tracing.fps > 0);
+            chrome.test.assertTrue(tracing.fps <= 60.0);
+            chrome.test.assertEq(216, Math.trunc(tracing.commitDeviation));
+            chrome.test.assertEq(48, Math.trunc(100.0 * tracing.renderQuality));
+            chrome.test.succeed();
+        });
+    });
+  },
+  function arcAppTracingStopWithoutStart() {
+    chrome.autotestPrivate.arcAppTracingStopAndAnalyze(
+        function(tracing) {
+          chrome.test.assertNoLastError();
+          chrome.test.assertFalse(tracing.success);
+          chrome.test.assertEq(0, tracing.fps);
+          chrome.test.assertEq(0, tracing.commitDeviation);
+          chrome.test.assertEq(0, tracing.renderQuality);
+          chrome.test.succeed();
+        });
+  },
+  function arcAppTracingDoubleStop() {
+    chrome.autotestPrivate.arcAppTracingStart(function() {
+      chrome.test.assertNoLastError();
+      chrome.autotestPrivate.arcAppTracingStopAndAnalyze(
+          function(tracing) {
+            chrome.test.assertNoLastError();
+            chrome.test.assertTrue(tracing.success);
+            chrome.autotestPrivate.arcAppTracingStopAndAnalyze(
+                function(tracing) {
+                  chrome.test.assertNoLastError();
+                  chrome.test.assertFalse(tracing.success);
+                  chrome.test.succeed();
+              });
+        });
+    });
+  },
+];
+
 
 var test_suites = {
   'default': defaultTests,
   'arcEnabled': arcEnabledTests,
-  'enterprisePolicies': policyTests
+  'enterprisePolicies': policyTests,
+  'arcPerformanceTracing': arcPerformanceTracingTests
 };
 
 chrome.test.getConfig(function(config) {
diff --git a/chrome/test/data/local_ntp/realbox_browsertest.js b/chrome/test/data/local_ntp/realbox_browsertest.js
index 26fbcc1f..4129ea0f 100644
--- a/chrome/test/data/local_ntp/realbox_browsertest.js
+++ b/chrome/test/data/local_ntp/realbox_browsertest.js
@@ -623,3 +623,30 @@
 
   assertEquals(0, $(test.realbox.IDS.REALBOX_MATCHES).children.length);
 };
+
+test.realbox.testPressEnterOnResult = function() {
+  test.realbox.realboxEl.value = 'hello world';
+  test.realbox.realboxEl.dispatchEvent(new CustomEvent('input'));
+
+  const matches = [test.realbox.getSearchMatch({supportsDeletion: true})];
+  chrome.embeddedSearch.searchBox.onqueryautocompletedone(
+      {input: test.realbox.realboxEl.value, matches});
+
+  const matchEls = $(test.realbox.IDS.REALBOX_MATCHES).children;
+  assertEquals(1, matchEls.length);
+
+  let clicked = false;
+  matchEls[0].onclick = () => clicked = true;
+
+  const shiftEnter = new KeyboardEvent('keydown', {
+    bubbles: true,
+    cancelable: true,
+    key: 'Enter',
+    target: matchEls[0],
+    shiftKey: true,
+  });
+  test.realbox.realboxEl.dispatchEvent(shiftEnter);
+  assertTrue(shiftEnter.defaultPrevented);
+
+  assertTrue(clicked);
+};
diff --git a/chromeos/components/media_app_ui/media_app_ui.cc b/chromeos/components/media_app_ui/media_app_ui.cc
index 18f068b..e523899 100644
--- a/chromeos/components/media_app_ui/media_app_ui.cc
+++ b/chromeos/components/media_app_ui/media_app_ui.cc
@@ -18,6 +18,9 @@
   content::WebUIDataSource* source =
       content::WebUIDataSource::Create(kChromeUIMediaAppHost);
   source->SetDefaultResource(IDR_MEDIA_APP_INDEX_HTML);
+  source->AddResourcePath("pwa.html", IDR_MEDIA_APP_PWA_HTML);
+  source->AddResourcePath("manifest.json", IDR_MEDIA_APP_MANIFEST);
+  source->AddResourcePath("assets/app_icon_256.png", IDR_MEDIA_APP_ICON_256);
   return source;
 }
 
diff --git a/chromeos/components/media_app_ui/resources/manifest.json b/chromeos/components/media_app_ui/resources/manifest.json
new file mode 100644
index 0000000..7fd92be
--- /dev/null
+++ b/chromeos/components/media_app_ui/resources/manifest.json
@@ -0,0 +1,15 @@
+{
+  "name": "Media App",
+  "short_name": "Media App",
+  "start_url": "/",
+  "display": "standalone",
+  "theme_color": "#202124",
+  "background_color": "#3c4043",
+  "icons": [
+    {
+      "src": "assets/app_icon_256.png",
+      "sizes": "256x256",
+      "type": "image/png"
+    }
+  ]
+}
diff --git a/chromeos/components/media_app_ui/resources/pwa.html b/chromeos/components/media_app_ui/resources/pwa.html
new file mode 100644
index 0000000..8cb86f24
--- /dev/null
+++ b/chromeos/components/media_app_ui/resources/pwa.html
@@ -0,0 +1,6 @@
+<!-- Copyright 2019 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. -->
+<!-- TODO(crbug/896575): Delete when manifest URL installs are implemented. -->
+<!DOCTYPE html>
+<link rel="manifest" href="manifest.json">
diff --git a/chromeos/resources/media_app_resources.grdp b/chromeos/resources/media_app_resources.grdp
index e604bc30a..b11954b 100644
--- a/chromeos/resources/media_app_resources.grdp
+++ b/chromeos/resources/media_app_resources.grdp
@@ -1,8 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
 <grit-part>
+  <!-- Privileged app host contents. -->
   <include name="IDR_MEDIA_APP_INDEX_HTML"
       file="../components/media_app_ui/resources/index.html"
       type="BINDATA" />
+  <include name="IDR_MEDIA_APP_PWA_HTML"
+      file="../components/media_app_ui/resources/pwa.html"
+      type="BINDATA" />
+  <include name="IDR_MEDIA_APP_MANIFEST"
+      file="../components/media_app_ui/resources/manifest.json"
+      type="BINDATA" />
+
+  <!-- Unprivileged guest contents. -->
   <include name="IDR_MEDIA_APP_APP_HTML"
       file="../components/media_app_ui/resources/app.html"
       type="BINDATA" />
@@ -17,6 +26,11 @@
       <include name="IDR_MEDIA_APP_DROP_TARGET_MODULE_JS"
           file="../components/media_app_ui/resources/app/app/js/app_drop_target_module.js"
           type="BINDATA" />
+
+      <!-- Note the icon is fetched from the privileged origin. -->
+      <include name="IDR_MEDIA_APP_ICON_256"
+            file="../components/media_app_ui/resources/app/app/assets/app_icon_256.png"
+            type="BINDATA" />
     </then>
     <else>
       <include name="IDR_MEDIA_APP_APP_JS"
@@ -28,6 +42,11 @@
       <include name="IDR_MEDIA_APP_DROP_TARGET_MODULE_JS"
           file="../components/media_app_ui/resources/mock/js/mock_module.js"
           type="BINDATA" />
+
+      <!-- Use a placeholder icon when enable_cros_media_app = false. -->
+      <include name="IDR_MEDIA_APP_ICON_256"
+            file="../../ui/file_manager/gallery/images/icon256.png"
+            type="BINDATA" />
     </else>
   </if>
 </grit-part>
diff --git a/components/arc/session/arc_vm_client_adapter.cc b/components/arc/session/arc_vm_client_adapter.cc
index ead6aeb..224dc335 100644
--- a/components/arc/session/arc_vm_client_adapter.cc
+++ b/components/arc/session/arc_vm_client_adapter.cc
@@ -27,6 +27,7 @@
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/threading/scoped_blocking_call.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/dbus/concierge_client.h"
@@ -51,30 +52,66 @@
 constexpr const char kRootFs[] = "system.raw.img";
 constexpr const char kVendorImage[] = "vendor.raw.img";
 
+// A move-only class to hold status of the host file system.
+class FileSystemStatus {
+ public:
+  FileSystemStatus(FileSystemStatus&& rhs) = default;
+  ~FileSystemStatus() = default;
+  FileSystemStatus& operator=(FileSystemStatus&& rhs) = default;
+
+  bool is_host_rootfs_writable() const { return is_host_rootfs_writable_; }
+  const base::FilePath& system_image_path() const { return system_image_path_; }
+  const base::FilePath& vendor_image_path() const { return vendor_image_path_; }
+  const base::FilePath& guest_kernel_path() const { return guest_kernel_path_; }
+  const base::FilePath& fstab_path() const { return fstab_path_; }
+
+  static FileSystemStatus GetFileSystemStatusBlocking() {
+    return FileSystemStatus();
+  }
+
+ private:
+  FileSystemStatus()
+      : is_host_rootfs_writable_(IsHostRootfsWritable()),
+        system_image_path_(SelectDlcOrBuiltin(base::FilePath(kRootFs))),
+        vendor_image_path_(SelectDlcOrBuiltin(base::FilePath(kVendorImage))),
+        guest_kernel_path_(SelectDlcOrBuiltin(base::FilePath(kKernel))),
+        fstab_path_(SelectDlcOrBuiltin(base::FilePath(kFstab))) {}
+
+  static bool IsHostRootfsWritable() {
+    base::ScopedBlockingCall scoped_blocking_call(
+        FROM_HERE, base::BlockingType::MAY_BLOCK);
+    struct statvfs buf;
+    if (statvfs("/", &buf) < 0) {
+      PLOG(ERROR) << "statvfs() failed";
+      return false;
+    }
+    const bool rw = !(buf.f_flag & ST_RDONLY);
+    VLOG(1) << "Host's rootfs is " << (rw ? "rw" : "ro");
+    return rw;
+  }
+
+  static base::FilePath SelectDlcOrBuiltin(const base::FilePath& file) {
+    const base::FilePath dlc_path = base::FilePath(kDlcPath).Append(file);
+    if (base::PathExists(dlc_path)) {
+      VLOG(1) << "arcvm-dlc will be used for " << file.value();
+      return dlc_path;
+    }
+    return base::FilePath(kBuiltinPath).Append(file);
+  }
+
+  bool is_host_rootfs_writable_;
+  base::FilePath system_image_path_;
+  base::FilePath vendor_image_path_;
+  base::FilePath guest_kernel_path_;
+  base::FilePath fstab_path_;
+
+  DISALLOW_COPY_AND_ASSIGN(FileSystemStatus);
+};
+
 chromeos::ConciergeClient* GetConciergeClient() {
   return chromeos::DBusThreadManager::Get()->GetConciergeClient();
 }
 
-bool IsHostRootfsWritable() {
-  struct statvfs buf;
-  if (statvfs("/", &buf) < 0) {
-    PLOG(ERROR) << "statvfs() failed";
-    return false;
-  }
-  const bool rw = !(buf.f_flag & ST_RDONLY);
-  VLOG(1) << "Host's rootfs is " << (rw ? "rw" : "ro");
-  return rw;
-}
-
-base::FilePath SelectDlcOrBuiltin(const base::FilePath& file) {
-  const base::FilePath dlc_path = base::FilePath(kDlcPath).Append(file);
-  if (base::PathExists(dlc_path)) {
-    VLOG(1) << "arcvm-dlc will be used for " << file.value();
-    return dlc_path;
-  }
-  return base::FilePath(kBuiltinPath).Append(file);
-}
-
 // TODO(pliard): Export host-side /data to the VM, and remove the function.
 vm_tools::concierge::CreateDiskImageRequest CreateArcDiskRequest(
     const std::string& user_id_hash,
@@ -180,7 +217,8 @@
 vm_tools::concierge::StartArcVmRequest CreateStartArcVmRequest(
     const std::string& user_id_hash,
     uint32_t cpus,
-    const std::string& disk_path,
+    const base::FilePath& data_disk_path,
+    const FileSystemStatus& file_system_status,
     std::vector<std::string> kernel_cmdline) {
   vm_tools::concierge::StartArcVmRequest request;
 
@@ -188,7 +226,7 @@
   request.set_owner_id(user_id_hash);
 
   request.add_params("root=/dev/vda");
-  if (IsHostRootfsWritable())
+  if (file_system_status.is_host_rootfs_writable())
     request.add_params("rw");
   request.add_params("init=/init");
   for (auto& entry : kernel_cmdline)
@@ -196,28 +234,27 @@
 
   vm_tools::concierge::VirtualMachineSpec* vm = request.mutable_vm();
 
-  vm->set_kernel(SelectDlcOrBuiltin(base::FilePath(kKernel)).value());
+  vm->set_kernel(file_system_status.guest_kernel_path().value());
 
   // Add / as /dev/vda.
-  vm->set_rootfs(SelectDlcOrBuiltin(base::FilePath(kRootFs)).value());
+  vm->set_rootfs(file_system_status.system_image_path().value());
 
   // Add /data as /dev/vdb.
   vm_tools::concierge::DiskImage* disk_image = request.add_disks();
-  disk_image->set_path(disk_path);
+  disk_image->set_path(data_disk_path.value());
   disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO);
   disk_image->set_writable(true);
   disk_image->set_do_mount(true);
   // Add /vendor as /dev/vdc.
   disk_image = request.add_disks();
-  disk_image->set_path(
-      SelectDlcOrBuiltin(base::FilePath(kVendorImage)).value());
+  disk_image->set_path(file_system_status.vendor_image_path().value());
 
   disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO);
   disk_image->set_writable(false);
   disk_image->set_do_mount(true);
 
   // Add Android fstab.
-  request.set_fstab(SelectDlcOrBuiltin(base::FilePath(kFstab)).value());
+  request.set_fstab(file_system_status.fstab_path().value());
 
   // Add cpus.
   request.set_cpus(cpus);
@@ -225,6 +262,8 @@
   return request;
 }
 
+// Gets a system property managed by crossystem. This function can be called
+// only with base::MayBlock().
 int GetSystemPropertyInt(const std::string& property) {
   std::string output;
   if (!base::GetAppOutput({kCrosSystemPath, property}, &output))
@@ -239,12 +278,11 @@
                            public chromeos::ConciergeClient::VmObserver,
                            public chromeos::ConciergeClient::Observer {
  public:
-  // Initializing |is_dev_mode_| and |is_host_on_vm_| is not always very fast.
-  // Try to initialize them in the constructor which usually runs when the
-  // system is not busy.
+  // Initializing |is_host_on_vm_| and |is_dev_mode_| is not always very fast.
+  // Try to initialize them in the constructor and in StartMiniArc respectively.
+  // They usually run when the system is not busy.
   ArcVmClientAdapter()
-      : is_dev_mode_(GetSystemPropertyInt("cros_debug") == 1),
-        is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance()
+      : is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance()
                            ->IsRunningOnVm()) {
     auto* client = GetConciergeClient();
     client->AddVmObserver(this);
@@ -292,9 +330,14 @@
             StartArcMiniContainerRequest_PlayStoreAutoUpdate_AUTO_UPDATE_OFF) {
       play_store_auto_update_ = false;
     }
-    base::SequencedTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), true));
-    should_notify_observers_ = true;
+    base::PostTaskAndReplyWithResult(
+        FROM_HERE,
+        {base::ThreadPool(), base::MayBlock(),
+         base::TaskPriority::USER_VISIBLE},
+        base::BindOnce(
+            []() { return GetSystemPropertyInt("cros_debug") == 1; }),
+        base::BindOnce(&ArcVmClientAdapter::OnIsDevMode,
+                       weak_factory_.GetWeakPtr(), std::move(callback)));
   }
 
   void UpgradeArc(const UpgradeArcContainerRequest& request,
@@ -332,6 +375,14 @@
   void ConciergeServiceRestarted() override {}
 
  private:
+  void OnIsDevMode(chromeos::VoidDBusMethodCallback callback,
+                   bool is_dev_mode) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback), true));
+    is_dev_mode_ = is_dev_mode;
+    should_notify_observers_ = true;
+  }
+
   void OnConciergeStarted(chromeos::VoidDBusMethodCallback callback,
                           bool success) {
     if (!success) {
@@ -342,7 +393,9 @@
     VLOG(1) << "Concierge service started for arcvm.";
 
     base::PostTaskAndReplyWithResult(
-        FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+        FROM_HERE,
+        {base::ThreadPool(), base::MayBlock(),
+         base::TaskPriority::USER_VISIBLE},
         base::BindOnce(&base::SysInfo::AmountOfFreeDiskSpace,
                        base::FilePath(kHomeDirectory)),
         base::BindOnce(&ArcVmClientAdapter::CreateDiskImageAfterSizeCheck,
@@ -388,10 +441,26 @@
     VLOG(1) << "Disk image for arcvm ready. status=" << response.status()
             << ", disk=" << response.disk_path();
 
+    base::PostTaskAndReplyWithResult(
+        FROM_HERE,
+        {base::ThreadPool(), base::MayBlock(),
+         base::TaskPriority::USER_VISIBLE},
+        base::BindOnce(&FileSystemStatus::GetFileSystemStatusBlocking),
+        base::BindOnce(&ArcVmClientAdapter::OnFileSystemStatus,
+                       weak_factory_.GetWeakPtr(), std::move(callback),
+                       base::FilePath(response.disk_path())));
+  }
+
+  void OnFileSystemStatus(chromeos::VoidDBusMethodCallback callback,
+                          const base::FilePath& data_disk_path,
+                          FileSystemStatus file_system_status) {
+    VLOG(2) << "Got file system status";
+    DCHECK(is_dev_mode_);
     std::vector<std::string> kernel_cmdline = GenerateKernelCmdline(
-        lcd_density_, play_store_auto_update_, is_dev_mode_, is_host_on_vm_);
-    auto start_request = CreateStartArcVmRequest(
-        user_id_hash_, cpus_, response.disk_path(), std::move(kernel_cmdline));
+        lcd_density_, play_store_auto_update_, *is_dev_mode_, is_host_on_vm_);
+    auto start_request =
+        CreateStartArcVmRequest(user_id_hash_, cpus_, data_disk_path,
+                                file_system_status, std::move(kernel_cmdline));
     GetConciergeClient()->StartArcVm(
         start_request,
         base::BindOnce(&ArcVmClientAdapter::OnStartArcVmReply,
@@ -470,7 +539,7 @@
     VLOG(1) << "OnArcVmServerProxyJobStopped result=" << result;
   }
 
-  const bool is_dev_mode_;
+  base::Optional<bool> is_dev_mode_;
   // True when the *host* is running on a VM.
   const bool is_host_on_vm_;
 
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc
index 2441b10..9e40dc2 100644
--- a/components/autofill/core/browser/autofill_metrics.cc
+++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -927,6 +927,13 @@
 }
 
 // static
+void AutofillMetrics::LogCardUnmaskPreflightDuration(
+    const base::TimeDelta& duration) {
+  base::UmaHistogramLongTimes("Autofill.BetterAuth.CardUnmaskPreflightDuration",
+                              duration);
+}
+
+// static
 void AutofillMetrics::LogUnmaskPromptEvent(UnmaskPromptEvent event) {
   UMA_HISTOGRAM_ENUMERATION("Autofill.UnmaskPrompt.Events", event,
                             NUM_UNMASK_PROMPT_EVENTS);
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h
index 4cac565..bf71f97 100644
--- a/components/autofill/core/browser/autofill_metrics.h
+++ b/components/autofill/core/browser/autofill_metrics.h
@@ -1037,6 +1037,10 @@
   // GetDetailsForGetRealPan).
   static void LogCardUnmaskPreflightCalled();
 
+  // Logs the duration of the PaymentsClient::GetUnmaskDetails() call (aka
+  // GetDetailsForGetRealPan).
+  static void LogCardUnmaskPreflightDuration(const base::TimeDelta& duration);
+
   // Logs |event| to the unmask prompt events histogram.
   static void LogUnmaskPromptEvent(UnmaskPromptEvent event);
 
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc
index 56417a3..81d944b 100644
--- a/components/autofill/core/browser/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -37,6 +37,7 @@
 #include "components/autofill/core/browser/test_autofill_client.h"
 #include "components/autofill/core/browser/test_autofill_driver.h"
 #include "components/autofill/core/browser/test_autofill_manager.h"
+#include "components/autofill/core/browser/test_autofill_tick_clock.h"
 #include "components/autofill/core/browser/test_form_data_importer.h"
 #include "components/autofill/core/browser/test_form_structure.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
@@ -4290,6 +4291,8 @@
       features::kAutofillCreditCardAuthentication);
   std::string preflight_call_metric =
       "Autofill.BetterAuth.CardUnmaskPreflightCalled";
+  std::string preflight_latency_metric =
+      "Autofill.BetterAuth.CardUnmaskPreflightDuration";
 
   // Set up our form data.
   FormData form;
@@ -4314,6 +4317,7 @@
                                           form.fields[0]);
     // If no masked server cards are available, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
   }
 
   {
@@ -4328,6 +4332,7 @@
                                           form.fields[0]);
     // If user is not verifiable, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
   }
 
   {
@@ -4342,6 +4347,7 @@
                                           form.fields[0]);
     // If no masked server cards are available, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
   }
 
   {
@@ -4358,8 +4364,10 @@
     // user is eligible for FIDO authentication (except iOS).
 #if defined(OS_IOS)
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
 #else
     histogram_tester.ExpectTotalCount(preflight_call_metric, 1);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 1);
 #endif
   }
 
@@ -4377,8 +4385,10 @@
     // user is eligible for FIDO authentication (except iOS).
 #if defined(OS_IOS)
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
 #else
     histogram_tester.ExpectTotalCount(preflight_call_metric, 1);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 1);
 #endif
   }
 }
@@ -7562,6 +7572,10 @@
 // Verify that we correctly log metrics tracking the duration of form fill.
 // TODO(crbug.com/1009364) Test is flake on many builders.
 TEST_F(AutofillMetricsTest, FormFillDuration) {
+  base::TimeTicks now = AutofillTickClock::NowTicks();
+  TestAutofillTickClock test_clock;
+  test_clock.SetNowTicks(now);
+
   // Load a fillable form.
   FormData form;
   form.name = ASCIIToUTF16("TestForm");
@@ -7603,6 +7617,10 @@
     SCOPED_TRACE("Test 1");
     base::HistogramTester histogram_tester;
     autofill_manager_->OnFormsSeen(forms, AutofillTickClock::NowTicks());
+    base::TimeTicks parse_time = autofill_manager_->form_structures()
+                                     .begin()
+                                     ->second->form_parsed_timestamp();
+    test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17));
     autofill_manager_->OnFormSubmitted(form, false,
                                        SubmissionSource::FORM_SUBMISSION);
 
@@ -7629,6 +7647,7 @@
     autofill_manager_->OnTextFieldDidChange(
         form, form.fields.front(), gfx::RectF(),
         parse_time + base::TimeDelta::FromMicroseconds(3));
+    test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17));
     autofill_manager_->OnFormSubmitted(form, false,
                                        SubmissionSource::FORM_SUBMISSION);
 
@@ -7656,6 +7675,7 @@
                                      ->second->form_parsed_timestamp();
     autofill_manager_->OnDidFillAutofillFormData(
         form, parse_time + base::TimeDelta::FromMicroseconds(5));
+    test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17));
     autofill_manager_->OnFormSubmitted(form, false,
                                        SubmissionSource::FORM_SUBMISSION);
 
@@ -7689,6 +7709,7 @@
     autofill_manager_->OnTextFieldDidChange(
         form, form.fields.front(), gfx::RectF(),
         parse_time + base::TimeDelta::FromMicroseconds(3));
+    test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17));
     autofill_manager_->OnFormSubmitted(form, false,
                                        SubmissionSource::FORM_SUBMISSION);
 
@@ -7720,6 +7741,7 @@
     autofill_manager_->OnTextFieldDidChange(
         form, form.fields.front(), gfx::RectF(),
         parse_time + base::TimeDelta::FromMicroseconds(3));
+    test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17));
     autofill_manager_->OnFormSubmitted(form, false,
                                        SubmissionSource::FORM_SUBMISSION);
 
@@ -7748,6 +7770,7 @@
       if (kv.second->form_parsed_timestamp() > parse_time)
         parse_time = kv.second->form_parsed_timestamp();
     }
+    test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17));
     autofill_manager_->OnFormSubmitted(second_form, false,
                                        SubmissionSource::FORM_SUBMISSION);
 
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager.cc b/components/autofill/core/browser/payments/credit_card_access_manager.cc
index cd7d3d8..5e9a1ee 100644
--- a/components/autofill/core/browser/payments/credit_card_access_manager.cc
+++ b/components/autofill/core/browser/payments/credit_card_access_manager.cc
@@ -25,6 +25,7 @@
 #include "components/autofill/core/browser/metrics/credit_card_form_event_logger.h"
 #include "components/autofill/core/browser/payments/payments_client.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
+#include "components/autofill/core/common/autofill_tick_clock.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -216,6 +217,7 @@
         base::BindOnce(&CreditCardAccessManager::OnDidGetUnmaskDetails,
                        weak_ptr_factory_.GetWeakPtr()),
         personal_data_manager_->app_locale());
+    preflight_call_timestamp_ = AutofillTickClock::NowTicks();
     AutofillMetrics::LogCardUnmaskPreflightCalled();
   }
 }
@@ -223,6 +225,10 @@
 void CreditCardAccessManager::OnDidGetUnmaskDetails(
     AutofillClient::PaymentsRpcResult result,
     AutofillClient::UnmaskDetails& unmask_details) {
+  // Log latency for preflight call.
+  AutofillMetrics::LogCardUnmaskPreflightDuration(
+      AutofillTickClock::NowTicks() - preflight_call_timestamp_);
+
   unmask_details_request_in_progress_ = false;
   unmask_details_.offer_fido_opt_in = unmask_details.offer_fido_opt_in;
   unmask_details_.unmask_auth_method = unmask_details.unmask_auth_method;
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager.h b/components/autofill/core/browser/payments/credit_card_access_manager.h
index 70d70d29..96dc2f43 100644
--- a/components/autofill/core/browser/payments/credit_card_access_manager.h
+++ b/components/autofill/core/browser/payments/credit_card_access_manager.h
@@ -181,6 +181,9 @@
   // For logging metrics. May be NULL for tests.
   CreditCardFormEventLogger* form_event_logger_;
 
+  // Timestamp used for metrics.
+  base::TimeTicks preflight_call_timestamp_;
+
   // Meant for histograms recorded in FullCardRequest.
   base::TimeTicks form_parsed_timestamp_;
 
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
index 4bd82313..b48f0bd 100644
--- a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
@@ -516,6 +516,8 @@
 TEST_F(CreditCardAccessManagerTest, CardUnmaskPreflightCalledMetric) {
   std::string preflight_call_metric =
       "Autofill.BetterAuth.CardUnmaskPreflightCalled";
+  std::string preflight_latency_metric =
+      "Autofill.BetterAuth.CardUnmaskPreflightDuration";
 
   {
     // Create local card and set user as eligible for FIDO auth.
@@ -532,6 +534,7 @@
 
     // If only local cards are available, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
   }
 
   {
@@ -549,6 +552,7 @@
 
     // If user is not verifiable, then no preflight call is made.
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
   }
 
   {
@@ -568,8 +572,10 @@
     // eligible for FIDO authentication, except on iOS.
 #if defined(OS_IOS)
     histogram_tester.ExpectTotalCount(preflight_call_metric, 0);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 0);
 #else
     histogram_tester.ExpectTotalCount(preflight_call_metric, 1);
+    histogram_tester.ExpectTotalCount(preflight_latency_metric, 1);
 #endif
   }
 }
diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc
index 1d37bb35..83791658d 100644
--- a/components/content_settings/core/common/cookie_settings_base.cc
+++ b/components/content_settings/core/common/cookie_settings_base.cc
@@ -8,6 +8,7 @@
 #include "base/debug/task_trace.h"
 #include "base/feature_list.h"
 #include "base/logging.h"
+#include "build/build_config.h"
 #include "components/content_settings/core/common/features.h"
 #include "net/base/net_errors.h"
 #include "net/base/static_cookie_policy.h"
@@ -71,9 +72,11 @@
 bool CookieSettingsBase::IsCookieAccessAllowed(
     const GURL& url,
     const GURL& first_party_url) const {
-  DCHECK(!base::FeatureList::IsEnabled(kImprovedCookieControls) ||
-         !first_party_url.is_empty() || url.is_empty())
-      << url;
+#if !defined(OS_IOS)
+  // IOS uses this method with an empty |first_party_url| but we don't have
+  // content settings on IOS, so it does not matter.
+  DCHECK(!first_party_url.is_empty() || url.is_empty()) << url;
+#endif
   ContentSetting setting;
   GetCookieSetting(url, first_party_url, nullptr, &setting);
   return IsAllowed(setting);
@@ -85,17 +88,15 @@
     const base::Optional<url::Origin>& top_frame_origin) const {
   // TODO(crbug.com/988398): top_frame_origin is not yet always available.
   // Ensure that the DCHECK always passes and remove the FeatureList check.
-  if (!base::FeatureList::IsEnabled(kImprovedCookieControls) &&
-      !base::FeatureList::IsEnabled(
-          kImprovedCookieControlsForThirdPartyCookieBlocking)) {
-    return IsCookieAccessAllowed(url, site_for_cookies);
-  }
-  DCHECK(top_frame_origin || site_for_cookies.is_empty())
+  DCHECK((!base::FeatureList::IsEnabled(kImprovedCookieControls) &&
+          !base::FeatureList::IsEnabled(
+              kImprovedCookieControlsForThirdPartyCookieBlocking)) ||
+         top_frame_origin || site_for_cookies.is_empty())
       << url << " " << site_for_cookies;
 
   ContentSetting setting;
   GetCookieSettingInternal(
-      url, top_frame_origin ? top_frame_origin->GetURL() : GURL(),
+      url, top_frame_origin ? top_frame_origin->GetURL() : site_for_cookies,
       IsThirdPartyRequest(url, site_for_cookies), nullptr, &setting);
   return IsAllowed(setting);
 }
diff --git a/components/exo/client_controlled_shell_surface_unittest.cc b/components/exo/client_controlled_shell_surface_unittest.cc
index 5d72514..dc075bb 100644
--- a/components/exo/client_controlled_shell_surface_unittest.cc
+++ b/components/exo/client_controlled_shell_surface_unittest.cc
@@ -1029,12 +1029,12 @@
   split_view_controller->SnapWindow(window1, ash::SplitViewController::LEFT);
   state1->set_bounds_locally(true);
   window1->SetBounds(split_view_controller->GetSnappedWindowBoundsInScreen(
-      window1, ash::SplitViewController::LEFT));
+      ash::SplitViewController::LEFT));
   state1->set_bounds_locally(false);
   EXPECT_EQ(window_state1->GetStateType(), ash::WindowStateType::kLeftSnapped);
   EXPECT_EQ(shell_surface1->GetWidget()->GetWindowBoundsInScreen(),
             split_view_controller->GetSnappedWindowBoundsInScreen(
-                window1, ash::SplitViewController::LEFT));
+                ash::SplitViewController::LEFT));
   EXPECT_TRUE(HasBackdrop());
   split_view_controller->EndSplitView();
 
@@ -1042,12 +1042,12 @@
   split_view_controller->SnapWindow(window1, ash::SplitViewController::RIGHT);
   state1->set_bounds_locally(true);
   window1->SetBounds(split_view_controller->GetSnappedWindowBoundsInScreen(
-      window1, ash::SplitViewController::RIGHT));
+      ash::SplitViewController::RIGHT));
   state1->set_bounds_locally(false);
   EXPECT_EQ(window_state1->GetStateType(), ash::WindowStateType::kRightSnapped);
   EXPECT_EQ(shell_surface1->GetWidget()->GetWindowBoundsInScreen(),
             split_view_controller->GetSnappedWindowBoundsInScreen(
-                window1, ash::SplitViewController::RIGHT));
+                ash::SplitViewController::RIGHT));
   EXPECT_TRUE(HasBackdrop());
 }
 
diff --git a/components/favicon/content/content_favicon_driver_unittest.cc b/components/favicon/content/content_favicon_driver_unittest.cc
index 5dac5cea..501e3f7 100644
--- a/components/favicon/content/content_favicon_driver_unittest.cc
+++ b/components/favicon/content/content_favicon_driver_unittest.cc
@@ -15,6 +15,7 @@
 #include "components/favicon/core/test/mock_favicon_service.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/favicon_url.h"
+#include "content/public/test/navigation_simulator.h"
 #include "content/public/test/test_renderer_host.h"
 #include "content/public/test/web_contents_tester.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -80,8 +81,6 @@
         ContentFaviconDriver::FromWebContents(web_contents());
     web_contents_tester()->NavigateAndCommit(page_url);
     static_cast<content::WebContentsObserver*>(favicon_driver)
-        ->DocumentOnLoadCompletedInMainFrame();
-    static_cast<content::WebContentsObserver*>(favicon_driver)
         ->DidUpdateFaviconURL(candidates);
     base::RunLoop().RunUntilIdle();
   }
@@ -106,7 +105,10 @@
 TEST_F(ContentFaviconDriverTest, ShouldNotCauseImageDownload) {
   ContentFaviconDriver* favicon_driver =
       ContentFaviconDriver::FromWebContents(web_contents());
-  web_contents_tester()->NavigateAndCommit(kPageURL);
+  auto navigation = content::NavigationSimulator::CreateBrowserInitiated(
+      kPageURL, web_contents());
+  navigation->SetKeepLoading(true);
+  navigation->Commit();
   static_cast<content::WebContentsObserver*>(favicon_driver)
       ->DidUpdateFaviconURL({content::FaviconURL(
           kIconURL, content::FaviconURL::IconType::kFavicon, kEmptyIconSizes)});
diff --git a/components/omnibox/browser/DEPS b/components/omnibox/browser/DEPS
index e060145..5c03891 100644
--- a/components/omnibox/browser/DEPS
+++ b/components/omnibox/browser/DEPS
@@ -28,6 +28,7 @@
   "+components/variations",
   "+components/vector_icons",
   "+content/public/browser",
+  "+content/public/common",
   "+extensions/common/constants.h",
   "+net",
   "+services/network/public/cpp",
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc
index b80fc63a..68446166 100644
--- a/components/omnibox/browser/autocomplete_controller.cc
+++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -74,9 +74,8 @@
   // enter one of SEARCH_SUGGEST or NAVSUGGEST.
   if (provider) {
     if (provider->type() == AutocompleteProvider::TYPE_ZERO_SUGGEST &&
-        (match != AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED)) {
-      DCHECK((match == AutocompleteMatchType::SEARCH_SUGGEST) ||
-             (match == AutocompleteMatchType::NAVSUGGEST));
+        (match == AutocompleteMatchType::SEARCH_SUGGEST ||
+         match == AutocompleteMatchType::NAVSUGGEST)) {
       // We abuse this subtype and use it to for zero-suggest suggestions that
       // aren't personalized by the server. That is, it indicates either
       // client-side most-likely URL suggestions or server-side suggestions
@@ -266,8 +265,8 @@
   if (provider_types & AutocompleteProvider::TYPE_SHORTCUTS)
     providers_.push_back(new ShortcutsProvider(provider_client_.get()));
   if (provider_types & AutocompleteProvider::TYPE_ZERO_SUGGEST) {
-    zero_suggest_provider_ = ZeroSuggestProvider::Create(
-        provider_client_.get(), history_url_provider_, this);
+    zero_suggest_provider_ =
+        ZeroSuggestProvider::Create(provider_client_.get(), this);
     if (zero_suggest_provider_)
       providers_.push_back(zero_suggest_provider_);
   }
diff --git a/components/omnibox/browser/location_bar_model_impl.cc b/components/omnibox/browser/location_bar_model_impl.cc
index 6d18ad3..07620e4 100644
--- a/components/omnibox/browser/location_bar_model_impl.cc
+++ b/components/omnibox/browser/location_bar_model_impl.cc
@@ -18,8 +18,10 @@
 #include "components/omnibox/common/omnibox_features.h"
 #include "components/prefs/pref_service.h"
 #include "components/search_engines/template_url_service.h"
+#include "components/security_state/core/features.h"
 #include "components/security_state/core/security_state.h"
 #include "components/strings/grit/components_strings.h"
+#include "content/public/common/origin_util.h"
 #include "net/cert/cert_status_flags.h"
 #include "net/cert/x509_certificate.h"
 #include "net/ssl/ssl_connection_status_flags.h"
@@ -179,6 +181,18 @@
 const gfx::VectorIcon& LocationBarModelImpl::GetVectorIcon() const {
 #if (!defined(OS_ANDROID) || BUILDFLAG(ENABLE_VR)) && !defined(OS_IOS)
   auto* const icon_override = delegate_->GetVectorIconOverride();
+  GURL url = GetURL();
+  bool http_danger_warning_enabled = false;
+  if (base::FeatureList::IsEnabled(
+          security_state::features::kMarkHttpAsFeature)) {
+    std::string parameter = base::GetFieldTrialParamValueByFeature(
+        security_state::features::kMarkHttpAsFeature,
+        security_state::features::kMarkHttpAsFeatureParameterName);
+    if (parameter ==
+        security_state::features::kMarkHttpAsParameterDangerWarning) {
+      http_danger_warning_enabled = true;
+    }
+  }
   if (icon_override)
     return *icon_override;
 
@@ -187,7 +201,18 @@
 
   switch (GetSecurityLevel()) {
     case security_state::NONE:
+      // Show a danger triangle icon on HTTPS pages with passive mixed content
+      // when kMarkHttpAsParameterDangerWarning is enabled.
+      if (http_danger_warning_enabled && url.SchemeIsCryptographic()) {
+        return omnibox::kNotSecureWarningIcon;
+      }
+      return omnibox::kHttpIcon;
     case security_state::WARNING:
+      // When kMarkHttpAsParameterDangerWarning is enabled, show a danger
+      // triangle icon unless the page has a non-HTTPS secure origin.
+      if (http_danger_warning_enabled && !content::IsOriginSecure(url)) {
+        return omnibox::kNotSecureWarningIcon;
+      }
       return omnibox::kHttpIcon;
     case security_state::EV_SECURE:
     case security_state::SECURE:
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc
index e6aa8f9..82beb9d5e 100644
--- a/components/omnibox/browser/omnibox_edit_model.cc
+++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -1077,7 +1077,9 @@
   // off).
   // TODO(hfung): Remove this when crbug/271590 is fixed.
   if (client_->CurrentPageExists() && !user_input_in_progress_) {
-    input_ = AutocompleteInput(url_for_editing_, GetPageClassification(),
+    // Send the textfield contents exactly as-is, as otherwise the verbatim
+    // match can be wrong. The full page URL is anyways in set_current_url().
+    input_ = AutocompleteInput(view_->GetText(), GetPageClassification(),
                                client_->GetSchemeClassifier());
     input_.set_current_url(client_->GetURL());
     input_.set_current_title(client_->GetTitle());
@@ -1513,16 +1515,9 @@
         (!popup_model() || !popup_model()->has_selected_match()))
       *alternate_nav_url = result().alternate_nav_url();
   } else {
-    LocationBarModel* location_bar_model = controller()->GetLocationBarModel();
-    base::string16 text_for_match_generation =
-        (user_input_in_progress() ||
-         location_bar_model->GetDisplaySearchTerms(nullptr))
-            ? view_->GetText()
-            : url_for_editing_;
-
     client_->GetAutocompleteClassifier()->Classify(
-        MaybePrependKeyword(text_for_match_generation), is_keyword_selected(),
-        true, GetPageClassification(), match, alternate_nav_url);
+        MaybePrependKeyword(view_->GetText()), is_keyword_selected(), true,
+        GetPageClassification(), match, alternate_nav_url);
   }
 }
 
diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc
index c343828..cfa4be7 100644
--- a/components/omnibox/browser/zero_suggest_provider.cc
+++ b/components/omnibox/browser/zero_suggest_provider.cc
@@ -29,8 +29,9 @@
 #include "components/omnibox/browser/autocomplete_input.h"
 #include "components/omnibox/browser/autocomplete_match.h"
 #include "components/omnibox/browser/autocomplete_match_classification.h"
+#include "components/omnibox/browser/autocomplete_provider_client.h"
 #include "components/omnibox/browser/autocomplete_provider_listener.h"
-#include "components/omnibox/browser/history_url_provider.h"
+#include "components/omnibox/browser/omnibox_field_trial.h"
 #include "components/omnibox/browser/omnibox_pref_names.h"
 #include "components/omnibox/browser/remote_suggestions_service.h"
 #include "components/omnibox/browser/search_provider.h"
@@ -192,9 +193,8 @@
 // static
 ZeroSuggestProvider* ZeroSuggestProvider::Create(
     AutocompleteProviderClient* client,
-    HistoryURLProvider* history_url_provider,
     AutocompleteProviderListener* listener) {
-  return new ZeroSuggestProvider(client, history_url_provider, listener);
+  return new ZeroSuggestProvider(client, listener);
 }
 
 // static
@@ -230,7 +230,7 @@
   permanent_text_ = input.text();
   current_query_ = input.current_url().spec();
   current_title_ = input.current_title();
-  current_url_match_ = MatchForCurrentURL();
+  current_text_match_ = MatchForCurrentText();
 
   TemplateURLRef::SearchTermsArgs search_terms_args;
   search_terms_args.page_classification = current_page_classification_;
@@ -334,10 +334,8 @@
 
 ZeroSuggestProvider::ZeroSuggestProvider(
     AutocompleteProviderClient* client,
-    HistoryURLProvider* history_url_provider,
     AutocompleteProviderListener* listener)
     : BaseSearchProvider(AutocompleteProvider::TYPE_ZERO_SUGGEST, client),
-      history_url_provider_(history_url_provider),
       listener_(listener),
       result_type_running_(NONE) {
   // Record whether remote zero suggest is possible for this user / profile.
@@ -542,10 +540,10 @@
     // URL suggestions to users who are not in the personalized field trial for
     // zero query suggestions.
     if (IsNTPPage(current_page_classification_) ||
-        !current_url_match_.destination_url.is_valid()) {
+        !current_text_match_.destination_url.is_valid()) {
       return;
     }
-    matches_.push_back(current_url_match_);
+    matches_.push_back(current_text_match_);
     int relevance = 600;
     if (num_results > 0) {
       UMA_HISTOGRAM_COUNTS_1M(
@@ -569,12 +567,12 @@
   if (num_results == 0)
     return;
 
-  // Do not add the default URL match if we're on the NTP to prevent
+  // Do not add the default text match if we're on the NTP to prevent
   // chrome-native://newtab or chrome://newtab from showing up on the list of
   // suggestions.
   if (!IsNTPPage(current_page_classification_) &&
-      current_url_match_.destination_url.is_valid()) {
-    matches_.push_back(current_url_match_);
+      current_text_match_.destination_url.is_valid()) {
+    matches_.push_back(current_text_match_);
   }
 
   for (MatchMap::const_iterator it(map.begin()); it != map.end(); ++it)
@@ -587,7 +585,7 @@
   }
 }
 
-AutocompleteMatch ZeroSuggestProvider::MatchForCurrentURL() {
+AutocompleteMatch ZeroSuggestProvider::MatchForCurrentText() {
   // The placeholder suggestion for the current URL has high relevance so
   // that it is in the first suggestion slot and inline autocompleted. It
   // gets dropped as soon as the user types something.
@@ -597,9 +595,15 @@
       (base::FeatureList::IsEnabled(omnibox::kDisplayTitleForCurrentUrl))
           ? current_title_
           : base::string16();
-  return VerbatimMatchForURL(client(), tmp, GURL(current_query_), description,
-                             history_url_provider_,
-                             results_.verbatim_relevance);
+
+  // We pass a nullptr as the |history_url_provider| parameter now to force
+  // VerbatimMatch to do a classification, since the text can be a search query.
+  // TODO(tommycli): Simplify this - probably just bypass VerbatimMatchForURL.
+  AutocompleteMatch match = VerbatimMatchForURL(
+      client(), tmp, GURL(current_query_), description,
+      /*history_url_provider=*/nullptr, results_.verbatim_relevance);
+  match.provider = this;
+  return match;
 }
 
 bool ZeroSuggestProvider::AllowZeroSuggestSuggestions(
diff --git a/components/omnibox/browser/zero_suggest_provider.h b/components/omnibox/browser/zero_suggest_provider.h
index 049b782..f06fe213 100644
--- a/components/omnibox/browser/zero_suggest_provider.h
+++ b/components/omnibox/browser/zero_suggest_provider.h
@@ -20,7 +20,6 @@
 #include "third_party/metrics_proto/omnibox_event.pb.h"
 
 class AutocompleteProviderListener;
-class HistoryURLProvider;
 
 namespace base {
 class Value;
@@ -55,7 +54,6 @@
 
   // Creates and returns an instance of this provider.
   static ZeroSuggestProvider* Create(AutocompleteProviderClient* client,
-                                     HistoryURLProvider* history_url_provider,
                                      AutocompleteProviderListener* listener);
 
   // Registers a preference used to cache zero suggest results.
@@ -83,7 +81,6 @@
   FRIEND_TEST_ALL_PREFIXES(ZeroSuggestProviderTest,
                            TestStartWillStopForSomeInput);
   ZeroSuggestProvider(AutocompleteProviderClient* client,
-                      HistoryURLProvider* history_url_provider,
                       AutocompleteProviderListener* listener);
 
   ~ZeroSuggestProvider() override;
@@ -146,10 +143,10 @@
   // received.
   void ConvertResultsToAutocompleteMatches();
 
-  // Returns an AutocompleteMatch for the current URL. The match should be in
+  // Returns an AutocompleteMatch for the current text. The match should be in
   // the top position so that pressing enter has the effect of reloading the
   // page.
-  AutocompleteMatch MatchForCurrentURL();
+  AutocompleteMatch MatchForCurrentText();
 
   // When the user is in the Most Visited field trial, we ask the TopSites
   // service for the most visited URLs. It then calls back to this function to
@@ -180,9 +177,6 @@
   ResultType TypeOfResultToRun(const GURL& current_url,
                                const GURL& suggest_url);
 
-  // Used for efficiency when creating the verbatim match.  Can be null.
-  HistoryURLProvider* history_url_provider_;
-
   AutocompleteProviderListener* listener_;
 
   // The result type that is currently being processed by provider.
@@ -209,8 +203,9 @@
   // Loader used to retrieve results.
   std::unique_ptr<network::SimpleURLLoader> loader_;
 
-  // Suggestion for the current URL.
-  AutocompleteMatch current_url_match_;
+  // The verbatim match for the current text, whether it's a URL or search query
+  // (which can occur for Query in Omnibox / Query Refinements).
+  AutocompleteMatch current_text_match_;
 
   // Contains suggest and navigation results as well as relevance parsed from
   // the response for the most recent zero suggest input URL.
diff --git a/components/omnibox/browser/zero_suggest_provider_unittest.cc b/components/omnibox/browser/zero_suggest_provider_unittest.cc
index c4cacd4..f332002 100644
--- a/components/omnibox/browser/zero_suggest_provider_unittest.cc
+++ b/components/omnibox/browser/zero_suggest_provider_unittest.cc
@@ -187,7 +187,7 @@
             turl_model->GetDefaultSearchProvider()->GetEngineType(
                 turl_model->search_terms_data()));
 
-  provider_ = ZeroSuggestProvider::Create(client_.get(), nullptr, this);
+  provider_ = ZeroSuggestProvider::Create(client_.get(), this);
 }
 
 void ZeroSuggestProviderTest::OnProviderUpdate(bool updated_matches) {
diff --git a/components/printing/common/BUILD.gn b/components/printing/common/BUILD.gn
index a6698e1..0500aa6 100644
--- a/components/printing/common/BUILD.gn
+++ b/components/printing/common/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//mojo/public/tools/bindings/mojom.gni")
+import("//printing/buildflags/buildflags.gni")
 
 static_library("common") {
   sources = [
@@ -35,4 +36,8 @@
   public_deps = [
     "//mojo/public/mojom/base",
   ]
+
+  if (enable_print_preview) {
+    enabled_features = [ "enable_print_preview" ]
+  }
 }
diff --git a/components/printing/common/print.mojom b/components/printing/common/print.mojom
index d1b00877..9166f8d0 100644
--- a/components/printing/common/print.mojom
+++ b/components/printing/common/print.mojom
@@ -14,8 +14,18 @@
 // Render process interface exposed to the browser to handle most of the
 // printing grunt work for RenderView.
 interface PrintRenderFrame {
-  // Tells the RenderFrame to initiate print preview for the entire
-  // document. Optionally provides a |print_renderer| to render print documents.
+  // Tells the RenderFrame to switch the CSS to print media type, render every
+  // requested page using the print preview document's frame/node, and then
+  // switch the CSS back to display media type.
+  PrintForSystemDialog();
+
+  // Tells the RenderFrame to initiate print preview for the entire document.
+  // Optionally provides a |print_renderer| to render print documents.
+  [EnableIf=enable_print_preview]
   InitiatePrintPreview(associated PrintRenderer? print_renderer,
                        bool has_selection);
+
+  // Tells the RenderFrame that the print preview dialog was closed.
+  [EnableIf=enable_print_preview]
+  OnPrintPreviewDialogClosed();
 };
diff --git a/components/printing/common/print_messages.h b/components/printing/common/print_messages.h
index f9f5d1c..200288ee 100644
--- a/components/printing/common/print_messages.h
+++ b/components/printing/common/print_messages.h
@@ -366,9 +366,6 @@
 // Tells the RenderFrame to switch the CSS to print media type, renders every
 // requested pages and switch back the CSS to display media type.
 IPC_MESSAGE_ROUTED0(PrintMsg_PrintPages)
-
-// Like PrintMsg_PrintPages, but using the print preview document's frame/node.
-IPC_MESSAGE_ROUTED0(PrintMsg_PrintForSystemDialog)
 #endif
 
 // Print content of an out-of-process subframe.
@@ -387,9 +384,6 @@
 // called multiple times as the user updates settings.
 IPC_MESSAGE_ROUTED1(PrintMsg_PrintPreview,
                     base::DictionaryValue /* settings */)
-
-// Tells the RenderFrame that print preview dialog was closed.
-IPC_MESSAGE_ROUTED0(PrintMsg_ClosePrintPreviewDialog)
 #endif
 
 // Messages sent from the renderer to the browser.
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc
index 4c0553a..656bb69e 100644
--- a/components/printing/renderer/print_render_frame_helper.cc
+++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -1155,12 +1155,9 @@
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(PrintRenderFrameHelper, message)
     IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages)
-    IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog)
 #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
     IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview)
     IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone)
-    IPC_MESSAGE_HANDLER(PrintMsg_ClosePrintPreviewDialog,
-                        OnClosePrintPreviewDialog)
 #endif  // BUILDFLAG(ENABLE_PRINT_PREVIEW)
     IPC_MESSAGE_HANDLER(PrintMsg_PrintFrameContent, OnPrintFrameContent)
     IPC_MESSAGE_HANDLER(PrintMsg_SetPrintingEnabled, OnSetPrintingEnabled)
@@ -1180,15 +1177,32 @@
 
 void PrintRenderFrameHelper::BindPrintRenderFrameReceiver(
     mojo::PendingAssociatedReceiver<mojom::PrintRenderFrame> receiver) {
-  print_render_frame_receiver_.Bind(std::move(receiver));
+  receivers_.Add(this, std::move(receiver));
 }
 
+void PrintRenderFrameHelper::PrintForSystemDialog() {
+  ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr());
+  if (ipc_nesting_level_ > 1)
+    return;
+  blink::WebLocalFrame* frame = print_preview_context_.source_frame();
+  if (!frame) {
+    NOTREACHED();
+    return;
+  }
+  auto weak_this = weak_ptr_factory_.GetWeakPtr();
+  Print(frame, print_preview_context_.source_node(),
+        PrintRequestType::kRegular);
+  if (weak_this)
+    frame->DispatchAfterPrintEvent();
+  // WARNING: |this| may be gone at this point. Do not do any more work here and
+  // just return.
+}
+
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
 void PrintRenderFrameHelper::InitiatePrintPreview(
     mojom::PrintRendererAssociatedPtrInfo print_renderer,
     bool has_selection) {
-#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
   ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr());
-
   if (ipc_nesting_level_ > 1)
     return;
 
@@ -1208,9 +1222,14 @@
   RequestPrintPreview(has_selection
                           ? PRINT_PREVIEW_USER_INITIATED_SELECTION
                           : PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME);
-#endif  // BUILDFLAG(ENABLE_PRINT_PREVIEW)
 }
 
+void PrintRenderFrameHelper::OnPrintPreviewDialogClosed() {
+  ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr());
+  print_preview_context_.source_frame()->DispatchAfterPrintEvent();
+}
+#endif  // BUILDFLAG(ENABLE_PRINT_PREVIEW)
+
 void PrintRenderFrameHelper::OnPrintPages() {
   if (ipc_nesting_level_ > 1)
     return;
@@ -1231,23 +1250,6 @@
   // just return.
 }
 
-void PrintRenderFrameHelper::OnPrintForSystemDialog() {
-  if (ipc_nesting_level_ > 1)
-    return;
-  blink::WebLocalFrame* frame = print_preview_context_.source_frame();
-  if (!frame) {
-    NOTREACHED();
-    return;
-  }
-  auto weak_this = weak_ptr_factory_.GetWeakPtr();
-  Print(frame, print_preview_context_.source_node(),
-        PrintRequestType::kRegular);
-  if (weak_this)
-    frame->DispatchAfterPrintEvent();
-  // WARNING: |this| may be gone at this point. Do not do any more work here and
-  // just return.
-}
-
 void PrintRenderFrameHelper::GetPageSizeAndContentAreaFromPageLayout(
     const PageSizeMargins& page_layout_in_points,
     gfx::Size* page_size,
@@ -1549,12 +1551,6 @@
   is_printing_enabled_ = enabled;
 }
 
-#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
-void PrintRenderFrameHelper::OnClosePrintPreviewDialog() {
-  print_preview_context_.source_frame()->DispatchAfterPrintEvent();
-}
-#endif
-
 void PrintRenderFrameHelper::OnPrintFrameContent(
     const PrintMsg_PrintFrame_Params& params) {
   if (ipc_nesting_level_ > 1)
diff --git a/components/printing/renderer/print_render_frame_helper.h b/components/printing/renderer/print_render_frame_helper.h
index 624a138e..aca69e7 100644
--- a/components/printing/renderer/print_render_frame_helper.h
+++ b/components/printing/renderer/print_render_frame_helper.h
@@ -19,7 +19,7 @@
 #include "components/printing/common/print.mojom.h"
 #include "content/public/renderer/render_frame_observer.h"
 #include "content/public/renderer/render_frame_observer_tracker.h"
-#include "mojo/public/cpp/bindings/associated_receiver.h"
+#include "mojo/public/cpp/bindings/associated_receiver_set.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
 #include "printing/buildflags/buildflags.h"
 #include "printing/common/metafile_utils.h"
@@ -212,16 +212,18 @@
       mojo::PendingAssociatedReceiver<mojom::PrintRenderFrame> receiver);
 
   // printing::mojom::PrintRenderFrame:
+  void PrintForSystemDialog() override;
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
   void InitiatePrintPreview(
       mojom::PrintRendererAssociatedPtrInfo print_renderer,
       bool has_selection) override;
+  void OnPrintPreviewDialogClosed() override;
+#endif  // BUILDFLAG(ENABLE_PRINT_PREVIEW)
 
   // Message handlers ---------------------------------------------------------
   void OnPrintPages();
-  void OnPrintForSystemDialog();
 #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
   void OnPrintPreview(const base::DictionaryValue& settings);
-  void OnClosePrintPreviewDialog();
 #endif  // BUILDFLAG(ENABLE_PRINT_PREVIEW)
   void OnPrintFrameContent(const PrintMsg_PrintFrame_Params& params);
   void OnPrintingDone(bool success);
@@ -426,8 +428,7 @@
   // etc.).
   mojom::PrintRendererAssociatedPtr print_renderer_;
 
-  mojo::AssociatedReceiver<mojom::PrintRenderFrame>
-      print_render_frame_receiver_{this};
+  mojo::AssociatedReceiverSet<mojom::PrintRenderFrame> receivers_;
 
   // Keeps track of the state of print preview between messages.
   // TODO(vitalybuka): Create PrintPreviewContext when needed and delete after
diff --git a/components/printing/test/print_render_frame_helper_browsertest.cc b/components/printing/test/print_render_frame_helper_browsertest.cc
index 5469a90..7272746f 100644
--- a/components/printing/test/print_render_frame_helper_browsertest.cc
+++ b/components/printing/test/print_render_frame_helper_browsertest.cc
@@ -271,7 +271,7 @@
   }
 
   void OnClosePrintPreviewDialog() {
-    GetPrintRenderFrameHelper()->OnClosePrintPreviewDialog();
+    GetPrintRenderFrameHelper()->OnPrintPreviewDialogClosed();
   }
 #endif  // BUILDFLAG(ENABLE_PRINT_PREVIEW)
 
diff --git a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
index 17683b7..8c6527a 100644
--- a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
+++ b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
@@ -234,7 +234,9 @@
       [dialog setCanSelectHiddenExtension:YES];
     }
   } else {
-    NSOpenPanel* open_dialog = base::mac::ObjCCastStrict<NSOpenPanel>(dialog);
+    // This does not use ObjCCast because the underlying object could be a
+    // non-exported AppKit type (https://crbug.com/995476).
+    NSOpenPanel* open_dialog = static_cast<NSOpenPanel*>(dialog);
 
     if (type_ == SelectFileDialogType::kOpenMultiFile)
       [open_dialog setAllowsMultipleSelection:YES];
@@ -394,7 +396,6 @@
         index = 1;
       }
     } else {
-      CHECK([panel_ isKindOfClass:[NSOpenPanel class]]);
       NSArray* urls = [static_cast<NSOpenPanel*>(panel_) URLs];
       for (NSURL* url in urls)
         if ([url isFileURL])
diff --git a/components/safe_browsing/android/BUILD.gn b/components/safe_browsing/android/BUILD.gn
index ce629d76..f4558a1 100644
--- a/components/safe_browsing/android/BUILD.gn
+++ b/components/safe_browsing/android/BUILD.gn
@@ -45,6 +45,7 @@
     "//components/safe_browsing/db:database_manager",
     "//components/safe_browsing/db:v4_get_hash_protocol_manager",
     "//components/safe_browsing/db:v4_protocol_manager_util",
+    "//components/safe_browsing/realtime:url_lookup_service",
     "//components/variations",
     "//content/public/browser",
     "//net",
diff --git a/components/safe_browsing/android/remote_database_manager.cc b/components/safe_browsing/android/remote_database_manager.cc
index 876f60b..18198cf 100644
--- a/components/safe_browsing/android/remote_database_manager.cc
+++ b/components/safe_browsing/android/remote_database_manager.cc
@@ -90,6 +90,11 @@
   db_manager_->CancelCheck(client_);
 }
 
+RealTimeUrlLookupService*
+RemoteSafeBrowsingDatabaseManager::GetRealTimeUrlLookupService() {
+  return rt_url_lookup_service_.get();
+}
+
 //
 // RemoteSafeBrowsingDatabaseManager methods
 //
@@ -234,7 +239,7 @@
     const GURL& url,
     Client* client) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  NOTREACHED();
+  // TODO(crbug.com/1014202): Add local high confidence allowlist.
   return AsyncMatch::NO_MATCH;
 }
 
@@ -331,6 +336,10 @@
     const V4ProtocolConfig& config) {
   VLOG(1) << "RemoteSafeBrowsingDatabaseManager starting";
   SafeBrowsingDatabaseManager::StartOnIOThread(url_loader_factory, config);
+
+  rt_url_lookup_service_ =
+      std::make_unique<RealTimeUrlLookupService>(url_loader_factory);
+
   enabled_ = true;
 }
 
@@ -348,6 +357,8 @@
   }
   enabled_ = false;
 
+  rt_url_lookup_service_.reset();
+
   SafeBrowsingDatabaseManager::StopOnIOThread(shutdown);
 }
 
diff --git a/components/safe_browsing/android/remote_database_manager.h b/components/safe_browsing/android/remote_database_manager.h
index e499763..c1e84447 100644
--- a/components/safe_browsing/android/remote_database_manager.h
+++ b/components/safe_browsing/android/remote_database_manager.h
@@ -17,6 +17,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "components/safe_browsing/db/database_manager.h"
+#include "components/safe_browsing/realtime/url_lookup_service.h"
 #include "url/gurl.h"
 
 namespace safe_browsing {
@@ -62,6 +63,7 @@
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
       const V4ProtocolConfig& config) override;
   void StopOnIOThread(bool shutdown) override;
+  RealTimeUrlLookupService* GetRealTimeUrlLookupService() override;
 
   //
   // RemoteSafeBrowsingDatabaseManager implementation
@@ -76,6 +78,8 @@
 
   base::flat_set<content::ResourceType> resource_types_to_check_;
 
+  std::unique_ptr<RealTimeUrlLookupService> rt_url_lookup_service_;
+
   friend class base::RefCountedThreadSafe<RemoteSafeBrowsingDatabaseManager>;
   DISALLOW_COPY_AND_ASSIGN(RemoteSafeBrowsingDatabaseManager);
 };  // class RemoteSafeBrowsingDatabaseManager
diff --git a/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc b/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc
index 52f8ba0..aab4125 100644
--- a/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc
+++ b/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc
@@ -455,7 +455,7 @@
     OnUrlResult(url, SB_THREAT_TYPE_SAFE, ThreatMetadata());
   }
 
-  // TODO(vakh): Log |response| to chrome://safe-browsing
+  // TODO(crbug.com/1013370): Log |response| to chrome://safe-browsing
 }
 
 }  // namespace safe_browsing
diff --git a/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc b/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc
index 8493ccd..02a40d28 100644
--- a/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc
+++ b/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc
@@ -64,17 +64,7 @@
   // Returns the final RenderFrameHost after navigation commits.
   RenderFrameHost* NavigateFrame(const std::string& url,
                                  RenderFrameHost* frame) {
-    GURL gurl(url);
-    auto navigation_simulator =
-        NavigationSimulator::CreateRendererInitiated(gurl, frame);
-    navigation_simulator->Commit();
-    RenderFrameHost* final_frame_host =
-        navigation_simulator->GetFinalRenderFrameHost();
-    // Call the trigger's FinishLoad event handler directly since it doesn't
-    // happen as part of the navigation.
-    safe_browsing::AdSamplerTrigger::FromWebContents(web_contents())
-        ->DidFinishLoad(final_frame_host, gurl);
-    return final_frame_host;
+    return NavigationSimulator::NavigateAndCommitFromDocument(GURL(url), frame);
   }
 
   // Returns the final RenderFrameHost after navigation commits.
diff --git a/components/safe_browsing/web_ui/BUILD.gn b/components/safe_browsing/web_ui/BUILD.gn
index 1f3de09..5406e15 100644
--- a/components/safe_browsing/web_ui/BUILD.gn
+++ b/components/safe_browsing/web_ui/BUILD.gn
@@ -19,6 +19,7 @@
     "//components/safe_browsing:buildflags",
     "//components/safe_browsing:csd_proto",
     "//components/safe_browsing:features",
+    "//components/safe_browsing:realtimeapi_proto",
     "//components/safe_browsing/browser:network_context",
     "//components/safe_browsing/browser:referrer_chain_provider",
     "//components/safe_browsing/common:safe_browsing_prefs",
diff --git a/components/safe_browsing/web_ui/resources/safe_browsing.html b/components/safe_browsing/web_ui/resources/safe_browsing.html
index 89194bb..545a263b 100644
--- a/components/safe_browsing/web_ui/resources/safe_browsing.html
+++ b/components/safe_browsing/web_ui/resources/safe_browsing.html
@@ -25,6 +25,7 @@
         <tab id="csbrr">ClientSafeBrowsingReportRequests</tab>
         <tab id="download-protection">Download Protection</tab>
         <tab id="password-protection">Password Protection</tab>
+        <tab id="rt-lookup">RT Lookup</tab>
         <tab id="referrer-chain">Referrer Chain</tab>
         <tab id="log">Log Messages</tab>
       </tabs>
@@ -88,6 +89,10 @@
           <table id="pg-ping-list" class="request-response"></table>
         </tabpanel>
         <tabpanel>
+          <h2>RT Lookup Pings</h2>
+          <table id="rt-lookup-ping-list" class="request-response"></table>
+        </tabpanel>
+        <tabpanel>
           <h2>Referrer Chain</h2>
           <form id="get-referrer-chain-form">
             <input type="text" id="referrer-chain-url">
diff --git a/components/safe_browsing/web_ui/resources/safe_browsing.js b/components/safe_browsing/web_ui/resources/safe_browsing.js
index 4722efb..a94d693 100644
--- a/components/safe_browsing/web_ui/resources/safe_browsing.js
+++ b/components/safe_browsing/web_ui/resources/safe_browsing.js
@@ -89,6 +89,24 @@
       addPGResponse(result);
     });
 
+    cr.sendWithPromise('getRTLookupPings', [])
+        .then((rtLookupPings) => { rtLookupPings
+            .forEach(function (rtLookupPing) {
+          addRTLookupPing(rtLookupPing);
+        })});
+    cr.addWebUIListener('rt-lookup-pings-update', function(result) {
+      addRTLookupPing(result);
+    });
+
+    cr.sendWithPromise('getRTLookupResponses', [])
+        .then((rtLookupResponses) => { rtLookupResponses
+            .forEach(function (rtLookupResponse) {
+          addRTLookupResponse(rtLookupResponse);
+        })});
+    cr.addWebUIListener('rt-lookup-responses-update', function(result) {
+      addRTLookupResponse(result);
+    });
+
     cr.sendWithPromise('getLogMessages', [])
         .then((logMessages) => { logMessages.forEach(function (message) {
           addLogMessage(message);
@@ -204,36 +222,40 @@
     appendChildWithInnerText(logDiv, eventFormatted);
   }
 
-  function addPGPingRow(token) {
-    var row = $('pg-ping-list').insertRow();
+  function insertTokenToTable(tableId, token) {
+    var row = $(tableId).insertRow();
     row.className = 'content';
-    row.id = 'pg-ping-list-' + token;
+    row.id = tableId + '-' + token;
     row.insertCell().className = 'content';
     row.insertCell().className = 'content';
   }
 
-  function addPGPing(result) {
+  function addResultToTable(tableId, result, position) {
     var token = result[0];
     var request = result[1];
 
-    if ($('pg-ping-list-'+token) == undefined) {
-      addPGPingRow(token);
+    if ($(tableId + '-' + token) == undefined) {
+      insertTokenToTable(tableId, token);
     }
 
-    var cell = $('pg-ping-list-'+token).cells[0];
+    var cell = $(tableId + '-' + token).cells[position];
     appendChildWithInnerText(cell, request);
   }
 
+  function addPGPing(result) {
+    addResultToTable('pg-ping-list', result, 0);
+  }
+
   function addPGResponse(result) {
-    var token = result[0];
-    var response = result[1];
+    addResultToTable('pg-ping-list', result, 1);
+  }
 
-    if ($('pg-ping-list-'+token) == undefined) {
-      addPGPingRow(token);
-    }
+  function addRTLookupPing(result) {
+    addResultToTable('rt-lookup-ping-list', result, 0);
+  }
 
-    var cell = $('pg-ping-list-'+token).cells[1];
-    appendChildWithInnerText(cell, response);
+  function addRTLookupResponse(result) {
+    addResultToTable('rt-lookup-ping-list', result, 1);
   }
 
   function addLogMessage(result) {
diff --git a/components/safe_browsing/web_ui/safe_browsing_ui.cc b/components/safe_browsing/web_ui/safe_browsing_ui.cc
index fe951b82..1d41efc 100644
--- a/components/safe_browsing/web_ui/safe_browsing_ui.cc
+++ b/components/safe_browsing/web_ui/safe_browsing_ui.cc
@@ -176,6 +176,36 @@
   std::map<int, LoginReputationClientResponse>().swap(pg_responses_);
 }
 
+int WebUIInfoSingleton::AddToRTLookupPings(const RTLookupRequest request) {
+  if (!HasListener())
+    return -1;
+
+  for (auto* webui_listener : webui_instances_)
+    webui_listener->NotifyRTLookupPingJsListener(rt_lookup_pings_.size(),
+                                                 request);
+
+  rt_lookup_pings_.push_back(request);
+
+  return rt_lookup_pings_.size() - 1;
+}
+
+void WebUIInfoSingleton::AddToRTLookupResponses(
+    int token,
+    const RTLookupResponse response) {
+  if (!HasListener())
+    return;
+
+  for (auto* webui_listener : webui_instances_)
+    webui_listener->NotifyRTLookupResponseJsListener(token, response);
+
+  rt_lookup_responses_[token] = response;
+}
+
+void WebUIInfoSingleton::ClearRTLookupPings() {
+  std::vector<RTLookupRequest>().swap(rt_lookup_pings_);
+  std::map<int, RTLookupResponse>().swap(rt_lookup_responses_);
+}
+
 void WebUIInfoSingleton::LogMessage(const std::string& message) {
   if (!HasListener())
     return;
@@ -213,6 +243,7 @@
     ClearClientDownloadResponsesReceived();
     ClearPGEvents();
     ClearPGPings();
+    ClearRTLookupPings();
     ClearLogMessages();
   }
 }
@@ -942,6 +973,53 @@
   return std::move(population_dict);
 }
 
+base::Value SerializeRTThreatInfo(
+    const RTLookupResponse::ThreatInfo& threat_info) {
+  base::DictionaryValue threat_info_dict;
+  std::string threat_type;
+  switch (threat_info.threat_type()) {
+    case RTLookupResponse::ThreatInfo::THREAT_TYPE_UNSPECIFIED:
+      threat_type = "THREAT_TYPE_UNSPECIFIED";
+      break;
+    case RTLookupResponse::ThreatInfo::WEB_MALWARE:
+      threat_type = "WEB_MALWARE";
+      break;
+    case RTLookupResponse::ThreatInfo::SOCIAL_ENGINEERING:
+      threat_type = "SOCIAL_ENGINEERING";
+      break;
+    case RTLookupResponse::ThreatInfo::UNWANTED_SOFTWARE:
+      threat_type = "UNWANTED_SOFTWARE";
+      break;
+    case RTLookupResponse::ThreatInfo::UNCLEAR_BILLING:
+      threat_type = "UNCLEAR_BILLING";
+      break;
+  }
+  threat_info_dict.SetKey("threat_type", base::Value(threat_type));
+
+  threat_info_dict.SetKey(
+      "cache_duration_sec",
+      base::Value(static_cast<double>(threat_info.cache_duration_sec())));
+
+  threat_info_dict.SetKey("cache_expression",
+                          base::Value(threat_info.cache_expression()));
+
+  std::string verdict_type;
+  switch (threat_info.verdict_type()) {
+    case RTLookupResponse::ThreatInfo::VERDICT_TYPE_UNSPECIFIED:
+      verdict_type = "VERDICT_TYPE_UNSPECIFIED";
+      break;
+    case RTLookupResponse::ThreatInfo::SAFE:
+      verdict_type = "SAFE";
+      break;
+    case RTLookupResponse::ThreatInfo::DANGEROUS:
+      verdict_type = "DANGEROUS";
+      break;
+  }
+  threat_info_dict.SetKey("verdict_type", base::Value(verdict_type));
+
+  return std::move(threat_info_dict);
+}
+
 base::Value SerializeDomFeatures(const DomFeatures& dom_features) {
   base::DictionaryValue dom_features_dict;
   auto feature_map = std::make_unique<base::ListValue>();
@@ -1053,6 +1131,52 @@
   return response_serialized;
 }
 
+std::string SerializeRTLookupPing(const RTLookupRequest& request) {
+  base::DictionaryValue request_dict;
+
+  request_dict.SetKey("url", base::Value(request.url()));
+  request_dict.SetKey("population",
+                      SerializeChromeUserPopulation(request.population()));
+
+  std::string lookupType;
+  switch (request.lookup_type()) {
+    case RTLookupRequest::LOOKUP_TYPE_UNSPECIFIED:
+      lookupType = "LOOKUP_TYPE_UNSPECIFIED";
+      break;
+    case RTLookupRequest::NAVIGATION:
+      lookupType = "NAVIGATION";
+      break;
+    case RTLookupRequest::DOWNLOAD:
+      lookupType = "DOWNLOAD";
+      break;
+  }
+
+  request_dict.SetKey("lookup_type", base::Value(lookupType));
+
+  std::string request_serialized;
+  JSONStringValueSerializer serializer(&request_serialized);
+  serializer.set_pretty_print(true);
+  serializer.Serialize(request_dict);
+  return request_serialized;
+}
+
+std::string SerializeRTLookupResponse(const RTLookupResponse& response) {
+  base::DictionaryValue response_dict;
+
+  base::ListValue threat_info_list;
+  for (const RTLookupResponse::ThreatInfo& threat_info :
+       response.threat_info()) {
+    threat_info_list.Append(SerializeRTThreatInfo(threat_info));
+  }
+  response_dict.SetKey("threat_infos", std::move(threat_info_list));
+
+  std::string response_serialized;
+  JSONStringValueSerializer serializer(&response_serialized);
+  serializer.set_pretty_print(true);
+  serializer.Serialize(response_dict);
+  return response_serialized;
+}
+
 base::Value SerializeLogMessage(const base::Time& timestamp,
                                 const std::string& message) {
   base::DictionaryValue result;
@@ -1324,6 +1448,45 @@
   ResolveJavascriptCallback(base::Value(callback_id), responses_sent);
 }
 
+void SafeBrowsingUIHandler::GetRTLookupPings(const base::ListValue* args) {
+  const std::vector<RTLookupRequest> requests =
+      WebUIInfoSingleton::GetInstance()->rt_lookup_pings();
+
+  base::ListValue pings_sent;
+  for (size_t request_index = 0; request_index < requests.size();
+       request_index++) {
+    base::ListValue ping_entry;
+    ping_entry.Append(base::Value(int(request_index)));
+    ping_entry.Append(
+        base::Value(SerializeRTLookupPing(requests[request_index])));
+    pings_sent.Append(std::move(ping_entry));
+  }
+
+  AllowJavascript();
+  std::string callback_id;
+  args->GetString(0, &callback_id);
+  ResolveJavascriptCallback(base::Value(callback_id), pings_sent);
+}
+
+void SafeBrowsingUIHandler::GetRTLookupResponses(const base::ListValue* args) {
+  const std::map<int, RTLookupResponse> responses =
+      WebUIInfoSingleton::GetInstance()->rt_lookup_responses();
+
+  base::ListValue responses_sent;
+  for (const auto& token_and_response : responses) {
+    base::ListValue response_entry;
+    response_entry.Append(base::Value(token_and_response.first));
+    response_entry.Append(
+        base::Value(SerializeRTLookupResponse(token_and_response.second)));
+    responses_sent.Append(std::move(response_entry));
+  }
+
+  AllowJavascript();
+  std::string callback_id;
+  args->GetString(0, &callback_id);
+  ResolveJavascriptCallback(base::Value(callback_id), responses_sent);
+}
+
 void SafeBrowsingUIHandler::GetReferrerChain(const base::ListValue* args) {
   std::string url_string;
   args->GetString(1, &url_string);
@@ -1431,6 +1594,28 @@
   FireWebUIListener("pg-responses-update", response_list);
 }
 
+void SafeBrowsingUIHandler::NotifyRTLookupPingJsListener(
+    int token,
+    const RTLookupRequest& request) {
+  base::ListValue request_list;
+  request_list.Append(base::Value(token));
+  request_list.Append(base::Value(SerializeRTLookupPing(request)));
+
+  AllowJavascript();
+  FireWebUIListener("rt-lookup-pings-update", request_list);
+}
+
+void SafeBrowsingUIHandler::NotifyRTLookupResponseJsListener(
+    int token,
+    const RTLookupResponse& response) {
+  base::ListValue response_list;
+  response_list.Append(base::Value(token));
+  response_list.Append(base::Value(SerializeRTLookupResponse(response)));
+
+  AllowJavascript();
+  FireWebUIListener("rt-lookup-responses-update", response_list);
+}
+
 void SafeBrowsingUIHandler::NotifyLogMessageJsListener(
     const base::Time& timestamp,
     const std::string& message) {
@@ -1486,6 +1671,14 @@
       base::BindRepeating(&SafeBrowsingUIHandler::GetPGResponses,
                           base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
+      "getRTLookupPings",
+      base::BindRepeating(&SafeBrowsingUIHandler::GetRTLookupPings,
+                          base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "getRTLookupResponses",
+      base::BindRepeating(&SafeBrowsingUIHandler::GetRTLookupResponses,
+                          base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
       "getLogMessages",
       base::BindRepeating(&SafeBrowsingUIHandler::GetLogMessages,
                           base::Unretained(this)));
diff --git a/components/safe_browsing/web_ui/safe_browsing_ui.h b/components/safe_browsing/web_ui/safe_browsing_ui.h
index d854ef9..77d791b 100644
--- a/components/safe_browsing/web_ui/safe_browsing_ui.h
+++ b/components/safe_browsing/web_ui/safe_browsing_ui.h
@@ -9,6 +9,7 @@
 #include "base/macros.h"
 #include "components/safe_browsing/browser/safe_browsing_network_context.h"
 #include "components/safe_browsing/proto/csd.pb.h"
+#include "components/safe_browsing/proto/realtimeapi.pb.h"
 #include "components/safe_browsing/proto/webui.pb.h"
 #include "components/sync/protocol/user_event_specifics.pb.h"
 #include "content/public/browser/web_ui_controller.h"
@@ -83,6 +84,14 @@
   // currently open chrome://safe-browsing tab was opened.
   void GetPGResponses(const base::ListValue* args);
 
+  // Get the real time lookup pings that have been sent since the oldest
+  // currently open chrome://safe-browsing tab was opened.
+  void GetRTLookupPings(const base::ListValue* args);
+
+  // Get the real time lookup responses that have been received since the oldest
+  // currently open chrome://safe-browsing tab was opened.
+  void GetRTLookupResponses(const base::ListValue* args);
+
   // Get the current referrer chain for a given URL.
   void GetReferrerChain(const base::ListValue* args);
 
@@ -132,6 +141,15 @@
       int token,
       const LoginReputationClientResponse& response);
 
+  // Called when any new real time lookup pings are sent while one or more
+  // WebUI tabs are open.
+  void NotifyRTLookupPingJsListener(int token, const RTLookupRequest& request);
+
+  // Called when any new real time lookup responses are received while one or
+  // more WebUI tabs are open.
+  void NotifyRTLookupResponseJsListener(int token,
+                                        const RTLookupResponse& response);
+
   // Called when any new log messages are received while one or more WebUI tabs
   // are open.
   void NotifyLogMessageJsListener(const base::Time& timestamp,
@@ -218,6 +236,17 @@
   // Clear the list of sent PhishGuard pings and responses.
   void ClearPGPings();
 
+  // Add the new ping to |rt_lookup_pings_|. Returns a token that can be used in
+  // |AddToRTLookupResponses| to correlate a ping and response.
+  int AddToRTLookupPings(const RTLookupRequest request);
+
+  // Add the new response to |rt_lookup_responses_| and send it to all the open
+  // chrome://safe-browsing tabs.
+  void AddToRTLookupResponses(int token, const RTLookupResponse response);
+
+  // Clear the list of sent RT Lookup pings and responses.
+  void ClearRTLookupPings();
+
   // Log an arbitrary message. Frequently used for debugging.
   void LogMessage(const std::string& message);
 
@@ -286,6 +315,18 @@
     return pg_responses_;
   }
 
+  // Get the list of real time lookup pings since the oldest currently open
+  // chrome://safe-browsing tab was opened.
+  const std::vector<RTLookupRequest>& rt_lookup_pings() const {
+    return rt_lookup_pings_;
+  }
+
+  // Get the list of real time lookup pings since the oldest currently open
+  // chrome://safe-browsing tab was opened.
+  const std::map<int, RTLookupResponse>& rt_lookup_responses() const {
+    return rt_lookup_responses_;
+  }
+
   ReferrerChainProvider* referrer_chain_provider() {
     return referrer_chain_provider_;
   }
@@ -350,6 +391,14 @@
   // chrome://safe-browsing tab was opened.
   std::map<int, LoginReputationClientResponse> pg_responses_;
 
+  // List of real time lookup pings sent since the oldest currently open
+  // chrome://safe-browsing tab was opened.
+  std::vector<RTLookupRequest> rt_lookup_pings_;
+
+  // List of real time lookup responses received since the oldest currently open
+  // chrome://safe-browsing tab was opened.
+  std::map<int, RTLookupResponse> rt_lookup_responses_;
+
   // List of WebUI listener objects. "SafeBrowsingUIHandler*" cannot be const,
   // due to being used by functions that call AllowJavascript(), which is not
   // marked const.
diff --git a/components/update_client/BUILD.gn b/components/update_client/BUILD.gn
index de3d06b..f46cf4ff 100644
--- a/components/update_client/BUILD.gn
+++ b/components/update_client/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//net/features.gni")
+import("//testing/libfuzzer/fuzzer_test.gni")
 
 source_set("network_impl") {
   sources = [
@@ -241,3 +242,25 @@
     "//third_party/re2",
   ]
 }
+
+fuzzer_test("update_client_protocol_serializer_fuzzer") {
+  sources = [
+    "protocol_serializer_fuzzer.cc",
+  ]
+  deps = [
+    ":update_client",
+    "//base:base",
+  ]
+  seed_corpus = "fuzzer_corpuses/protocol_serializer/"
+}
+
+fuzzer_test("update_client_protocol_parser_fuzzer") {
+  sources = [
+    "protocol_parser_fuzzer.cc",
+  ]
+  deps = [
+    ":update_client",
+    "//base:base",
+  ]
+  seed_corpus = "fuzzer_corpuses/protocol_parser/"
+}
diff --git a/components/update_client/fuzzer_corpuses/protocol_parser/71c7a20b152d0a5299354db9bc32294e4a6ce406 b/components/update_client/fuzzer_corpuses/protocol_parser/71c7a20b152d0a5299354db9bc32294e4a6ce406
new file mode 100644
index 0000000..d0f28ced
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_parser/71c7a20b152d0a5299354db9bc32294e4a6ce406
@@ -0,0 +1,11 @@
+  {"response":{
+   "protocol":"3.1",
+   "app":[
+    {"appid":"12345",
+     "status":"ok",
+     "updatecheck":{
+     "status":"noupdate"
+     }
+    }
+   ]
+  }})";
\ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_parser/7f2f77459d57bd3da2abcdccf6dbe9f33105d0d2 b/components/update_client/fuzzer_corpuses/protocol_parser/7f2f77459d57bd3da2abcdccf6dbe9f33105d0d2
new file mode 100644
index 0000000..4b508327
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_parser/7f2f77459d57bd3da2abcdccf6dbe9f33105d0d2
@@ -0,0 +1,11 @@
+  {"response":{
+   "protocol":"3.1",
+   "app":[
+    {"appid":"12345",
+     "status":"ok",
+     "updatecheck":{
+     "status":"noupdate"
+     }
+    }
+   ]
+  }}
\ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/12ec209260d35248c3b28ba7417e013f2f2323f5 b/components/update_client/fuzzer_corpuses/protocol_serializer/12ec209260d35248c3b28ba7417e013f2f2323f5
new file mode 100644
index 0000000..45cbd4f
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_serializer/12ec209260d35248c3b28ba7417e013f2f2323f5
@@ -0,0 +1 @@
+{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","app":[{"appid":"id1","attr1":"1","attr2":"2","brand":"brand1","cohort":"c1","cohorthint":"ch1","cohortname":"cn1","disabled":[{"reason":0},{"reason":1}],"enabled":false,"installedby":"location1","installsource":"source1","packages":{"package":[{"fp":"fp1"}]},"ping":{"ping_freshness":"{5e9079b0-c2fb-4df2-8ca5-babfa37dde7d}","rd":1234},"updatecheck":{"updatedisabled":true},"version":"1.0"},{"appid":"id2","event":[{"a":1,"b":"2"},{"error":0}],"version":"2.0"}],"arch":"x64","dedup":"cr","dlpref":"cacheable","extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{2ee4b711-e978-4477-9301-ae0382a18b08}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}}
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/53901ce8ac03225d61e5852f548a7d1a8c7ccb87 b/components/update_client/fuzzer_corpuses/protocol_serializer/53901ce8ac03225d61e5852f548a7d1a8c7ccb87
new file mode 100644
index 0000000..a4ede55
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_serializer/53901ce8ac03225d61e5852f548a7d1a8c7ccb87
@@ -0,0 +1 @@
+{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{73c3b42c-a2c6-4d73-a8dc-61f2b84cbecf}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}}
\ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/7353c2d34a737bac0ea9dcb9a85cb768e4cfe914 b/components/update_client/fuzzer_corpuses/protocol_serializer/7353c2d34a737bac0ea9dcb9a85cb768e4cfe914
new file mode 100644
index 0000000..5fda1d3
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_serializer/7353c2d34a737bac0ea9dcb9a85cb768e4cfe914
@@ -0,0 +1,4 @@
+{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","app":[{"appid":"id1","attr1":"1","attr2":"2","brand":"brand1","cohort":"c1","cohorthint":"ch1","cohortname":"cn1","disabled":[{"reason":0},{"reason":1}],"enabled":false,"installedby":"location1","installsource":"source1","packages":{"package":[{"fp":"fp1"}]},"ping":{"ping_freshness":"{5e9079b0-c2fb-4df2-8ca5-babfa37dde7d}","rd":1234},"updatecheck":{"updatedisabled":true},"version":"1.0"},{"appid":"id2","event":[{"a":1,"b":"2"},{"error":0}],"version":"2.0"}],"arch":"x64","dedup":"cr","dlpref":"cacheable","extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{2ee4b711-e978-4477-9301-ae0382a18b08}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}}
+{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{8e064853-a382-4ee4-a8e6-927284eb91fe}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}}
+{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{73c3b42c-a2c6-4d73-a8dc-61f2b84cbecf}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}}
+{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","domainjoined":true,"extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{4f6c2ca7-9c84-40d6-9c9b-c9b2260a4655}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}}
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/82e93965bf304af1f407a14cf4e0303a20d74fe8 b/components/update_client/fuzzer_corpuses/protocol_serializer/82e93965bf304af1f407a14cf4e0303a20d74fe8
new file mode 100644
index 0000000..9b1d04a
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_serializer/82e93965bf304af1f407a14cf4e0303a20d74fe8
@@ -0,0 +1 @@
+{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","domainjoined":true,"extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{4f6c2ca7-9c84-40d6-9c9b-c9b2260a4655}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}}
\ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/d198d0d9901925d6bd35cbe76fe83c40d1185f64 b/components/update_client/fuzzer_corpuses/protocol_serializer/d198d0d9901925d6bd35cbe76fe83c40d1185f64
new file mode 100644
index 0000000..717cc6a
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_serializer/d198d0d9901925d6bd35cbe76fe83c40d1185f64
@@ -0,0 +1 @@
+{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{8e064853-a382-4ee4-a8e6-927284eb91fe}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}}
\ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/da2ebcaffec0bce69352b0a3d8e94ecb5fc83fb1 b/components/update_client/fuzzer_corpuses/protocol_serializer/da2ebcaffec0bce69352b0a3d8e94ecb5fc83fb1
new file mode 100644
index 0000000..1c223ae
--- /dev/null
+++ b/components/update_client/fuzzer_corpuses/protocol_serializer/da2ebcaffec0bce69352b0a3d8e94ecb5fc83fb1
@@ -0,0 +1,3 @@
+{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{8e064853-a382-4ee4-a8e6-927284eb91fe}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}}
+{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{73c3b42c-a2c6-4d73-a8dc-61f2b84cbecf}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}}
+{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","domainjoined":true,"extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{4f6c2ca7-9c84-40d6-9c9b-c9b2260a4655}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}}
\ No newline at end of file
diff --git a/components/update_client/protocol_parser_fuzzer.cc b/components/update_client/protocol_parser_fuzzer.cc
new file mode 100644
index 0000000..74deec7
--- /dev/null
+++ b/components/update_client/protocol_parser_fuzzer.cc
@@ -0,0 +1,24 @@
+// Copyright 2019 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 <stdint.h>
+
+#include <fuzzer/FuzzedDataProvider.h>
+
+#include "components/update_client/protocol_handler.h"
+#include "components/update_client/protocol_parser.h"
+
+namespace update_client {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  update_client::ProtocolHandlerFactoryJSON factory;
+  std::unique_ptr<ProtocolParser> parser = factory.CreateParser();
+
+  // Try parsing as a Response.
+  const std::string response(reinterpret_cast<const char*>(data), size);
+  parser->Parse(response);
+
+  return 0;
+}
+}  // namespace update_client
diff --git a/components/update_client/protocol_serializer_fuzzer.cc b/components/update_client/protocol_serializer_fuzzer.cc
new file mode 100644
index 0000000..51cb900
--- /dev/null
+++ b/components/update_client/protocol_serializer_fuzzer.cc
@@ -0,0 +1,52 @@
+// Copyright 2019 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 <stdint.h>
+
+#include <fuzzer/FuzzedDataProvider.h>
+
+#include "base/command_line.h"
+#include "base/json/json_reader.h"
+#include "components/update_client/protocol_handler.h"
+#include "components/update_client/protocol_serializer.h"
+
+struct Environment {
+  Environment() { CHECK(base::CommandLine::Init(0, nullptr)); }
+};
+
+namespace update_client {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  static Environment env;
+
+  // Independently, try serializing a Request.
+  base::flat_map<std::string, std::string> additional_attributes;
+  std::map<std::string, std::string> updater_state_attributes;
+  std::vector<protocol_request::App> apps;
+
+  // Share |data| between |MakeProtocolRequest| args
+  FuzzedDataProvider data_provider(data, size);
+  const size_t max_arg_size = size / 7;
+  protocol_request::Request request = MakeProtocolRequest(
+      data_provider.ConsumeRandomLengthString(max_arg_size) /* session_id */,
+      data_provider.ConsumeRandomLengthString(max_arg_size) /* prod_id */,
+      data_provider.ConsumeRandomLengthString(
+          max_arg_size) /* browser_version */,
+      data_provider.ConsumeRandomLengthString(max_arg_size) /* lang */,
+      data_provider.ConsumeRandomLengthString(max_arg_size) /* channel */,
+      data_provider.ConsumeRandomLengthString(max_arg_size) /* os_long_name */,
+      data_provider.ConsumeRandomLengthString(
+          max_arg_size) /* download_preference */,
+      additional_attributes, &updater_state_attributes, std::move(apps));
+
+  update_client::ProtocolHandlerFactoryJSON factory;
+  std::unique_ptr<ProtocolSerializer> serializer = factory.CreateSerializer();
+  std::string request_serialized = serializer->Serialize(request);
+
+  // Any request we serialize should be valid JSON.
+  base::JSONReader json_reader;
+  CHECK(json_reader.Read(request_serialized));
+  return 0;
+}
+}  // namespace update_client
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 74ef7a1..22576a8f 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -187,6 +187,7 @@
     "//services/viz/public/cpp/gpu",
     "//services/viz/public/mojom",
     "//skia",
+    "//skia/public/mojom",
     "//sql",
     "//storage/browser",
     "//storage/common",
diff --git a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
index c01d63f..c1a71df 100644
--- a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
+++ b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
@@ -1549,7 +1549,7 @@
                   /*expected_count*/ 2);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word,
                   /*count*/ -1,
-                  /*expected_text*/ L"frame\n",
+                  /*expected_text*/ L"frame",
                   /*expected_count*/ -1);
   EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
       text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character,
@@ -1737,9 +1737,14 @@
 
   AssertMoveByUnitForMarkup(TextUnit_Word,
                             "a <a>link with multiple words</a> and text after.",
-                            {L"a ", L"link ", L"with ", L"multiple ", L"words ",
+                            {L"a ", L"link ", L"with ", L"multiple ", L"words",
                              L"and ", L"text ", L"after."});
 
+  AssertMoveByUnitForMarkup(TextUnit_Word,
+                            "a <span aria-hidden='true'>span with ignored "
+                            "text</span> and text after.",
+                            {L"a ", L"and ", L"text ", L"after."});
+
   // AssertMoveByUnitForMarkup(
   //     TextUnit_Word, "<ul><li>item one</li><li>item two</li></ul>",
   //     {L"* ", L"item ", L"one\n", L"* ", L"item ", L"two"});
diff --git a/content/browser/frame_host/popup_menu_helper_mac.h b/content/browser/frame_host/popup_menu_helper_mac.h
index 7c6f6a8b..837455ff 100644
--- a/content/browser/frame_host/popup_menu_helper_mac.h
+++ b/content/browser/frame_host/popup_menu_helper_mac.h
@@ -13,6 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observer.h"
 #include "content/common/content_export.h"
+#include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/render_widget_host_observer.h"
 #include "ui/gfx/geometry/rect.h"
 
@@ -71,15 +72,15 @@
 
   Delegate* delegate_;  // Weak. Owns |this|.
 
-  ScopedObserver<RenderWidgetHost, RenderWidgetHostObserver> observer_;
+  ScopedObserver<RenderWidgetHost, RenderWidgetHostObserver> observer_{this};
   base::WeakPtr<RenderFrameHostImpl> render_frame_host_;
-  WebMenuRunner* menu_runner_;
-  bool popup_was_hidden_;
+  WebMenuRunner* menu_runner_ = nil;
+  bool popup_was_hidden_ = false;
 
   // Controls whether messages can be pumped during the menu fade.
   std::unique_ptr<base::ScopedPumpMessagesInPrivateModes> pump_in_fade_;
 
-  base::WeakPtrFactory<PopupMenuHelper> weak_ptr_factory_;
+  base::WeakPtrFactory<PopupMenuHelper> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(PopupMenuHelper);
 };
diff --git a/content/browser/frame_host/popup_menu_helper_mac.mm b/content/browser/frame_host/popup_menu_helper_mac.mm
index ba2758b..8060f37 100644
--- a/content/browser/frame_host/popup_menu_helper_mac.mm
+++ b/content/browser/frame_host/popup_menu_helper_mac.mm
@@ -28,12 +28,8 @@
 PopupMenuHelper::PopupMenuHelper(Delegate* delegate,
                                  RenderFrameHost* render_frame_host)
     : delegate_(delegate),
-      observer_(this),
       render_frame_host_(
-          static_cast<RenderFrameHostImpl*>(render_frame_host)->GetWeakPtr()),
-      menu_runner_(nil),
-      popup_was_hidden_(false),
-      weak_ptr_factory_(this) {
+          static_cast<RenderFrameHostImpl*>(render_frame_host)->GetWeakPtr()) {
   RenderWidgetHost* widget_host =
       render_frame_host->GetRenderViewHost()->GetWidget();
   observer_.Add(widget_host);
diff --git a/content/browser/frame_host/render_frame_host_delegate.h b/content/browser/frame_host/render_frame_host_delegate.h
index 10ddb8e..76a3c67 100644
--- a/content/browser/frame_host/render_frame_host_delegate.h
+++ b/content/browser/frame_host/render_frame_host_delegate.h
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/i18n/rtl.h"
+#include "base/optional.h"
 #include "build/build_config.h"
 #include "components/viz/common/surfaces/surface_id.h"
 #include "content/browser/webui/web_ui_impl.h"
@@ -31,6 +32,7 @@
 #include "third_party/blink/public/common/frame/blocked_navigation_types.h"
 #include "third_party/blink/public/common/mediastream/media_stream_request.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom.h"
+#include "third_party/skia/include/core/SkColor.h"
 #include "ui/accessibility/ax_mode.h"
 #include "ui/base/window_open_disposition.h"
 
@@ -449,6 +451,11 @@
   virtual RenderFrameHostImpl* GetMainFrameForInnerDelegate(
       FrameTreeNode* frame_tree_node);
 
+  // Notifies that the given frame has changed theme color.
+  virtual void OnThemeColorChanged(RenderFrameHostImpl* source,
+                                   const base::Optional<SkColor>& theme_color) {
+  }
+
  protected:
   virtual ~RenderFrameHostDelegate() {}
 };
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 1c48427..b18bc83 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1219,6 +1219,13 @@
   return parent_;
 }
 
+std::vector<RenderFrameHost*> RenderFrameHostImpl::GetFramesInSubtree() {
+  std::vector<RenderFrameHost*> frame_hosts;
+  for (FrameTreeNode* node : frame_tree_->SubtreeNodes(frame_tree_node()))
+    frame_hosts.push_back(node->current_frame_host());
+  return frame_hosts;
+}
+
 bool RenderFrameHostImpl::IsDescendantOf(RenderFrameHost* ancestor) {
   if (!ancestor || !static_cast<RenderFrameHostImpl*>(ancestor)->child_count())
     return false;
@@ -3056,13 +3063,18 @@
 }
 
 void RenderFrameHostImpl::RequestTextSurroundingSelection(
-    TextSurroundingSelectionCallback callback,
+    blink::mojom::Frame::GetTextSurroundingSelectionCallback callback,
     int max_length) {
   DCHECK(!callback.is_null());
   GetAssociatedFrameRemote()->GetTextSurroundingSelection(max_length,
                                                           std::move(callback));
 }
 
+void RenderFrameHostImpl::SendInterventionReport(const std::string& id,
+                                                 const std::string& message) {
+  GetAssociatedFrameRemote()->SendInterventionReport(id, message);
+}
+
 void RenderFrameHostImpl::AllowBindings(int bindings_flags) {
   // Never grant any bindings to browser plugin guests.
   if (GetProcess()->IsForGuestsOnly()) {
@@ -3375,6 +3387,11 @@
   UpdateFrameFrozenState();
 }
 
+void RenderFrameHostImpl::DidChangeThemeColor(
+    const base::Optional<SkColor>& theme_color) {
+  delegate_->OnThemeColorChanged(this, theme_color);
+}
+
 void RenderFrameHostImpl::SetCommitCallbackInterceptorForTesting(
     CommitCallbackInterceptor* interceptor) {
   // This DCHECK's aims to avoid unexpected replacement of an interceptor.
@@ -4592,9 +4609,10 @@
         [](RenderFrameHostImpl* frame,
            mojo::PendingReceiver<blink::mojom::NativeFileSystemManager>
                receiver) {
-          NativeFileSystemManagerImpl::BindReceiverFromUIThread(
-              static_cast<StoragePartitionImpl*>(
-                  frame->GetProcess()->GetStoragePartition()),
+          auto* storage_partition = static_cast<StoragePartitionImpl*>(
+              frame->GetProcess()->GetStoragePartition());
+          auto* manager = storage_partition->GetNativeFileSystemManager();
+          manager->BindReceiver(
               NativeFileSystemManagerImpl::BindingContext(
                   frame->GetLastCommittedOrigin(), frame->GetLastCommittedURL(),
                   frame->GetProcess()->GetID(), frame->GetRoutingID()),
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index fc20d45..bd2c63f 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -106,6 +106,7 @@
 #include "third_party/blink/public/platform/web_sudden_termination_disabler_type.h"
 #include "third_party/blink/public/web/web_text_direction.h"
 #include "third_party/blink/public/web/web_tree_scope_type.h"
+#include "third_party/skia/include/core/SkColor.h"
 #include "ui/accessibility/ax_action_handler.h"
 #include "ui/accessibility/ax_mode.h"
 #include "ui/accessibility/ax_node_data.h"
@@ -242,6 +243,7 @@
   RenderProcessHost* GetProcess() override;
   RenderWidgetHostView* GetView() override;
   RenderFrameHostImpl* GetParent() override;
+  std::vector<RenderFrameHost*> GetFramesInSubtree() override;
   bool IsDescendantOf(RenderFrameHost*) override;
   int GetFrameTreeNodeId() override;
   base::UnguessableToken GetDevToolsFrameToken() override;
@@ -281,8 +283,10 @@
   size_t GetProxyCount() override;
   bool HasSelection() override;
   void RequestTextSurroundingSelection(
-      TextSurroundingSelectionCallback callback,
+      blink::mojom::Frame::GetTextSurroundingSelectionCallback callback,
       int max_length) override;
+  void SendInterventionReport(const std::string& id,
+                              const std::string& message) override;
   void AllowBindings(int binding_flags) override;
   int GetEnabledBindings() override;
   void DisableBeforeUnloadHangMonitorForTesting() override;
@@ -1011,6 +1015,7 @@
 
   // mojom::FrameHost:
   void VisibilityChanged(blink::mojom::FrameVisibility) override;
+  void DidChangeThemeColor(const base::Optional<SkColor>& theme_color) override;
 
   blink::mojom::FrameVisibility visibility() const { return visibility_; }
 
diff --git a/content/browser/native_file_system/native_file_system_directory_handle_impl.cc b/content/browser/native_file_system/native_file_system_directory_handle_impl.cc
index 047eb865..6307267 100644
--- a/content/browser/native_file_system/native_file_system_directory_handle_impl.cc
+++ b/content/browser/native_file_system/native_file_system_directory_handle_impl.cc
@@ -83,7 +83,7 @@
 void NativeFileSystemDirectoryHandleImpl::GetFile(const std::string& basename,
                                                   bool create,
                                                   GetFileCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   storage::FileSystemURL child_url;
   blink::mojom::NativeFileSystemErrorPtr get_child_url_result =
@@ -130,7 +130,7 @@
     const std::string& basename,
     bool create,
     GetDirectoryCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   storage::FileSystemURL child_url;
   blink::mojom::NativeFileSystemErrorPtr get_child_url_result =
@@ -175,7 +175,7 @@
 
 void NativeFileSystemDirectoryHandleImpl::GetEntries(
     GetEntriesCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   DoFileSystemOperation(
       FROM_HERE, &FileSystemOperationRunner::ReadDirectory,
@@ -190,7 +190,7 @@
     const std::string& basename,
     bool recurse,
     RemoveEntryCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   storage::FileSystemURL child_url;
   blink::mojom::NativeFileSystemErrorPtr get_child_url_result =
@@ -212,7 +212,7 @@
 
 void NativeFileSystemDirectoryHandleImpl::Transfer(
     mojo::PendingReceiver<NativeFileSystemTransferToken> token) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   manager()->CreateTransferToken(*this, std::move(token));
 }
@@ -220,7 +220,7 @@
 void NativeFileSystemDirectoryHandleImpl::GetFileWithWritePermission(
     const storage::FileSystemURL& child_url,
     GetFileCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
@@ -237,7 +237,7 @@
     const storage::FileSystemURL& url,
     GetFileCallback callback,
     base::File::Error result) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (result != base::File::FILE_OK) {
     std::move(callback).Run(native_file_system_error::FromFileError(result),
@@ -253,7 +253,7 @@
 void NativeFileSystemDirectoryHandleImpl::GetDirectoryWithWritePermission(
     const storage::FileSystemURL& child_url,
     GetDirectoryCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
@@ -270,7 +270,7 @@
     const storage::FileSystemURL& url,
     GetDirectoryCallback callback,
     base::File::Error result) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (result != base::File::FILE_OK) {
     std::move(callback).Run(native_file_system_error::FromFileError(result),
@@ -288,7 +288,7 @@
     base::File::Error result,
     std::vector<filesystem::mojom::DirectoryEntry> file_list,
     bool has_more) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (result != base::File::FILE_OK) {
     DCHECK(!has_more);
@@ -325,7 +325,7 @@
     const storage::FileSystemURL& url,
     bool recurse,
     RemoveEntryCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
diff --git a/content/browser/native_file_system/native_file_system_directory_handle_impl.h b/content/browser/native_file_system/native_file_system_directory_handle_impl.h
index 3e63dac..21f71bbd 100644
--- a/content/browser/native_file_system/native_file_system_directory_handle_impl.h
+++ b/content/browser/native_file_system/native_file_system_directory_handle_impl.h
@@ -20,8 +20,8 @@
 // owned by the NativeFileSystemManagerImpl instance passed in to the
 // constructor.
 //
-// This class is not thread safe, all methods should be called on the same
-// sequence as storage::FileSystemContext, which today always is the IO thread.
+// This class is not thread safe, all methods must be called from the same
+// sequence.
 class NativeFileSystemDirectoryHandleImpl
     : public NativeFileSystemHandleBase,
       public blink::mojom::NativeFileSystemDirectoryHandle {
diff --git a/content/browser/native_file_system/native_file_system_file_handle_impl.cc b/content/browser/native_file_system/native_file_system_file_handle_impl.cc
index 24b5a877..b574e25c 100644
--- a/content/browser/native_file_system/native_file_system_file_handle_impl.cc
+++ b/content/browser/native_file_system/native_file_system_file_handle_impl.cc
@@ -7,7 +7,9 @@
 #include "base/guid.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/post_task.h"
 #include "content/browser/native_file_system/native_file_system_error.h"
+#include "content/public/browser/browser_task_traits.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "net/base/mime_util.h"
 #include "storage/browser/blob/blob_data_builder.h"
@@ -54,7 +56,8 @@
 }
 
 void NativeFileSystemFileHandleImpl::AsBlob(AsBlobCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (GetReadPermissionStatus() != PermissionStatus::GRANTED) {
     std::move(callback).Run(native_file_system_error::FromStatus(
                                 NativeFileSystemStatus::kPermissionDenied),
@@ -77,7 +80,7 @@
 void NativeFileSystemFileHandleImpl::CreateFileWriter(
     bool keep_existing_data,
     CreateFileWriterCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   RunWithWritePermission(
       base::BindOnce(&NativeFileSystemFileHandleImpl::CreateFileWriterImpl,
@@ -92,16 +95,52 @@
 
 void NativeFileSystemFileHandleImpl::Transfer(
     mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken> token) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   manager()->CreateTransferToken(*this, std::move(token));
 }
 
+namespace {
+
+void CreateBlobOnIOThread(
+    scoped_refptr<storage::FileSystemContext> file_system_context,
+    const scoped_refptr<ChromeBlobStorageContext>& blob_context,
+    mojo::PendingReceiver<blink::mojom::Blob> blob_receiver,
+    const storage::FileSystemURL& url,
+    const std::string& blob_uuid,
+    const std::string& content_type,
+    const base::File::Info& info) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+  auto blob_builder = std::make_unique<storage::BlobDataBuilder>(blob_uuid);
+  // Only append if the file has data.
+  if (info.size > 0) {
+    // Use AppendFileSystemFile here, since we're streaming the file directly
+    // from the file system backend, and the file thus might not actually be
+    // backed by a file on disk.
+    blob_builder->AppendFileSystemFile(url.ToGURL(), 0, info.size,
+                                       info.last_modified,
+                                       std::move(file_system_context));
+  }
+  blob_builder->set_content_type(content_type);
+
+  std::unique_ptr<BlobDataHandle> blob_handle =
+      blob_context->context()->AddFinishedBlob(std::move(blob_builder));
+
+  // Since the blob we're creating doesn't depend on other blobs, and doesn't
+  // require blob memory/disk quota, creating the blob can't fail.
+  DCHECK(!blob_handle->IsBroken());
+
+  BlobImpl::Create(std::move(blob_handle), std::move(blob_receiver));
+}
+
+}  // namespace
+
 void NativeFileSystemFileHandleImpl::DidGetMetaDataForBlob(
     AsBlobCallback callback,
     base::File::Error result,
     const base::File::Info& info) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (result != base::File::FILE_OK) {
     std::move(callback).Run(native_file_system_error::FromFileError(result),
@@ -110,17 +149,7 @@
   }
 
   std::string uuid = base::GenerateGUID();
-  auto blob_builder = std::make_unique<storage::BlobDataBuilder>(uuid);
-
-  // Only append if the file has data.
-  if (info.size > 0) {
-    // Use AppendFileSystemFile here, since we're streaming the file directly
-    // from the file system backend, and the file thus might not actually be
-    // backed by a file on disk.
-    blob_builder->AppendFileSystemFile(url().ToGURL(), 0, info.size,
-                                       info.last_modified,
-                                       file_system_context());
-  }
+  std::string content_type;
 
   base::FilePath::StringType extension = url().path().Extension();
   if (!extension.empty()) {
@@ -130,34 +159,33 @@
     // however that method can potentially block and thus can't be called from
     // the IO thread.
     if (net::GetWellKnownMimeTypeFromExtension(extension.substr(1), &mime_type))
-      blob_builder->set_content_type(mime_type);
+      content_type = std::move(mime_type);
   }
+  // TODO(https://crbug.com/962306): Consider some kind of fallback type when
+  // the above mime type detection fails.
 
-  std::unique_ptr<BlobDataHandle> blob_handle =
-      blob_context()->AddFinishedBlob(std::move(blob_builder));
-  if (blob_handle->IsBroken()) {
-    std::move(callback).Run(
-        native_file_system_error::FromStatus(
-            NativeFileSystemStatus::kOperationFailed, "Failed to create blob."),
-        nullptr);
-    return;
-  }
-
-  std::string content_type = blob_handle->content_type();
   mojo::PendingRemote<blink::mojom::Blob> blob_remote;
-  BlobImpl::Create(std::move(blob_handle),
-                   blob_remote.InitWithNewPipeAndPassReceiver());
+  mojo::PendingReceiver<blink::mojom::Blob> blob_receiver =
+      blob_remote.InitWithNewPipeAndPassReceiver();
 
   std::move(callback).Run(
       native_file_system_error::Ok(),
       blink::mojom::SerializedBlob::New(uuid, content_type, info.size,
                                         std::move(blob_remote)));
+
+  base::PostTask(
+      FROM_HERE, {BrowserThread::IO},
+      base::BindOnce(&CreateBlobOnIOThread,
+                     base::WrapRefCounted(file_system_context()),
+                     base::WrapRefCounted(manager()->blob_context()),
+                     std::move(blob_receiver), url(), std::move(uuid),
+                     std::move(content_type), info));
 }
 
 void NativeFileSystemFileHandleImpl::CreateFileWriterImpl(
     bool keep_existing_data,
     CreateFileWriterCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
@@ -175,7 +203,7 @@
     int count,
     bool keep_existing_data,
     CreateFileWriterCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(count >= 0);
   DCHECK(max_swap_files_ >= 0);
 
@@ -247,7 +275,7 @@
     bool keep_existing_data,
     CreateFileWriterCallback callback,
     base::File::Error result) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (result == base::File::FILE_ERROR_EXISTS) {
     // Creation attempt failed. We need to find an unused filename.
     CreateSwapFile(count + 1, keep_existing_data, std::move(callback));
@@ -291,7 +319,7 @@
     storage::IsolatedContext::ScopedFSHandle swap_file_system,
     CreateFileWriterCallback callback,
     base::File::Error result) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (result != base::File::FILE_OK) {
     DLOG(ERROR) << "Error Creating Swap File, status: "
                 << base::File::ErrorToString(result)
diff --git a/content/browser/native_file_system/native_file_system_file_handle_impl.h b/content/browser/native_file_system/native_file_system_file_handle_impl.h
index b4a90ec3..1bc285c6 100644
--- a/content/browser/native_file_system/native_file_system_file_handle_impl.h
+++ b/content/browser/native_file_system/native_file_system_file_handle_impl.h
@@ -21,13 +21,8 @@
 // owned by the NativeFileSystemManagerImpl instance passed in to the
 // constructor.
 //
-// This class is not thread safe, all methods should be called on the IO thread.
-// The link to the IO thread is due to its dependencies on both the blob system
-// (via storage::BlobStorageContext) and the file system backends (via
-// storage::FileSystemContext and storage::FileSystemOperationRunner, which both
-// expect some of their methods to always be called on the IO thread).
-// See https://crbug.com/957249 for some thoughts about the blob system aspect
-// of this.
+// This class is not thread safe, all methods must be called from the same
+// sequence.
 class CONTENT_EXPORT NativeFileSystemFileHandleImpl
     : public NativeFileSystemHandleBase,
       public blink::mojom::NativeFileSystemFileHandle {
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl.cc b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
index fc97c20..5a50abd 100644
--- a/content/browser/native_file_system/native_file_system_file_writer_impl.cc
+++ b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
@@ -14,6 +14,7 @@
 #include "crypto/secure_hash.h"
 #include "storage/browser/blob/blob_storage_context.h"
 #include "storage/browser/fileapi/file_system_operation_runner.h"
+#include "third_party/blink/public/common/blob/blob_utils.h"
 #include "third_party/blink/public/mojom/blob/blob.mojom.h"
 #include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom.h"
 
@@ -119,7 +120,7 @@
     uint64_t offset,
     mojo::PendingRemote<blink::mojom::Blob> data,
     WriteCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   RunWithWritePermission(
       base::BindOnce(&NativeFileSystemFileWriterImpl::WriteImpl,
@@ -136,7 +137,7 @@
     uint64_t offset,
     mojo::ScopedDataPipeConsumerHandle stream,
     WriteStreamCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   RunWithWritePermission(
       base::BindOnce(&NativeFileSystemFileWriterImpl::WriteStreamImpl,
@@ -151,7 +152,7 @@
 
 void NativeFileSystemFileWriterImpl::Truncate(uint64_t length,
                                               TruncateCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   RunWithWritePermission(
       base::BindOnce(&NativeFileSystemFileWriterImpl::TruncateImpl,
@@ -164,7 +165,7 @@
 }
 
 void NativeFileSystemFileWriterImpl::Close(CloseCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   RunWithWritePermission(
       base::BindOnce(&NativeFileSystemFileWriterImpl::CloseImpl,
@@ -180,7 +181,7 @@
     uint64_t offset,
     mojo::PendingRemote<blink::mojom::Blob> data,
     WriteCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
@@ -193,39 +194,38 @@
     return;
   }
 
-  blob_context()->GetBlobDataFromBlobRemote(
-      std::move(data),
-      base::BindOnce(&NativeFileSystemFileWriterImpl::DoWriteBlob,
-                     weak_factory_.GetWeakPtr(), std::move(callback), offset));
-}
+  MojoCreateDataPipeOptions options;
+  options.struct_size = sizeof(MojoCreateDataPipeOptions);
+  options.flags = MOJO_CREATE_DATA_PIPE_FLAG_NONE;
+  options.element_num_bytes = 1;
+  options.capacity_num_bytes =
+      blink::BlobUtils::GetDataPipeCapacity(blink::BlobUtils::kUnknownSize);
 
-void NativeFileSystemFileWriterImpl::DoWriteBlob(
-    WriteCallback callback,
-    uint64_t position,
-    std::unique_ptr<BlobDataHandle> blob) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
-  if (!blob) {
+  mojo::ScopedDataPipeProducerHandle producer_handle;
+  mojo::ScopedDataPipeConsumerHandle consumer_handle;
+  MojoResult rv =
+      mojo::CreateDataPipe(&options, &producer_handle, &consumer_handle);
+  if (rv != MOJO_RESULT_OK) {
     std::move(callback).Run(
         native_file_system_error::FromStatus(
-            NativeFileSystemStatus::kInvalidArgument, "Blob does not exist"),
+            NativeFileSystemStatus::kOperationFailed,
+            "Internal read error: failed to create mojo data pipe."),
         /*bytes_written=*/0);
     return;
   }
 
-  DoFileSystemOperation(
-      FROM_HERE, &FileSystemOperationRunner::Write,
-      base::BindRepeating(&NativeFileSystemFileWriterImpl::DidWrite,
-                          weak_factory_.GetWeakPtr(),
-                          base::Owned(new WriteState{std::move(callback)})),
-      swap_url(), std::move(blob), position);
+  // TODO(mek): We can do this transformation from Blob to DataPipe in the
+  // renderer, and simplify the mojom exposed interface.
+  mojo::Remote<blink::mojom::Blob> blob(std::move(data));
+  blob->ReadAll(std::move(producer_handle), mojo::NullRemote());
+  WriteStreamImpl(offset, std::move(consumer_handle), std::move(callback));
 }
 
 void NativeFileSystemFileWriterImpl::WriteStreamImpl(
     uint64_t offset,
     mojo::ScopedDataPipeConsumerHandle stream,
     WriteStreamCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
@@ -250,7 +250,7 @@
                                               base::File::Error result,
                                               int64_t bytes,
                                               bool complete) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   DCHECK(state);
   state->bytes_written += bytes;
@@ -263,7 +263,7 @@
 
 void NativeFileSystemFileWriterImpl::TruncateImpl(uint64_t length,
                                                   TruncateCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
@@ -286,7 +286,7 @@
 }
 
 void NativeFileSystemFileWriterImpl::CloseImpl(CloseCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
   if (is_closed()) {
@@ -332,6 +332,8 @@
     return;
   }
 
+  DCHECK_CALLED_ON_VALID_SEQUENCE(file_writer->sequence_checker_);
+
   auto item = std::make_unique<NativeFileSystemWriteItem>();
   item->target_file_path = file_writer->url().path();
   item->full_path = file_writer->swap_url().path();
@@ -373,7 +375,7 @@
 
 void NativeFileSystemFileWriterImpl::DidPassAfterWriteCheck(
     CloseCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // If the move operation succeeds, the path pointing to the swap file
   // will not exist anymore.
   // In case of error, the swap file URL will point to a valid filesystem
@@ -389,7 +391,7 @@
 void NativeFileSystemFileWriterImpl::DidSwapFileBeforeClose(
     CloseCallback callback,
     base::File::Error result) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (result != base::File::FILE_OK) {
     state_ = State::kCloseError;
     DLOG(ERROR) << "Swap file move operation failed source: "
@@ -421,7 +423,7 @@
 void NativeFileSystemFileWriterImpl::DidAnnotateFile(
     CloseCallback callback,
     quarantine::mojom::QuarantineFileResult result) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   state_ = State::kClosed;
 
   if (result != quarantine::mojom::QuarantineFileResult::OK &&
@@ -441,6 +443,7 @@
 
 void NativeFileSystemFileWriterImpl::ComputeHashForSwapFile(
     HashCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(swap_url().type(), storage::kFileSystemTypeNativeLocal);
   base::PostTaskAndReplyWithResult(
       FROM_HERE, {base::ThreadPool(), base::MayBlock()},
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl.h b/content/browser/native_file_system/native_file_system_file_writer_impl.h
index 6f14648..797cb4a 100644
--- a/content/browser/native_file_system/native_file_system_file_writer_impl.h
+++ b/content/browser/native_file_system/native_file_system_file_writer_impl.h
@@ -23,13 +23,8 @@
 // owned by the NativeFileSystemManagerImpl instance passed in to the
 // constructor.
 //
-// This class is not thread safe, all methods should be called on the IO thread.
-// The link to the IO thread is due to its dependencies on both the blob system
-// (via storage::BlobStorageContext) and the file system backends (via
-// storage::FileSystemContext and storage::FileSystemOperationRunner, which both
-// expect some of their methods to always be called on the IO thread).
-// See https://crbug.com/957249 for some thoughts about the blob system aspect
-// of this.
+// This class is not thread safe, all methods must be called from the same
+// sequence.
 class CONTENT_EXPORT NativeFileSystemFileWriterImpl
     : public NativeFileSystemHandleBase,
       public blink::mojom::NativeFileSystemFileWriter {
@@ -76,9 +71,6 @@
   void WriteImpl(uint64_t offset,
                  mojo::PendingRemote<blink::mojom::Blob> data,
                  WriteCallback callback);
-  void DoWriteBlob(WriteCallback callback,
-                   uint64_t position,
-                   std::unique_ptr<storage::BlobDataHandle> blob);
   void WriteStreamImpl(uint64_t offset,
                        mojo::ScopedDataPipeConsumerHandle stream,
                        WriteStreamCallback callback);
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc b/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc
index 6d102d6..dc9292a7 100644
--- a/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc
+++ b/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc
@@ -280,13 +280,17 @@
                          ::testing::Bool());
 
 TEST_F(NativeFileSystemFileWriterImplTest, WriteInvalidBlob) {
+  // This test primarily verifies behavior of the browser process in the
+  // presence of a compromised renderer process. The situation this tests for
+  // normally can't occur. As such it doesn't really matter what status the
+  // write operation returns, the important part is that nothing crashes.
+
   mojo::PendingRemote<blink::mojom::Blob> blob;
   ignore_result(blob.InitWithNewPipeAndPassReceiver());
 
   uint64_t bytes_written;
   NativeFileSystemStatus result =
       WriteBlobSync(0, std::move(blob), &bytes_written);
-  EXPECT_EQ(result, NativeFileSystemStatus::kInvalidArgument);
   EXPECT_EQ(bytes_written, 0u);
 
   result = CloseSync();
diff --git a/content/browser/native_file_system/native_file_system_handle_base.cc b/content/browser/native_file_system/native_file_system_handle_base.cc
index 6300265..58e4de8 100644
--- a/content/browser/native_file_system/native_file_system_handle_base.cc
+++ b/content/browser/native_file_system/native_file_system_handle_base.cc
@@ -137,6 +137,7 @@
 }
 
 NativeFileSystemHandleBase::~NativeFileSystemHandleBase() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // It is fine to remove an observer that never was added, so no need to check
   // for URL type and/or the same grant being used for read and write access.
   handle_state_.read_grant->RemoveObserver(this);
@@ -145,11 +146,13 @@
 
 NativeFileSystemHandleBase::PermissionStatus
 NativeFileSystemHandleBase::GetReadPermissionStatus() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return handle_state_.read_grant->GetStatus();
 }
 
 NativeFileSystemHandleBase::PermissionStatus
 NativeFileSystemHandleBase::GetWritePermissionStatus() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   UpdateUsage();
   // It is not currently possible to have write only handles, so first check the
   // read permission status. See also:
@@ -164,6 +167,7 @@
 void NativeFileSystemHandleBase::DoGetPermissionStatus(
     bool writable,
     base::OnceCallback<void(PermissionStatus)> callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   std::move(callback).Run(writable ? GetWritePermissionStatus()
                                    : GetReadPermissionStatus());
 }
@@ -172,6 +176,7 @@
     bool writable,
     base::OnceCallback<void(blink::mojom::NativeFileSystemErrorPtr,
                             PermissionStatus)> callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   PermissionStatus current_status =
       writable ? GetWritePermissionStatus() : GetReadPermissionStatus();
   // If we already have a valid permission status, just return that. Also just
@@ -210,6 +215,7 @@
     base::OnceCallback<void(blink::mojom::NativeFileSystemErrorPtr,
                             PermissionStatus)> callback,
     NativeFileSystemPermissionGrant::PermissionRequestOutcome outcome) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   using Outcome = NativeFileSystemPermissionGrant::PermissionRequestOutcome;
   switch (outcome) {
     case Outcome::kInvalidFrame:
@@ -241,6 +247,7 @@
 }
 
 void NativeFileSystemHandleBase::UpdateUsage() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!usage_indicator_tracker_)
     return;
   bool is_readable =
@@ -258,6 +265,7 @@
 }
 
 void NativeFileSystemHandleBase::OnPermissionStatusChanged() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   UpdateUsage();
 }
 
diff --git a/content/browser/native_file_system/native_file_system_handle_base.h b/content/browser/native_file_system/native_file_system_handle_base.h
index 9fc8355d2..025e80ed 100644
--- a/content/browser/native_file_system/native_file_system_handle_base.h
+++ b/content/browser/native_file_system/native_file_system_handle_base.h
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
+#include "base/sequence_checker.h"
 #include "base/threading/sequence_bound.h"
 #include "content/browser/native_file_system/native_file_system_manager_impl.h"
 #include "content/common/content_export.h"
@@ -19,7 +20,6 @@
 namespace storage {
 class FileSystemContext;
 class FileSystemOperationRunner;
-class BlobStorageContext;
 }  // namespace storage
 
 namespace content {
@@ -29,10 +29,10 @@
 // such as permission requests. Instances of this class should be owned by the
 // NativeFileSystemManagerImpl instance passed in to the constructor.
 //
-// This class is not thread safe, all methods should only be called on the IO
-// thread. This is because code interacts directly with the file system backends
-// (via storage::FileSystemContext and store::FileSystemOperationRunner, which
-// both expect some of their methods to only be called on the IO thread).
+// This class is not thread safe, all methods must be called from the same
+// sequence. That sequence also has to be the same sequence on which the
+// NativeFileSystemPermissionContext expects to be interacted with, which
+// is the UI thread.
 class CONTENT_EXPORT NativeFileSystemHandleBase
     : public NativeFileSystemPermissionGrant::Observer {
  public:
@@ -83,9 +83,6 @@
   storage::FileSystemContext* file_system_context() {
     return manager()->context();
   }
-  storage::BlobStorageContext* blob_context() {
-    return manager()->blob_context();
-  }
 
   virtual base::WeakPtr<NativeFileSystemHandleBase> AsWeakPtr() = 0;
 
@@ -113,6 +110,7 @@
           storage::FileSystemOperationRunner::*method)(MethodArgs...),
       base::OnceCallback<void(CallbackArgs...)> callback,
       ArgsMinusCallback&&... args) {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     // Wrap the passed in callback in one that posts a task back to the current
     // sequence.
     auto wrapped_callback = base::BindOnce(
@@ -151,6 +149,7 @@
           storage::FileSystemOperationRunner::*method)(MethodArgs...),
       base::RepeatingCallback<void(CallbackArgs...)> callback,
       ArgsMinusCallback&&... args) {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     // Wrap the passed in callback in one that posts a task back to the current
     // sequence.
     auto wrapped_callback = base::BindRepeating(
@@ -179,6 +178,8 @@
             std::move(wrapped_callback)));
   }
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
  private:
   void DidRequestPermission(
       bool writable,
@@ -207,6 +208,7 @@
     base::OnceCallback<void(CallbackArgType)> callback,
     base::OnceCallback<void(CallbackArgType)> no_permission_callback,
     CallbackArgType callback_arg) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DoRequestPermission(
       /*writable=*/true,
       base::BindOnce(
diff --git a/content/browser/native_file_system/native_file_system_manager_impl.cc b/content/browser/native_file_system/native_file_system_manager_impl.cc
index ebe2a19..7b3b4c47 100644
--- a/content/browser/native_file_system/native_file_system_manager_impl.cc
+++ b/content/browser/native_file_system/native_file_system_manager_impl.cc
@@ -37,6 +37,7 @@
 using PermissionStatus = NativeFileSystemPermissionGrant::PermissionStatus;
 using SensitiveDirectoryResult =
     NativeFileSystemPermissionContext::SensitiveDirectoryResult;
+using storage::FileSystemContext;
 
 namespace {
 
@@ -147,49 +148,49 @@
 }
 
 NativeFileSystemManagerImpl::~NativeFileSystemManagerImpl() {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 void NativeFileSystemManagerImpl::BindReceiver(
     const BindingContext& binding_context,
     mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver) {
   DCHECK(base::FeatureList::IsEnabled(blink::features::kNativeFileSystemAPI));
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
-  DCHECK(network::IsOriginPotentiallyTrustworthy(binding_context.origin));
-  receivers_.Add(this, std::move(receiver), binding_context);
-}
-
-// static
-void NativeFileSystemManagerImpl::BindReceiverFromUIThread(
-    StoragePartitionImpl* storage_partition,
-    const BindingContext& binding_context,
-    mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!network::IsOriginPotentiallyTrustworthy(binding_context.origin)) {
     mojo::ReportBadMessage("Native File System access from Unsecure Origin");
     return;
   }
 
-  auto* manager = storage_partition->GetNativeFileSystemManager();
-  base::PostTask(FROM_HERE, {BrowserThread::IO},
-                 base::BindOnce(&NativeFileSystemManagerImpl::BindReceiver,
-                                base::Unretained(manager), binding_context,
-                                std::move(receiver)));
+  receivers_.Add(this, std::move(receiver), binding_context);
 }
 
 void NativeFileSystemManagerImpl::GetSandboxedFileSystem(
     GetSandboxedFileSystemCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  url::Origin origin = receivers_.current_context().origin;
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  context()->OpenFileSystem(
-      origin.GetURL(), storage::kFileSystemTypeTemporary,
-      storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
-      base::BindOnce(&NativeFileSystemManagerImpl::DidOpenSandboxedFileSystem,
-                     weak_factory_.GetWeakPtr(), receivers_.current_context(),
-                     std::move(callback)));
+  auto response_callback = base::BindOnce(
+      [](base::WeakPtr<NativeFileSystemManagerImpl> manager,
+         const BindingContext& binding_context,
+         GetSandboxedFileSystemCallback callback,
+         scoped_refptr<base::SequencedTaskRunner> task_runner, const GURL& root,
+         const std::string& fs_name, base::File::Error result) {
+        task_runner->PostTask(
+            FROM_HERE,
+            base::BindOnce(
+                &NativeFileSystemManagerImpl::DidOpenSandboxedFileSystem,
+                std::move(manager), binding_context, std::move(callback), root,
+                fs_name, result));
+      },
+      weak_factory_.GetWeakPtr(), receivers_.current_context(),
+      std::move(callback), base::SequencedTaskRunnerHandle::Get());
+
+  GURL origin = receivers_.current_context().origin.GetURL();
+  base::PostTask(FROM_HERE, {BrowserThread::IO},
+                 base::BindOnce(&FileSystemContext::OpenFileSystem, context(),
+                                origin, storage::kFileSystemTypeTemporary,
+                                storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
+                                std::move(response_callback)));
 }
 
 void NativeFileSystemManagerImpl::ChooseEntries(
@@ -197,7 +198,7 @@
     std::vector<blink::mojom::ChooseFileSystemEntryAcceptsOptionPtr> accepts,
     bool include_accepts_all,
     ChooseEntriesCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   const BindingContext& context = receivers_.current_context();
 
   // ChooseEntries API is only available to windows, as we need a frame to
@@ -229,7 +230,7 @@
           base::BindOnce(&NativeFileSystemManagerImpl::DidChooseEntries,
                          weak_factory_.GetWeakPtr(), context, options,
                          std::move(callback)),
-          base::CreateSingleThreadTaskRunner({BrowserThread::IO})));
+          base::SequencedTaskRunnerHandle::Get()));
 }
 
 blink::mojom::NativeFileSystemEntryPtr
@@ -245,7 +246,7 @@
 NativeFileSystemManagerImpl::CreateDirectoryEntryFromPath(
     const BindingContext& binding_context,
     const base::FilePath& directory_path) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   auto url =
       CreateFileSystemURLFromPath(binding_context.origin, directory_path);
 
@@ -296,7 +297,7 @@
     const BindingContext& binding_context,
     const storage::FileSystemURL& url,
     const SharedHandleState& handle_state) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(url.is_valid());
   DCHECK_EQ(url.mount_type() == storage::kFileSystemTypeIsolated,
             handle_state.file_system.is_valid())
@@ -314,7 +315,7 @@
     const BindingContext& binding_context,
     const storage::FileSystemURL& url,
     const SharedHandleState& handle_state) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(url.is_valid());
   DCHECK_EQ(url.mount_type() == storage::kFileSystemTypeIsolated,
             handle_state.file_system.is_valid())
@@ -334,7 +335,7 @@
     const storage::FileSystemURL& url,
     const storage::FileSystemURL& swap_url,
     const SharedHandleState& handle_state) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   mojo::PendingRemote<blink::mojom::NativeFileSystemFileWriter> result;
   mojo::PendingReceiver<blink::mojom::NativeFileSystemFileWriter>
@@ -369,7 +370,7 @@
 void NativeFileSystemManagerImpl::ResolveTransferToken(
     mojo::PendingRemote<blink::mojom::NativeFileSystemTransferToken> token,
     ResolvedTokenCallback callback) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   mojo::Remote<blink::mojom::NativeFileSystemTransferToken> token_remote(
       std::move(token));
@@ -383,6 +384,8 @@
 
 const base::SequenceBound<storage::FileSystemOperationRunner>&
 NativeFileSystemManagerImpl::operation_runner() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (!operation_runner_) {
     operation_runner_ =
         context()->CreateSequenceBoundFileSystemOperationRunner();
@@ -396,7 +399,7 @@
     const GURL& root,
     const std::string& filesystem_name,
     base::File::Error result) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (result != base::File::FILE_OK) {
     std::move(callback).Run(native_file_system_error::FromFileError(result),
@@ -422,6 +425,8 @@
     ChooseEntriesCallback callback,
     blink::mojom::NativeFileSystemErrorPtr result,
     std::vector<base::FilePath> entries) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   if (result->status != NativeFileSystemStatus::kOk) {
     std::move(callback).Run(
         std::move(result),
@@ -453,6 +458,7 @@
     ChooseEntriesCallback callback,
     std::vector<base::FilePath> entries,
     SensitiveDirectoryResult result) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   base::UmaHistogramEnumeration(
       "NativeFileSystemAPI.SensitiveDirectoryAccessResult", result);
 
@@ -473,7 +479,7 @@
             base::BindOnce(&NativeFileSystemManagerImpl::DidChooseEntries,
                            weak_factory_.GetWeakPtr(), binding_context, options,
                            std::move(callback)),
-            base::CreateSingleThreadTaskRunner({BrowserThread::IO})));
+            base::SequencedTaskRunnerHandle::Get()));
     return;
   }
 
@@ -521,6 +527,7 @@
     const base::FilePath& path,
     ChooseEntriesCallback callback,
     bool success) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   std::vector<blink::mojom::NativeFileSystemEntryPtr> result_entries;
   if (!success) {
     std::move(callback).Run(
@@ -541,6 +548,7 @@
     const base::FilePath& path,
     ChooseEntriesCallback callback,
     NativeFileSystemPermissionContext::PermissionStatus permission) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   base::UmaHistogramEnumeration(
       "NativeFileSystemAPI.ConfirmReadDirectoryResult", permission);
 
@@ -563,7 +571,7 @@
     bool is_directory,
     mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken>
         receiver) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   auto token_impl = std::make_unique<NativeFileSystemTransferTokenImpl>(
       url, handle_state,
@@ -576,7 +584,7 @@
 
 void NativeFileSystemManagerImpl::RemoveToken(
     const base::UnguessableToken& token) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   size_t count_removed = transfer_tokens_.erase(token);
   DCHECK_EQ(1u, count_removed);
@@ -586,7 +594,7 @@
     mojo::Remote<blink::mojom::NativeFileSystemTransferToken>,
     ResolvedTokenCallback callback,
     const base::UnguessableToken& token) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   auto it = transfer_tokens_.find(token);
   if (it == transfer_tokens_.end()) {
@@ -600,7 +608,7 @@
 NativeFileSystemManagerImpl::CreateFileSystemURLFromPath(
     const url::Origin& origin,
     const base::FilePath& path) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   auto* isolated_context = storage::IsolatedContext::GetInstance();
   DCHECK(isolated_context);
@@ -625,7 +633,7 @@
     const BindingContext& binding_context,
     const base::FilePath& file_path,
     NativeFileSystemPermissionContext::UserAction user_action) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   auto url = CreateFileSystemURLFromPath(binding_context.origin, file_path);
 
   scoped_refptr<NativeFileSystemPermissionGrant> read_grant, write_grant;
diff --git a/content/browser/native_file_system/native_file_system_manager_impl.h b/content/browser/native_file_system/native_file_system_manager_impl.h
index 5f54a98..1138f36 100644
--- a/content/browser/native_file_system/native_file_system_manager_impl.h
+++ b/content/browser/native_file_system/native_file_system_manager_impl.h
@@ -44,8 +44,8 @@
 // NativeFileSystemDirectoryHandleImpl and NativeFileSystemTransferTokenImpl
 // instances for a specific storage partition.
 //
-// This class is not thread safe, it is constructed on the UI thread, and after
-// that all methods should be called on the IO thread.
+// This class is not thread safe, it must be constructed and used on the UI
+// thread only.
 class CONTENT_EXPORT NativeFileSystemManagerImpl
     : public NativeFileSystemEntryFactory,
       public blink::mojom::NativeFileSystemManager {
@@ -85,11 +85,6 @@
       const BindingContext& binding_context,
       mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver);
 
-  static void BindReceiverFromUIThread(
-      StoragePartitionImpl* storage_partition,
-      const BindingContext& binding_context,
-      mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver);
-
   // blink::mojom::NativeFileSystemManager:
   void GetSandboxedFileSystem(GetSandboxedFileSystemCallback callback) override;
   void ChooseEntries(
@@ -155,12 +150,10 @@
       ResolvedTokenCallback callback);
 
   storage::FileSystemContext* context() {
-    DCHECK_CURRENTLY_ON(BrowserThread::IO);
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     return context_.get();
   }
-  storage::BlobStorageContext* blob_context() {
-    return blob_context_->context();
-  }
+  ChromeBlobStorageContext* blob_context() { return blob_context_.get(); }
   const base::SequenceBound<storage::FileSystemOperationRunner>&
   operation_runner();
 
@@ -245,6 +238,8 @@
           writer_receiver,
       bool has_transient_user_activation);
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   const scoped_refptr<storage::FileSystemContext> context_;
   const scoped_refptr<ChromeBlobStorageContext> blob_context_;
   base::SequenceBound<storage::FileSystemOperationRunner> operation_runner_;
diff --git a/content/browser/renderer_host/clipboard_host_impl.cc b/content/browser/renderer_host/clipboard_host_impl.cc
index efc7f21..4932d48 100644
--- a/content/browser/renderer_host/clipboard_host_impl.cc
+++ b/content/browser/renderer_host/clipboard_host_impl.cc
@@ -165,6 +165,32 @@
       pickle, ui::ClipboardFormatType::GetWebCustomDataType());
 }
 
+void ClipboardHostImpl::WriteRawData(const base::string16& format,
+                                     mojo_base::BigBuffer data) {
+  // Windows / X11 clipboards enter an unrecoverable state after registering
+  // some amount of unique formats, and there's no way to un-register these
+  // formats. For these clipboards, use a conservative limit to avoid
+  // registering too many formats, as:
+  // (1) Other native applications may also register clipboard formats.
+  // (2) |registered_formats| only persists over one Chrome Clipboard session.
+  // (3) Chrome also registers other clipboard formats.
+  //
+  // The limit is based on Windows, which has the smallest limit, at 0x4000.
+  // Windows represents clipboard formats using values in 0xC000 - 0xFFFF.
+  // Therefore, Windows supports at most 0x4000 registered formats. Reference:
+  // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerclipboardformata
+  static constexpr int kMaxWindowsClipboardFormats = 0x4000;
+  static constexpr int kMaxRegisteredFormats = kMaxWindowsClipboardFormats / 4;
+  static base::NoDestructor<std::set<base::string16>> registered_formats;
+  if (!base::Contains(*registered_formats, format)) {
+    if (registered_formats->size() >= kMaxRegisteredFormats)
+      return;
+    registered_formats->emplace(format);
+  }
+
+  clipboard_writer_->WriteData(format, std::move(data));
+}
+
 void ClipboardHostImpl::WriteBookmark(const std::string& url,
                                       const base::string16& title) {
   clipboard_writer_->WriteBookmark(title, url);
diff --git a/content/browser/renderer_host/clipboard_host_impl.h b/content/browser/renderer_host/clipboard_host_impl.h
index 432389d..b16345d 100644
--- a/content/browser/renderer_host/clipboard_host_impl.h
+++ b/content/browser/renderer_host/clipboard_host_impl.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "build/build_config.h"
 #include "content/common/content_export.h"
+#include "mojo/public/cpp/base/big_buffer.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h"
 #include "ui/base/clipboard/clipboard.h"
@@ -62,6 +63,7 @@
   void WriteSmartPasteMarker() override;
   void WriteCustomData(
       const base::flat_map<base::string16, base::string16>& data) override;
+  void WriteRawData(const base::string16&, mojo_base::BigBuffer) override;
   void WriteBookmark(const std::string& url,
                      const base::string16& title) override;
   void WriteImage(const SkBitmap& bitmap) override;
diff --git a/content/browser/renderer_host/direct_manipulation_helper_win.cc b/content/browser/renderer_host/direct_manipulation_helper_win.cc
index 6ce09b9f7..fe416c89 100644
--- a/content/browser/renderer_host/direct_manipulation_helper_win.cc
+++ b/content/browser/renderer_host/direct_manipulation_helper_win.cc
@@ -268,7 +268,9 @@
   if (has_animation_observer_)
     RemoveAnimationObserver();
   compositor_ = nullptr;
-  event_handler_->SetDirectManipulationHelper(nullptr);
+
+  if (event_handler_)
+    event_handler_->SetDirectManipulationHelper(nullptr);
 
   HRESULT hr;
   if (viewport_) {
diff --git a/content/browser/renderer_interface_binders.cc b/content/browser/renderer_interface_binders.cc
index b34b84a..7eaedb5 100644
--- a/content/browser/renderer_interface_binders.cc
+++ b/content/browser/renderer_interface_binders.cc
@@ -115,14 +115,16 @@
           // This code path is only for workers, hence always pass in
           // MSG_ROUTING_NONE as frame ID. Frames themselves go through
           // RenderFrameHostImpl instead.
-          NativeFileSystemManagerImpl::BindReceiverFromUIThread(
-              static_cast<StoragePartitionImpl*>(host->GetStoragePartition()),
+          auto* storage_partition =
+              static_cast<StoragePartitionImpl*>(host->GetStoragePartition());
+          auto* manager = storage_partition->GetNativeFileSystemManager();
+          manager->BindReceiver(
               NativeFileSystemManagerImpl::BindingContext(
                   origin,
-                  // TODO(https://crbug.com/989323): Obtain and use a better URL
-                  // for workers instead of the origin as source url. This URL
-                  // will be used for SafeBrowsing checks and for the Quarantine
-                  // Service.
+                  // TODO(https://crbug.com/989323): Obtain and use a better
+                  // URL for workers instead of the origin as source url.
+                  // This URL will be used for SafeBrowsing checks and for
+                  // the Quarantine Service.
                   origin.GetURL(), host->GetID(), MSG_ROUTING_NONE),
               std::move(receiver));
         }));
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index 5277980..cb787299 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -1823,10 +1823,18 @@
   DCHECK_EQ(filter->last_rect().y(), 0);
 }
 
+#if defined(OS_MACOSX) || defined(OS_LINUX)
+// Flaky timeout. https://crbug.com/1014155
+#define MAYBE_KeyboardScrollBubblingFromOOPIF \
+  DISABLED_KeyboardScrollBubblingFromOOPIF
+#else
+#define MAYBE_KeyboardScrollBubblingFromOOPIF KeyboardScrollBubblingFromOOPIF
+#endif
+
 // Tests that scrolling with the keyboard will bubble unused scroll to the
 // OOPIF's parent.
 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
-                       KeyboardScrollBubblingFromOOPIF) {
+                       MAYBE_KeyboardScrollBubblingFromOOPIF) {
   GURL main_url(embedded_test_server()->GetURL(
       "a.com", "/frame_tree/page_with_iframe_in_scrollable_div.html"));
   EXPECT_TRUE(NavigateToURL(shell(), main_url));
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index e9e7bfa6..98da3ab 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -903,8 +903,6 @@
   IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(WebContentsImpl, message, render_frame_host)
     IPC_MESSAGE_HANDLER(FrameHostMsg_DomOperationResponse,
                         OnDomOperationResponse)
-    IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeThemeColor,
-                        OnThemeColorChanged)
     IPC_MESSAGE_HANDLER(FrameHostMsg_DidFinishLoad, OnDidFinishLoad)
     IPC_MESSAGE_HANDLER(FrameHostMsg_DidLoadResourceFromMemoryCache,
                         OnDidLoadResourceFromMemoryCache)
@@ -4629,8 +4627,9 @@
   return false;
 }
 
-void WebContentsImpl::OnThemeColorChanged(RenderFrameHostImpl* source,
-                                          base::Optional<SkColor> theme_color) {
+void WebContentsImpl::OnThemeColorChanged(
+    RenderFrameHostImpl* source,
+    const base::Optional<SkColor>& theme_color) {
   if (source != GetMainFrame()) {
     // Only the main frame may control the theme.
     return;
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index c60ee5225..e85e078 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -636,6 +636,8 @@
                                    int context_id) override;
   RenderFrameHostImpl* GetMainFrameForInnerDelegate(
       FrameTreeNode* frame_tree_node) override;
+  void OnThemeColorChanged(RenderFrameHostImpl* source,
+                           const base::Optional<SkColor>& theme_color) override;
 
   // RenderViewHostDelegate ----------------------------------------------------
   RenderViewHostDelegateView* GetDelegateView() override;
@@ -1282,8 +1284,6 @@
                       const base::string16& user_input);
 
   // IPC message handlers.
-  void OnThemeColorChanged(RenderFrameHostImpl* source,
-                           base::Optional<SkColor> theme_color);
   void OnDidLoadResourceFromMemoryCache(
       RenderFrameHostImpl* source,
       const GURL& url,
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index ad7cd58..83aa880 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -4178,4 +4178,162 @@
   histogram_tester.ExpectBucketCount(kMaxFrameCountUMA, /* bucket */ 3,
                                      /* count */ 1);
 }
+
+namespace {
+
+class LoadingObserver : public WebContentsObserver {
+ public:
+  explicit LoadingObserver(WebContents* web_contents)
+      : WebContentsObserver(web_contents) {}
+
+  std::vector<std::string>& GetEvents() { return events_; }
+
+  void DidStartNavigation(NavigationHandle* navigation_handle) override {
+    events_.push_back("DidStartNavigation");
+  }
+
+  void DidFinishNavigation(NavigationHandle* navigation_handle) override {
+    events_.push_back("DidFinishNavigation");
+  }
+
+  void DidStartLoading() override { events_.push_back("DidStartLoading"); }
+
+  void DidStopLoading() override {
+    events_.push_back("DidStopLoading");
+    run_loop_.Quit();
+  }
+
+  void DocumentAvailableInMainFrame() override {
+    events_.push_back("DocumentAvailableInMainFrame");
+  }
+
+  void DocumentOnLoadCompletedInMainFrame() override {
+    events_.push_back("DocumentOnLoadCompletedInMainFrame");
+  }
+
+  void DOMContentLoaded(RenderFrameHost* render_frame_host) override {
+    events_.push_back("DOMContentLoaded");
+  }
+
+  void DidFinishLoad(RenderFrameHost* render_frame_host,
+                     const GURL& url) override {
+    events_.push_back("DidFinishLoad");
+  }
+
+  void DidFailLoad(RenderFrameHost* render_frame_host,
+                   const GURL& url,
+                   int error_code,
+                   const base::string16& error_description) override {
+    events_.push_back("DidFailLoad");
+  }
+
+  void Wait() { run_loop_.Run(); }
+
+ private:
+  std::vector<std::string> events_;
+  base::RepeatingClosure completion_callback_;
+  base::RunLoop run_loop_;
+};
+
+}  // namespace
+
+// These tests provide a reference points for simulating the navigation events
+// for unittests.
+//
+// Keep in sync with TestRenderFrameHostTest.LoadingCallbacksOrder_*.
+IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
+                       LoadingCallbacksOrder_CrossDocumentNavigation) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+
+  LoadingObserver loading_observer(web_contents);
+
+  GURL url = embedded_test_server()->GetURL("a.com", "/title1.html");
+  EXPECT_TRUE(NavigateToURL(shell(), url));
+  loading_observer.Wait();
+
+  EXPECT_THAT(loading_observer.GetEvents(),
+              testing::ElementsAre(
+                  "DidStartLoading", "DidStartNavigation",
+                  "DidFinishNavigation", "DocumentAvailableInMainFrame",
+                  "DOMContentLoaded", "DocumentOnLoadCompletedInMainFrame",
+                  "DidFinishLoad", "DidStopLoading"));
+}
+
+IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
+                       LoadingCallbacksOrder_SameDocumentNavigation) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+
+  GURL url1 = embedded_test_server()->GetURL("a.com", "/title1.html");
+  GURL url2 = embedded_test_server()->GetURL("a.com", "/title1.html#foo");
+
+  LoadingObserver loading_observer1(web_contents);
+  EXPECT_TRUE(NavigateToURL(shell(), url1));
+  loading_observer1.Wait();
+
+  LoadingObserver loading_observer2(web_contents);
+  EXPECT_TRUE(NavigateToURL(shell(), url2));
+  loading_observer2.Wait();
+
+  EXPECT_THAT(loading_observer2.GetEvents(),
+              testing::ElementsAre("DidStartLoading", "DidStartNavigation",
+                                   "DidFinishNavigation", "DidStopLoading"));
+}
+
+IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
+                       LoadingCallbacksOrder_AbortedNavigation) {
+  const char kPageURL[] = "/controlled_page_load.html";
+  net::test_server::ControllableHttpResponse response(embedded_test_server(),
+                                                      kPageURL);
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  GURL url = embedded_test_server()->GetURL("a.com", kPageURL);
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+
+  LoadingObserver loading_observer(web_contents);
+  shell()->LoadURL(url);
+  response.WaitForRequest();
+  response.Send(net::HttpStatusCode::HTTP_NO_CONTENT);
+  response.Done();
+
+  loading_observer.Wait();
+
+  EXPECT_THAT(loading_observer.GetEvents(),
+              testing::ElementsAre("DidStartLoading", "DidStartNavigation",
+                                   "DidFinishNavigation", "DidStopLoading"));
+}
+
+IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
+                       LoadingCallbacksOrder_ErrorPage) {
+  const char kPageURL[] = "/controlled_page_load.html";
+  net::test_server::ControllableHttpResponse response(embedded_test_server(),
+                                                      kPageURL);
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  GURL url = embedded_test_server()->GetURL("a.com", kPageURL);
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+
+  LoadingObserver loading_observer(web_contents);
+  shell()->LoadURL(url);
+  response.WaitForRequest();
+  response.Send(net::HttpStatusCode::HTTP_REQUEST_TIMEOUT);
+  response.Done();
+
+  loading_observer.Wait();
+
+  EXPECT_THAT(loading_observer.GetEvents(),
+              testing::ElementsAre(
+                  "DidStartLoading", "DidStartNavigation",
+                  "DidFinishNavigation", "DocumentAvailableInMainFrame",
+                  "DOMContentLoaded", "DidFinishLoad", "DidStartNavigation",
+                  "DidFinishNavigation", "DocumentAvailableInMainFrame",
+                  "DOMContentLoaded", "DocumentOnLoadCompletedInMainFrame",
+                  "DidFinishLoad", "DidStopLoading"));
+}
+
 }  // namespace content
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index 3f7b9ab..0249698 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -3260,8 +3260,7 @@
 
   // Theme color changes should not propagate past the WebContentsImpl before
   // the first visually non-empty paint has occurred.
-  rfh->OnMessageReceived(
-      FrameHostMsg_DidChangeThemeColor(rfh->GetRoutingID(), SK_ColorRED));
+  rfh->DidChangeThemeColor(SK_ColorRED);
 
   EXPECT_EQ(SK_ColorRED, contents()->GetThemeColor());
   EXPECT_EQ(base::nullopt, observer.last_theme_color());
@@ -3274,8 +3273,7 @@
   EXPECT_EQ(SK_ColorRED, observer.last_theme_color());
 
   // Additional changes made by the web contents should propagate as well.
-  rfh->OnMessageReceived(
-      FrameHostMsg_DidChangeThemeColor(rfh->GetRoutingID(), SK_ColorGREEN));
+  rfh->DidChangeThemeColor(SK_ColorGREEN);
 
   EXPECT_EQ(SK_ColorGREEN, contents()->GetThemeColor());
   EXPECT_EQ(SK_ColorGREEN, observer.last_theme_color());
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index 03d5268b..0742f40c 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -22,6 +22,7 @@
 import "services/network/public/mojom/url_loader_factory.mojom";
 import "services/service_manager/public/mojom/interface_provider.mojom";
 import "services/viz/public/mojom/compositing/surface_id.mojom";
+import "skia/public/mojom/skcolor.mojom";
 import "third_party/blink/public/mojom/blob/blob_url_store.mojom";
 import "third_party/blink/public/mojom/commit_result/commit_result.mojom";
 import "third_party/blink/public/mojom/devtools/console_message.mojom";
@@ -566,4 +567,7 @@
   // Evicts the page from the back/forward cache due to e.g., JavaScript
   // execution.
   EvictFromBackForwardCache();
+
+  // Notifies the browser that the current frame has changed theme color.
+  DidChangeThemeColor(skia.mojom.SkColor? theme_color);
 };
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 8b981c5a..0fc4073 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -1328,10 +1328,6 @@
                            bool /* out - success */,
                            base::string16 /* out - This is ignored.*/)
 
-// Notify browser the theme color has been changed.
-IPC_MESSAGE_ROUTED1(FrameHostMsg_DidChangeThemeColor,
-                    base::Optional<SkColor> /* theme_color */)
-
 // Register a new handler for URL requests with the given scheme.
 IPC_MESSAGE_ROUTED4(FrameHostMsg_RegisterProtocolHandler,
                     std::string /* scheme */,
diff --git a/content/public/browser/native_file_system_entry_factory.h b/content/public/browser/native_file_system_entry_factory.h
index 3666fc7..d7c42af 100644
--- a/content/public/browser/native_file_system_entry_factory.h
+++ b/content/public/browser/native_file_system_entry_factory.h
@@ -16,10 +16,11 @@
 
 namespace content {
 
-// Exposes methods for creating NativeFileSystemEntries.
+// Exposes methods for creating NativeFileSystemEntries. All these methods need
+// to be called on the UI thread.
 class CONTENT_EXPORT NativeFileSystemEntryFactory
     : public base::RefCountedThreadSafe<NativeFileSystemEntryFactory,
-                                        BrowserThread::DeleteOnIOThread> {
+                                        BrowserThread::DeleteOnUIThread> {
  public:
   // Context from which a created handle is going to be used. This is used for
   // security and permission checks. Pass in MSG_ROUTING_NONE as frame_id if
@@ -56,7 +57,7 @@
       const base::FilePath& directory_path) = 0;
 
  protected:
-  friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>;
+  friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
   friend class base::DeleteHelper<NativeFileSystemEntryFactory>;
   virtual ~NativeFileSystemEntryFactory() {}
 };
diff --git a/content/public/browser/native_file_system_permission_context.h b/content/public/browser/native_file_system_permission_context.h
index 4de15bac..1e763f101 100644
--- a/content/public/browser/native_file_system_permission_context.h
+++ b/content/public/browser/native_file_system_permission_context.h
@@ -14,7 +14,7 @@
 
 // Entry point to an embedder implemented permission context for the Native File
 // System API. Instances of this class can be retrieved via a BrowserContext.
-// All these methods should always be called on the same sequence.
+// All these methods must always be called on the UI thread.
 class NativeFileSystemPermissionContext {
  public:
   // The type of action a user took that resulted in needing a permission grant
diff --git a/content/public/browser/native_file_system_permission_grant.h b/content/public/browser/native_file_system_permission_grant.h
index 9ecadec..1433641 100644
--- a/content/public/browser/native_file_system_permission_grant.h
+++ b/content/public/browser/native_file_system_permission_grant.h
@@ -25,7 +25,7 @@
 //
 // NativeFileSystemPermissionGrant instances are not thread safe, and should
 // only be used (and referenced) on the same sequence as the PermssionContext
-// that created them.
+// that created them, i.e. the UI thread.
 class CONTENT_EXPORT NativeFileSystemPermissionGrant
     : public base::RefCounted<NativeFileSystemPermissionGrant> {
  public:
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h
index 9a8caf0..e0f9cda 100644
--- a/content/public/browser/render_frame_host.h
+++ b/content/public/browser/render_frame_host.h
@@ -27,6 +27,7 @@
 #include "third_party/blink/public/common/frame/sandbox_flags.h"
 #include "third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom.h"
+#include "third_party/blink/public/mojom/frame/frame.mojom.h"
 #include "third_party/blink/public/mojom/loader/pause_subresource_loading_handle.mojom-forward.h"
 #include "third_party/blink/public/platform/web_sudden_termination_disabler_type.h"
 #include "ui/accessibility/ax_tree_id.h"
@@ -126,6 +127,13 @@
   // current RenderFrameHost.
   virtual RenderFrameHost* GetParent() = 0;
 
+  // Returns a vector of all RenderFrameHosts in the subtree rooted at |this|.
+  // The results may be in different processes.
+  // TODO(https://crbug.com/1013740): Consider exposing a way for the browser
+  // process to run a function across a subtree in all renderers rather than
+  // exposing the RenderFrameHosts of the frames here.
+  virtual std::vector<RenderFrameHost*> GetFramesInSubtree() = 0;
+
   // Returns whether or not this RenderFrameHost is a descendant of |ancestor|.
   // This is equivalent to check that |ancestor| is reached by iterating on
   // GetParent().
@@ -289,14 +297,14 @@
   virtual bool HasSelection() = 0;
 
   // Text surrounding selection.
-  typedef base::OnceCallback<void(const base::string16& content,
-                                  uint32_t start_offset,
-                                  uint32_t end_offset)>
-      TextSurroundingSelectionCallback;
   virtual void RequestTextSurroundingSelection(
-      TextSurroundingSelectionCallback callback,
+      blink::mojom::Frame::GetTextSurroundingSelectionCallback callback,
       int max_length) = 0;
 
+  // Generates an intervention report in this frame.
+  virtual void SendInterventionReport(const std::string& id,
+                                      const std::string& message) = 0;
+
   // Tell the render frame to enable a set of javascript bindings. The argument
   // should be a combination of values from BindingsPolicy.
   virtual void AllowBindings(int binding_flags) = 0;
diff --git a/content/renderer/navigation_state.cc b/content/renderer/navigation_state.cc
index d32bfe45..ac6023f 100644
--- a/content/renderer/navigation_state.cc
+++ b/content/renderer/navigation_state.cc
@@ -87,8 +87,7 @@
         per_navigation_mojo_interface_commit_callback,
     std::unique_ptr<NavigationClient> navigation_client,
     bool was_initiated_in_this_frame)
-    : request_committed_(false),
-      was_within_same_document_(false),
+    : was_within_same_document_(false),
       was_initiated_in_this_frame_(was_initiated_in_this_frame),
       is_content_initiated_(is_content_initiated),
       common_params_(std::move(common_params)),
diff --git a/content/renderer/navigation_state.h b/content/renderer/navigation_state.h
index 5d3b40d..af75943 100644
--- a/content/renderer/navigation_state.h
+++ b/content/renderer/navigation_state.h
@@ -57,11 +57,9 @@
   const mojom::CommitNavigationParams& commit_params() const {
     return *commit_params_;
   }
-  bool request_committed() const { return request_committed_; }
   bool uses_per_navigation_mojo_interface() const {
     return navigation_client_.get();
   }
-  void set_request_committed(bool value) { request_committed_ = value; }
   void set_was_within_same_document(bool value) {
     was_within_same_document_ = value;
   }
@@ -106,7 +104,6 @@
       std::unique_ptr<NavigationClient> navigation_client,
       bool was_initiated_in_this_frame);
 
-  bool request_committed_;
   bool was_within_same_document_;
 
   // Indicates whether the navigation was initiated by the same RenderFrame
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index db30b901..4b2e423 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4316,16 +4316,10 @@
   // NOTE: Do not call back into JavaScript here, since this call is made from a
   // V8 security check.
 
-  // If the request hasn't yet committed, notify the browser process that it is
-  // no longer safe to show the pending URL of the main frame, since a URL spoof
-  // is now possible. (If the request has committed, the browser already knows.)
-  if (!has_accessed_initial_document_) {
-    NavigationState* navigation_state =
-        NavigationState::FromDocumentLoader(frame_->GetDocumentLoader());
-    if (!navigation_state->request_committed()) {
-      Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_));
-    }
-  }
+  // Notify the browser process that it is no longer safe to show the pending
+  // URL of the main frame, since a URL spoof is now possible.
+  if (!has_accessed_initial_document_)
+    Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_));
 
   has_accessed_initial_document_ = true;
 }
@@ -5158,8 +5152,7 @@
   if (frame_->Parent())
     return;
 
-  Send(new FrameHostMsg_DidChangeThemeColor(
-      routing_id_, frame_->GetDocument().ThemeColor()));
+  GetFrameHost()->DidChangeThemeColor(frame_->GetDocument().ThemeColor());
 }
 
 void RenderFrameImpl::ForwardResourceTimingToParent(
@@ -5182,7 +5175,6 @@
 
 void RenderFrameImpl::NavigateBackForwardSoon(int offset,
                                               bool has_user_gesture) {
-  render_view()->NavigateBackForwardSoon(offset, has_user_gesture);
   Send(new FrameHostMsg_GoToEntryAtOffset(GetRoutingID(), offset,
                                           has_user_gesture));
 }
@@ -6017,9 +6009,6 @@
         navigation_state->commit_params().pending_history_list_offset;
   }
 
-  if (commit_type == blink::WebHistoryCommitType::kWebBackForwardCommit)
-    render_view_->DidCommitProvisionalHistoryLoad();
-
   return is_new_navigation;
 }
 
@@ -6080,13 +6069,6 @@
         render_widget_->GetScreenInfo().device_scale_factor);
   }
 
-  // Remember that we've already processed this request, so we don't update
-  // the session history again.  We do this regardless of whether this is
-  // a session history navigation, because if we attempted a session history
-  // navigation without valid HistoryItem state, WebCore will think it is a
-  // new navigation.
-  navigation_state->set_request_committed(true);
-
   // If we are a top frame navigation to another document we should clear any
   // existing autoplay flags on the Page. This is because flags are stored at
   // the page level so subframes would only add to them.
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 4dc489f..bf3f42e8 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1690,21 +1690,6 @@
   needs_preferred_size_update_ = true;
 }
 
-void RenderViewImpl::NavigateBackForwardSoon(int offset,
-                                             bool has_user_gesture) {
-  history_navigation_virtual_time_pauser_ =
-      RenderThreadImpl::current()
-          ->GetWebMainThreadScheduler()
-          ->CreateWebScopedVirtualTimePauser(
-              "NavigateBackForwardSoon",
-              blink::WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant);
-  history_navigation_virtual_time_pauser_.PauseVirtualTime();
-}
-
-void RenderViewImpl::DidCommitProvisionalHistoryLoad() {
-  history_navigation_virtual_time_pauser_.UnpauseVirtualTime();
-}
-
 void RenderViewImpl::UpdateBrowserControlsState(
     BrowserControlsState constraints,
     BrowserControlsState current,
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 6dd9b0b..b1d9886 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -43,7 +43,6 @@
 #include "third_party/blink/public/common/feature_policy/feature_policy.h"
 #include "third_party/blink/public/mojom/renderer_preference_watcher.mojom.h"
 #include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
-#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h"
 #include "third_party/blink/public/platform/web_input_event.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/web/web_ax_object.h"
@@ -209,9 +208,6 @@
   // synchronously from the renderer.
   void SetFocusAndActivateForTesting(bool enable);
 
-  void NavigateBackForwardSoon(int offset, bool has_user_gesture);
-  void DidCommitProvisionalHistoryLoad();
-
   void UpdateBrowserControlsState(BrowserControlsState constraints,
                                   BrowserControlsState current,
                                   bool animate);
@@ -689,8 +685,6 @@
   // is fine.
   base::ObserverList<RenderViewObserver>::Unchecked observers_;
 
-  blink::WebScopedVirtualTimePauser history_navigation_virtual_time_pauser_;
-
   // ---------------------------------------------------------------------------
   // ADDING NEW DATA? Please see if it fits appropriately in one of the above
   // sections rather than throwing it randomly at the end. If you're adding a
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 724fa98..ebb36ffd 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1963,6 +1963,7 @@
     "../test/renderer_audio_output_stream_factory_context_impl_unittest.cc",
     "navigation_simulator_unittest.cc",
     "proxy_service_mojo_unittest.cc",
+    "test_render_frame_host_unittest.cc",
     "url_request_context_builder_mojo_unittest.cc",
   ]
 
diff --git a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py
index da273169..8f309e1b 100644
--- a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py
+++ b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py
@@ -2,6 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import contextlib
 from datetime import date
 import json
 import logging
@@ -40,6 +41,23 @@
 SKIA_GOLD_INSTANCE = 'chrome-gpu'
 
 
+@contextlib.contextmanager
+def RunInChromiumSrc():
+  old_cwd = os.getcwd()
+  os.chdir(path_util.GetChromiumSrcDir())
+  try:
+    yield
+  finally:
+    os.chdir(old_cwd)
+
+
+# This is mainly used to determine if we need to run a subprocess through the
+# shell - on Windows, finding executables via PATH doesn't work properly unless
+# run through the shell.
+def IsWin():
+  return sys.platform == 'win32'
+
+
 class _ImageParameters(object):
   def __init__(self):
     # Parameters for cloud storage reference images.
@@ -68,6 +86,9 @@
 
   _skia_gold_temp_dir = None
 
+  _local_run = None
+  _build_revision = None
+
   @classmethod
   def SetParsedCommandLineOptions(cls, options):
     cls._parsed_command_line_options = options
@@ -115,7 +136,7 @@
     parser.add_option(
       '--build-revision',
       help='Chrome revision being tested.',
-      default="unknownrev")
+      default=None)
     parser.add_option(
       '--test-machine-name',
       help='Name of the test machine. Specifying this argument causes this '
@@ -148,12 +169,13 @@
            'if the Skia Gold image comparison reported a failure, but '
            'otherwise perform the same steps as usual.')
     parser.add_option(
-      '--local-run',
-      action='store_true', default=False,
-      help='Runs the tests in a manner more suitable for local testing. '
-           'Specifically, runs goldctl in extra_imgtest_args mode (no upload) '
-           'and outputs local links to generated images. Implies '
-           '--no-luci-auth.')
+      '--local-run', default=None, type=int,
+      help='Specifies to run the test harness in local run mode or not. When '
+           'run in local mode, uploading to Gold is disabled and links to '
+           'help with local debugging are output. Running in local mode also '
+           'implies --no-luci-auth. If left unset, the test harness will '
+           'attempt to detect whether it is running on a workstation or not '
+           'and set this option accordingly.')
     parser.add_option(
       '--no-luci-auth',
       action='store_true', default=False,
@@ -225,8 +247,7 @@
                           cls.GetParsedCommandLineOptions().test_machine_name)
     base_bucket = '%s/gold_failures' % (cls._error_image_cloud_storage_bucket)
     image_name_with_revision_and_machine = '%s_%s_%s.png' % (
-      image_name, machine_name,
-      cls.GetParsedCommandLineOptions().build_revision)
+      image_name, machine_name, cls._GetBuildRevision())
     cls._UploadBitmapToCloudStorage(
       base_bucket, image_name_with_revision_and_machine, screenshot,
       public=True)
@@ -317,7 +338,7 @@
     parsed_options = self.GetParsedCommandLineOptions()
     build_id_args = [
       '--commit',
-      parsed_options.build_revision,
+      self._GetBuildRevision(),
     ]
     # If --review-patch-issue is passed, then we assume we're running on a
     # trybot.
@@ -381,7 +402,7 @@
     extra_imgtest_args = []
     extra_auth_args = []
     parsed_options = self.GetParsedCommandLineOptions()
-    if parsed_options.local_run:
+    if self._IsLocalRun():
       extra_imgtest_args.append('--dryrun')
     elif not parsed_options.no_luci_auth:
       extra_auth_args = ['--luci']
@@ -491,6 +512,52 @@
       raise
 
   @classmethod
+  def _IsLocalRun(cls):
+    """Returns whether the test is running on a local workstation or not."""
+    # Do nothing if we've already determine whether we're in local mode or not.
+    if cls._local_run is not None:
+      pass
+    # Use the --local-run value if it's been set.
+    elif cls.GetParsedCommandLineOptions().local_run is not None:
+      cls._local_run = cls.GetParsedCommandLineOptions().local_run
+    # Look for the presence of a git repo as a heuristic to determine whether
+    # we're running on a workstation or a bot.
+    else:
+      with RunInChromiumSrc():
+        try:
+          subprocess.check_call(['git', 'status'], shell=IsWin())
+          logging.warning(
+              'Automatically determined that test is running on a workstation')
+          cls._local_run = True
+        except subprocess.CalledProcessError:
+          logging.warning(
+              'Automatically determined that test is running on a bot')
+          cls._local_run = False
+    return cls._local_run
+
+  @classmethod
+  def _GetBuildRevision(cls):
+    """Returns the current git master revision being tested."""
+    # Do nothing if we've already determined the build revision.
+    if cls._build_revision is not None:
+      pass
+    # use the --build-revision value if it's been set.
+    elif cls.GetParsedCommandLineOptions().build_revision:
+      cls._build_revision = cls.GetParsedCommandLineOptions().build_revision
+    # Try to determine what revision we're on using git.
+    else:
+      with RunInChromiumSrc():
+        try:
+          cls._build_revision = subprocess.check_output(
+              ['git', 'rev-parse', 'origin/master'], shell=IsWin()).strip()
+          logging.warning('Automatically determined build revision to be %s',
+              cls._build_revision)
+        except subprocess.CalledProcessError:
+          raise Exception('--build-revision not passed, and unable to '
+                          'determine revision using git')
+    return cls._build_revision
+
+  @classmethod
   def GenerateGpuTests(cls, options):
     del options
     return []
diff --git a/content/test/mock_clipboard_host.cc b/content/test/mock_clipboard_host.cc
index 9cf5293..1f1d70e 100644
--- a/content/test/mock_clipboard_host.cc
+++ b/content/test/mock_clipboard_host.cc
@@ -127,6 +127,13 @@
     custom_data_[it.first] = it.second;
 }
 
+void MockClipboardHost::WriteRawData(const base::string16& format,
+                                     mojo_base::BigBuffer data) {
+  if (needs_reset_)
+    Reset();
+  raw_data_[format] = std::move(data);
+}
+
 void MockClipboardHost::WriteBookmark(const std::string& url,
                                       const base::string16& title) {}
 
diff --git a/content/test/mock_clipboard_host.h b/content/test/mock_clipboard_host.h
index efb490e..9eb5de6 100644
--- a/content/test/mock_clipboard_host.h
+++ b/content/test/mock_clipboard_host.h
@@ -8,6 +8,7 @@
 #include "base/macros.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
+#include "mojo/public/cpp/base/big_buffer.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -47,6 +48,7 @@
   void WriteSmartPasteMarker() override;
   void WriteCustomData(
       const base::flat_map<base::string16, base::string16>& data) override;
+  void WriteRawData(const base::string16&, mojo_base::BigBuffer) override;
   void WriteBookmark(const std::string& url,
                      const base::string16& title) override;
   void WriteImage(const SkBitmap& bitmap) override;
@@ -62,6 +64,7 @@
   GURL url_;
   SkBitmap image_;
   std::map<base::string16, base::string16> custom_data_;
+  std::map<base::string16, mojo_base::BigBuffer> raw_data_;
   bool write_smart_paste_ = false;
   bool needs_reset_ = false;
 
diff --git a/content/test/navigation_simulator_impl.cc b/content/test/navigation_simulator_impl.cc
index 966fcd1..43485163 100644
--- a/content/test/navigation_simulator_impl.cc
+++ b/content/test/navigation_simulator_impl.cc
@@ -628,6 +628,8 @@
         FrameHostMsg_SwapOut_ACK(previous_rfh->GetRoutingID()));
   }
 
+  loading_scenario_ =
+      TestRenderFrameHost::LoadingScenario::NewDocumentNavigation;
   state_ = FINISHED;
   if (!keep_loading_)
     StopLoading();
@@ -801,6 +803,8 @@
     state_ = FAILED;
     return;
   }
+  loading_scenario_ =
+      TestRenderFrameHost::LoadingScenario::kSameDocumentNavigation;
   state_ = FINISHED;
   if (!keep_loading_)
     StopLoading();
@@ -1341,7 +1345,7 @@
 
 void NavigationSimulatorImpl::StopLoading() {
   CHECK(render_frame_host_);
-  render_frame_host_->SimulateLoadingCompleted();
+  render_frame_host_->SimulateLoadingCompleted(loading_scenario_);
 }
 
 void NavigationSimulatorImpl::FailLoading(
diff --git a/content/test/navigation_simulator_impl.h b/content/test/navigation_simulator_impl.h
index 077ff89..21450f3 100644
--- a/content/test/navigation_simulator_impl.h
+++ b/content/test/navigation_simulator_impl.h
@@ -16,6 +16,7 @@
 #include "content/public/browser/navigation_throttle.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/test/navigation_simulator.h"
+#include "content/test/test_render_frame_host.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "net/base/host_port_pair.h"
@@ -274,6 +275,8 @@
   bool was_initiated_by_link_click_ = false;
   bool browser_initiated_;
   bool same_document_ = false;
+  TestRenderFrameHost::LoadingScenario loading_scenario_ =
+      TestRenderFrameHost::LoadingScenario::kOther;
   blink::mojom::ReferrerPtr referrer_;
   ui::PageTransition transition_;
   ReloadType reload_type_ = ReloadType::NONE;
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index 5b92b65..05df4e7b 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/bind_helpers.h"
+#include "base/optional.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/common/frame.mojom.h"
@@ -29,6 +30,7 @@
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/public/web/web_navigation_control.h"
+#include "third_party/skia/include/core/SkColor.h"
 
 namespace content {
 
@@ -227,6 +229,9 @@
 
   void EvictFromBackForwardCache() override {}
 
+  void DidChangeThemeColor(
+      const base::Optional<::SkColor>& theme_color) override {}
+
  private:
   std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params>
       last_commit_params_;
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc
index eda2dbfe..2eabc97 100644
--- a/content/test/test_render_frame_host.cc
+++ b/content/test/test_render_frame_host.cc
@@ -19,6 +19,7 @@
 #include "content/common/frame_owner_properties.h"
 #include "content/common/navigation_params.h"
 #include "content/common/navigation_params_utils.h"
+#include "content/common/view_messages.h"
 #include "content/public/browser/navigation_throttle.h"
 #include "content/public/common/navigation_policy.h"
 #include "content/public/common/url_constants.h"
@@ -693,7 +694,25 @@
       .InitWithNewPipeAndPassReceiver();
 }
 
-void TestRenderFrameHost::SimulateLoadingCompleted() {
+void TestRenderFrameHost::SimulateLoadingCompleted(
+    TestRenderFrameHost::LoadingScenario loading_scenario) {
+  if (!is_loading())
+    return;
+
+  if (loading_scenario == LoadingScenario::NewDocumentNavigation) {
+    static_cast<IPC::Listener*>(GetRenderViewHost())
+        ->OnMessageReceived(ViewHostMsg_DocumentAvailableInMainFrame(
+            GetRenderViewHost()->GetRoutingID(),
+            /* uses_temporary_zoom_level */ false));
+
+    OnMessageReceived(FrameHostMsg_DidFinishDocumentLoad(GetRoutingID()));
+
+    DocumentOnLoadCompleted();
+
+    OnMessageReceived(
+        FrameHostMsg_DidFinishLoad(GetRoutingID(), GetLastCommittedURL()));
+  }
+
   OnDidStopLoading();
 }
 
diff --git a/content/test/test_render_frame_host.h b/content/test/test_render_frame_host.h
index 8fcc648..87304f9 100644
--- a/content/test/test_render_frame_host.h
+++ b/content/test/test_render_frame_host.h
@@ -207,9 +207,18 @@
     return navigation_requests_;
   }
 
+  enum class LoadingScenario {
+    NewDocumentNavigation,
+    kSameDocumentNavigation,
+
+    // TODO(altimin): Improve handling for the scenarios where navigation or
+    // page load have failed.
+    kOther
+  };
+
   // Simulates RenderFrameHost finishing loading and dispatching all relevant
   // callbacks.
-  void SimulateLoadingCompleted();
+  void SimulateLoadingCompleted(LoadingScenario loading_scenario);
 
  protected:
   void SendCommitNavigation(
diff --git a/content/test/test_render_frame_host_unittest.cc b/content/test/test_render_frame_host_unittest.cc
new file mode 100644
index 0000000..af0d6c6
--- /dev/null
+++ b/content/test/test_render_frame_host_unittest.cc
@@ -0,0 +1,108 @@
+// Copyright 2019 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 "content/test/test_render_frame_host.h"
+
+#include <string>
+#include <vector>
+
+#include "content/public/browser/web_contents_observer.h"
+#include "content/test/navigation_simulator_impl.h"
+#include "content/test/test_render_view_host.h"
+#include "content/test/test_web_contents.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+class TestRenderFrameHostTest : public RenderViewHostImplTestHarness,
+                                public WebContentsObserver {
+ public:
+  void SetUp() override {
+    RenderViewHostImplTestHarness::SetUp();
+    contents()->GetMainFrame()->InitializeRenderFrameIfNeeded();
+    Observe(RenderViewHostImplTestHarness::web_contents());
+  }
+
+  std::vector<std::string>& Events() { return events_; }
+
+  void DidStartNavigation(NavigationHandle* navigation_handle) override {
+    events_.push_back("DidStartNavigation");
+  }
+
+  void DidFinishNavigation(NavigationHandle* navigation_handle) override {
+    events_.push_back("DidFinishNavigation");
+  }
+
+  void DidStartLoading() override { events_.push_back("DidStartLoading"); }
+
+  void DidStopLoading() override { events_.push_back("DidStopLoading"); }
+
+  void DocumentAvailableInMainFrame() override {
+    events_.push_back("DocumentAvailableInMainFrame");
+  }
+
+  void DocumentOnLoadCompletedInMainFrame() override {
+    events_.push_back("DocumentOnLoadCompletedInMainFrame");
+  }
+
+  void DOMContentLoaded(RenderFrameHost* render_frame_host) override {
+    events_.push_back("DOMContentLoaded");
+  }
+
+  void DidFinishLoad(RenderFrameHost* render_frame_host,
+                     const GURL& url) override {
+    events_.push_back("DidFinishLoad");
+  }
+
+  void DidFailLoad(RenderFrameHost* render_frame_host,
+                   const GURL& url,
+                   int error_code,
+                   const base::string16& error_description) override {
+    events_.push_back("DidFailLoad");
+  }
+
+ private:
+  std::vector<std::string> events_;
+};
+
+// These tests check that the loading events simulated by NavigationSimulator
+// together with TestRenderFrameHost::SimulateLoadingCompleted match
+// the real behaviour, captured by the browser tests.
+//
+// Keep in sync with WebContentsImplBrowserTest.LoadingCallbacksOrder_*.
+TEST_F(TestRenderFrameHostTest, LoadingCallbacksOrder_CrossDocument) {
+  std::unique_ptr<NavigationSimulator> simulator =
+      NavigationSimulator::CreateRendererInitiated(
+          GURL("https://example.test/"), main_rfh());
+  simulator->Start();
+  simulator->Commit();
+
+  EXPECT_THAT(Events(),
+              testing::ElementsAre(
+                  "DidStartLoading", "DidStartNavigation",
+                  "DidFinishNavigation", "DocumentAvailableInMainFrame",
+                  "DOMContentLoaded", "DocumentOnLoadCompletedInMainFrame",
+                  "DidFinishLoad", "DidStopLoading"));
+}
+
+TEST_F(TestRenderFrameHostTest, LoadingCallbacksOrder_SameDocument) {
+  std::unique_ptr<NavigationSimulator> simulator =
+      NavigationSimulator::CreateRendererInitiated(
+          GURL("https://example.test/"), main_rfh());
+  simulator->Start();
+  simulator->Commit();
+
+  Events().clear();
+
+  NavigationSimulator::CreateRendererInitiated(
+      GURL("https://example.test/#foo"), main_rfh())
+      ->CommitSameDocument();
+
+  EXPECT_THAT(Events(),
+              testing::ElementsAre("DidStartLoading", "DidStartNavigation",
+                                   "DidFinishNavigation", "DidStopLoading"));
+}
+
+}  // namespace content
diff --git a/crypto/ec_private_key.cc b/crypto/ec_private_key.cc
index c30a6107..f8d3b87 100644
--- a/crypto/ec_private_key.cc
+++ b/crypto/ec_private_key.cc
@@ -43,7 +43,7 @@
 
 // static
 std::unique_ptr<ECPrivateKey> ECPrivateKey::CreateFromPrivateKeyInfo(
-    const std::vector<uint8_t>& input) {
+    base::span<const uint8_t> input) {
   OpenSSLErrStackTracer err_tracer(FROM_HERE);
 
   CBS cbs;
@@ -59,7 +59,7 @@
 
 // static
 std::unique_ptr<ECPrivateKey> ECPrivateKey::CreateFromEncryptedPrivateKeyInfo(
-    const std::vector<uint8_t>& encrypted_private_key_info) {
+    base::span<const uint8_t> encrypted_private_key_info) {
   OpenSSLErrStackTracer err_tracer(FROM_HERE);
 
   CBS cbs;
@@ -87,6 +87,28 @@
   return result;
 }
 
+// static
+std::unique_ptr<ECPrivateKey> ECPrivateKey::DeriveFromSecret(
+    base::span<const uint8_t> secret) {
+  bssl::UniquePtr<EC_GROUP> group(
+      EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
+  if (!group)
+    return nullptr;
+
+  bssl::UniquePtr<EC_KEY> ec_key(
+      EC_KEY_derive_from_secret(group.get(), secret.data(), secret.size()));
+  if (!ec_key)
+    return nullptr;
+
+  std::unique_ptr<ECPrivateKey> result(new ECPrivateKey());
+  result->key_.reset(EVP_PKEY_new());
+  if (!result->key_ || !EVP_PKEY_set1_EC_KEY(result->key_.get(), ec_key.get()))
+    return nullptr;
+
+  CHECK_EQ(EVP_PKEY_EC, EVP_PKEY_id(result->key_.get()));
+  return result;
+}
+
 std::unique_ptr<ECPrivateKey> ECPrivateKey::Copy() const {
   std::unique_ptr<ECPrivateKey> copy(new ECPrivateKey());
   copy->key_ = bssl::UpRef(key_);
@@ -135,7 +157,7 @@
 
 bool ECPrivateKey::ExportPublicKey(std::vector<uint8_t>* output) const {
   OpenSSLErrStackTracer err_tracer(FROM_HERE);
-  uint8_t *der;
+  uint8_t* der;
   size_t der_len;
   bssl::ScopedCBB cbb;
   if (!CBB_init(cbb.get(), 0) ||
diff --git a/crypto/ec_private_key.h b/crypto/ec_private_key.h
index c087d238..de69709 100644
--- a/crypto/ec_private_key.h
+++ b/crypto/ec_private_key.h
@@ -12,6 +12,7 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/span.h"
 #include "base/macros.h"
 #include "build/build_config.h"
 #include "crypto/crypto_export.h"
@@ -37,7 +38,7 @@
   // an ASN.1-encoded PrivateKeyInfo block from PKCS #8. This can return
   // nullptr if initialization fails.
   static std::unique_ptr<ECPrivateKey> CreateFromPrivateKeyInfo(
-      const std::vector<uint8_t>& input);
+      base::span<const uint8_t> input);
 
   // Creates a new instance by importing an existing key pair.
   // The key pair is given as an ASN.1-encoded PKCS #8 EncryptedPrivateKeyInfo
@@ -47,7 +48,13 @@
   // This function is deprecated. Use CreateFromPrivateKeyInfo for new code.
   // See https://crbug.com/603319.
   static std::unique_ptr<ECPrivateKey> CreateFromEncryptedPrivateKeyInfo(
-      const std::vector<uint8_t>& encrypted_private_key_info);
+      base::span<const uint8_t> encrypted_private_key_info);
+
+  // Creates a new instance by deriving private key from |secret|, and generates
+  // public key points accordingly. The created key will use the NIST P-256
+  // curve. This can return nullptr if initialization fails.
+  static std::unique_ptr<ECPrivateKey> DeriveFromSecret(
+      base::span<const uint8_t> secret);
 
   // Returns a copy of the object.
   std::unique_ptr<ECPrivateKey> Copy() const;
@@ -80,7 +87,6 @@
   DISALLOW_COPY_AND_ASSIGN(ECPrivateKey);
 };
 
-
 }  // namespace crypto
 
 #endif  // CRYPTO_EC_PRIVATE_KEY_H_
diff --git a/crypto/ec_private_key_unittest.cc b/crypto/ec_private_key_unittest.cc
index cfec13c..8a9cca7 100644
--- a/crypto/ec_private_key_unittest.cc
+++ b/crypto/ec_private_key_unittest.cc
@@ -123,6 +123,70 @@
             raw_public_key);
 }
 
+TEST(ECPrivateKeyUnitTest, DeriveFromSecret) {
+  static const uint8_t kSecret[] = {
+      0x90, 0x48, 0x0a, 0x51, 0x77, 0xa3, 0x72, 0xfb, 0xba, 0x0f, 0x08,
+      0x5e, 0xc5, 0x6f, 0x8f, 0x6d, 0x1c, 0xaf, 0xa9, 0x8a, 0xdf, 0xa9,
+      0x7c, 0x38, 0x70, 0x47, 0xb9, 0x72, 0xcc, 0x5c, 0xaa, 0xc2,
+  };
+
+  static const uint8_t kPrivateKeyInfo[] = {
+      0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86,
+      0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
+      0x03, 0x01, 0x07, 0x04, 0x6d, 0x30, 0x6b, 0x02, 0x01, 0x01, 0x04, 0x20,
+      0x0e, 0x87, 0xc8, 0x4d, 0x92, 0x14, 0x52, 0x93, 0x96, 0xad, 0x63, 0x9a,
+      0x6a, 0xa7, 0xeb, 0x56, 0x5c, 0xaf, 0xab, 0x69, 0x06, 0xd4, 0x37, 0xf8,
+      0x7d, 0xd7, 0x04, 0xa9, 0xec, 0x6e, 0x2e, 0x96, 0xa1, 0x44, 0x03, 0x42,
+      0x00, 0x04, 0xe2, 0xf5, 0x86, 0x4a, 0xf6, 0xe0, 0x7d, 0x19, 0x94, 0x2d,
+      0x54, 0x16, 0x58, 0x98, 0x62, 0x78, 0xf2, 0x8f, 0x30, 0x77, 0x93, 0x7d,
+      0x2c, 0x17, 0x29, 0xe5, 0x50, 0x42, 0xed, 0x8d, 0x6c, 0x31, 0x34, 0x16,
+      0x20, 0x4f, 0xcc, 0x50, 0x09, 0xaf, 0x8d, 0x56, 0x56, 0x73, 0xe3, 0xb9,
+      0x5a, 0x15, 0xbf, 0x73, 0x25, 0x91, 0xa0, 0xaf, 0x8f, 0x64, 0x19, 0xf4,
+      0x17, 0x8e, 0x7a, 0x05, 0x76, 0x23,
+  };
+
+  static const uint8_t kSubjectPublicKeyInfo[] = {
+      0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
+      0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
+      0x42, 0x00, 0x04, 0xe2, 0xf5, 0x86, 0x4a, 0xf6, 0xe0, 0x7d, 0x19, 0x94,
+      0x2d, 0x54, 0x16, 0x58, 0x98, 0x62, 0x78, 0xf2, 0x8f, 0x30, 0x77, 0x93,
+      0x7d, 0x2c, 0x17, 0x29, 0xe5, 0x50, 0x42, 0xed, 0x8d, 0x6c, 0x31, 0x34,
+      0x16, 0x20, 0x4f, 0xcc, 0x50, 0x09, 0xaf, 0x8d, 0x56, 0x56, 0x73, 0xe3,
+      0xb9, 0x5a, 0x15, 0xbf, 0x73, 0x25, 0x91, 0xa0, 0xaf, 0x8f, 0x64, 0x19,
+      0xf4, 0x17, 0x8e, 0x7a, 0x05, 0x76, 0x23,
+  };
+  static const uint8_t kRawPublicKey[] = {
+      0xe2, 0xf5, 0x86, 0x4a, 0xf6, 0xe0, 0x7d, 0x19, 0x94, 0x2d, 0x54,
+      0x16, 0x58, 0x98, 0x62, 0x78, 0xf2, 0x8f, 0x30, 0x77, 0x93, 0x7d,
+      0x2c, 0x17, 0x29, 0xe5, 0x50, 0x42, 0xed, 0x8d, 0x6c, 0x31, 0x34,
+      0x16, 0x20, 0x4f, 0xcc, 0x50, 0x09, 0xaf, 0x8d, 0x56, 0x56, 0x73,
+      0xe3, 0xb9, 0x5a, 0x15, 0xbf, 0x73, 0x25, 0x91, 0xa0, 0xaf, 0x8f,
+      0x64, 0x19, 0xf4, 0x17, 0x8e, 0x7a, 0x05, 0x76, 0x23,
+  };
+
+  std::unique_ptr<crypto::ECPrivateKey> key(
+      crypto::ECPrivateKey::DeriveFromSecret(kSecret));
+  ASSERT_TRUE(key);
+
+  std::vector<uint8_t> privkey;
+  EXPECT_TRUE(key->ExportPrivateKey(&privkey));
+  EXPECT_EQ(std::vector<uint8_t>(std::begin(kPrivateKeyInfo),
+                                 std::end(kPrivateKeyInfo)),
+            privkey);
+
+  std::vector<uint8_t> public_key;
+  ASSERT_TRUE(key->ExportPublicKey(&public_key));
+  EXPECT_EQ(std::vector<uint8_t>(std::begin(kSubjectPublicKeyInfo),
+                                 std::end(kSubjectPublicKeyInfo)),
+            public_key);
+
+  std::string raw_public_key;
+  ASSERT_TRUE(key->ExportRawPublicKey(&raw_public_key));
+  EXPECT_EQ(std::string(reinterpret_cast<const char*>(kRawPublicKey),
+                        sizeof(kRawPublicKey)),
+            raw_public_key);
+}
+
 TEST(ECPrivateKeyUnitTest, RSAPrivateKeyInfo) {
   static const uint8_t kPrivateKeyInfo[] = {
       0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a,
diff --git a/docs/gpu/gpu_testing.md b/docs/gpu/gpu_testing.md
index f00c82eb..0fef762 100644
--- a/docs/gpu/gpu_testing.md
+++ b/docs/gpu/gpu_testing.md
@@ -272,10 +272,17 @@
 Additionally, the tests normally rely on the Gold server for viewing images
 produced by a test run. This does not work if the data is not actually uploaded.
 
-In order to get around both of these issues, simply pass the `--local-run` flag
-to the tests. This will disable uploading, but otherwise go through the same
-steps as a test normally would. Each test will also print out a `file://` URL to
-the image it produces and a link to all approved images for that test in Gold.
+The pixel tests contain logic to automatically determine whether they are
+running on a workstation or not, as well as to determine what git revision is
+being tested. This *should* mean that the pixel tests will automatically work
+when run locally. However, if the local run detection code fails for some
+reason, you can manually pass some flags to force the same behavior:
+
+In order to get around the local run issues, simply pass the `--local-run=1`
+flag to the tests. This will disable uploading, but otherwise go through the
+same steps as a test normally would. Each test will also print out a `file://`
+URL to the image it produces and a link to all approved images for that test in
+Gold.
 
 Because the image produced by the test locally is likely slightly different from
 any of the approved images in Gold, local test runs are likely to fail during
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index 6eadf4cf..28074fb 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1452,6 +1452,8 @@
   AUTOTESTPRIVATE_SETCLIPBOARDTEXTDATA = 1389,
   AUTOTESTPRIVATE_INITIALIZEEVENTS = 1390,
   AUTOTESTPRIVATE_WAITFORDISPLAYROTATION = 1391,
+  AUTOTESTPRIVATE_ARCAPPTRACINGSTART = 1392,
+  AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE = 1393,
   // Last entry: Add new entries above, then run:
   // python tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
index 19141de..f2c43ccb 100644
--- a/gpu/config/gpu_driver_bug_list.json
+++ b/gpu/config/gpu_driver_bug_list.json
@@ -3175,22 +3175,6 @@
       ]
     },
     {
-      "id": 298,
-      "cr_bugs": [941716],
-      "description": "AImageReader is very crashy on this driver version",
-      "os": {
-        "type" : "android"
-      },
-      "gl_vendor": "Qualcomm.*",
-      "driver_version": {
-        "op": "=",
-        "value": "269.0"
-      },
-      "features": [
-        "disable_aimagereader"
-      ]
-    },
-    {
       "id": 299,
       "description": "Context lost recovery often fails on PowerVR Rogue GE8* GPUs on Android.",
       "cr_bugs": [942106],
diff --git a/headless/lib/browser/headless_clipboard.cc b/headless/lib/browser/headless_clipboard.cc
index 55de359..ced6f7b4 100644
--- a/headless/lib/browser/headless_clipboard.cc
+++ b/headless/lib/browser/headless_clipboard.cc
@@ -118,12 +118,21 @@
     *result = it->second;
 }
 
-void HeadlessClipboard::WriteObjects(ui::ClipboardBuffer buffer,
-                                     const ObjectMap& objects) {
+void HeadlessClipboard::WritePortableRepresentations(ui::ClipboardBuffer buffer,
+                                                     const ObjectMap& objects) {
   Clear(buffer);
   default_store_buffer_ = buffer;
   for (const auto& kv : objects)
-    DispatchObject(kv.first, kv.second);
+    DispatchPortableRepresentation(kv.first, kv.second);
+  default_store_buffer_ = ui::ClipboardBuffer::kCopyPaste;
+}
+
+void HeadlessClipboard::WritePlatformRepresentations(
+    ui::ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  Clear(buffer);
+  default_store_buffer_ = buffer;
+  DispatchPlatformRepresentations(std::move(platform_representations));
   default_store_buffer_ = ui::ClipboardBuffer::kCopyPaste;
 }
 
diff --git a/headless/lib/browser/headless_clipboard.h b/headless/lib/browser/headless_clipboard.h
index f563caf..aee5fc49 100644
--- a/headless/lib/browser/headless_clipboard.h
+++ b/headless/lib/browser/headless_clipboard.h
@@ -48,8 +48,12 @@
   void ReadBookmark(base::string16* title, std::string* url) const override;
   void ReadData(const ui::ClipboardFormatType& format,
                 std::string* result) const override;
-  void WriteObjects(ui::ClipboardBuffer buffer,
-                    const ObjectMap& objects) override;
+  void WritePortableRepresentations(ui::ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ui::ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
diff --git a/media/blink/BUILD.gn b/media/blink/BUILD.gn
index e527c1c..78f3e5f 100644
--- a/media/blink/BUILD.gn
+++ b/media/blink/BUILD.gn
@@ -22,6 +22,8 @@
     "interval_map.h",
     "key_system_config_selector.cc",
     "key_system_config_selector.h",
+    "learning_experiment_helper.cc",
+    "learning_experiment_helper.h",
     "lru.h",
     "media_blink_export.h",
     "multibuffer.cc",
@@ -133,6 +135,7 @@
     "cache_util_unittest.cc",
     "interval_map_unittest.cc",
     "key_system_config_selector_unittest.cc",
+    "learning_experiment_helper_unittest.cc",
     "lru_unittest.cc",
     "mock_resource_fetch_context.cc",
     "mock_resource_fetch_context.h",
diff --git a/media/learning/common/experiment_helper.cc b/media/blink/learning_experiment_helper.cc
similarity index 62%
rename from media/learning/common/experiment_helper.cc
rename to media/blink/learning_experiment_helper.cc
index 0e30d05a..e343038 100644
--- a/media/learning/common/experiment_helper.cc
+++ b/media/blink/learning_experiment_helper.cc
@@ -2,20 +2,26 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "media/learning/common/experiment_helper.h"
+#include "media/blink/learning_experiment_helper.h"
 
 namespace media {
-namespace learning {
 
-ExperimentHelper::ExperimentHelper(
+using learning::FeatureDictionary;
+using learning::FeatureVector;
+using learning::LearningTask;
+using learning::LearningTaskController;
+using learning::TargetValue;
+
+LearningExperimentHelper::LearningExperimentHelper(
     std::unique_ptr<LearningTaskController> controller)
     : controller_(std::move(controller)) {}
 
-ExperimentHelper::~ExperimentHelper() {
+LearningExperimentHelper::~LearningExperimentHelper() {
   CancelObservationIfNeeded();
 }
 
-void ExperimentHelper::BeginObservation(const FeatureDictionary& dictionary) {
+void LearningExperimentHelper::BeginObservation(
+    const FeatureDictionary& dictionary) {
   if (!controller_)
     return;
 
@@ -29,7 +35,8 @@
   controller_->BeginObservation(observation_id_, features);
 }
 
-void ExperimentHelper::CompleteObservationIfNeeded(const TargetValue& target) {
+void LearningExperimentHelper::CompleteObservationIfNeeded(
+    const TargetValue& target) {
   if (!observation_id_)
     return;
 
@@ -37,7 +44,7 @@
   observation_id_ = base::UnguessableToken::Null();
 }
 
-void ExperimentHelper::CancelObservationIfNeeded() {
+void LearningExperimentHelper::CancelObservationIfNeeded() {
   if (!observation_id_)
     return;
 
@@ -45,5 +52,4 @@
   observation_id_ = base::UnguessableToken::Null();
 }
 
-}  // namespace learning
 }  // namespace media
diff --git a/media/learning/common/experiment_helper.h b/media/blink/learning_experiment_helper.h
similarity index 62%
rename from media/learning/common/experiment_helper.h
rename to media/blink/learning_experiment_helper.h
index 6a47e54..907bacf 100644
--- a/media/learning/common/experiment_helper.h
+++ b/media/blink/learning_experiment_helper.h
@@ -2,53 +2,52 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_LEARNING_COMMON_EXPERIMENT_HELPER_H_
-#define MEDIA_LEARNING_COMMON_EXPERIMENT_HELPER_H_
+#ifndef MEDIA_BLINK_LEARNING_EXPERIMENT_HELPER_H_
+#define MEDIA_BLINK_LEARNING_EXPERIMENT_HELPER_H_
 
 #include <memory>
 #include <string>
 
-#include "base/component_export.h"
 #include "base/macros.h"
+#include "media/blink/media_blink_export.h"
 #include "media/learning/common/feature_dictionary.h"
 #include "media/learning/common/labelled_example.h"
 #include "media/learning/common/learning_task.h"
 #include "media/learning/common/learning_task_controller.h"
 
 namespace media {
-namespace learning {
 
 // Helper for adding a learning experiment to existing code.
-class COMPONENT_EXPORT(LEARNING_COMMON) ExperimentHelper {
+class MEDIA_BLINK_EXPORT LearningExperimentHelper {
  public:
   // If |controller| is null, then everything else no-ops.
-  ExperimentHelper(std::unique_ptr<LearningTaskController> controller);
+  LearningExperimentHelper(
+      std::unique_ptr<learning::LearningTaskController> controller);
 
   // Cancels any existing observation.
-  ~ExperimentHelper();
+  ~LearningExperimentHelper();
 
   // Start a new observation.  Any existing observation is cancelled.  Does
   // nothing if there's no controller.
-  void BeginObservation(const FeatureDictionary& dictionary);
+  void BeginObservation(const learning::FeatureDictionary& dictionary);
 
   // Complete any pending observation.  Does nothing if none is in progress.
-  void CompleteObservationIfNeeded(const TargetValue& target);
+  void CompleteObservationIfNeeded(const learning::TargetValue& target);
 
   // Cancel any pending observation.
   void CancelObservationIfNeeded();
 
  private:
   // May be null.
-  std::unique_ptr<LearningTaskController> controller_;
+  std::unique_ptr<learning::LearningTaskController> controller_;
 
   // May be null if no observation is in flight.  Must be null if |controller_|
   // is null.
   base::UnguessableToken observation_id_;
 
-  DISALLOW_COPY_AND_ASSIGN(ExperimentHelper);
+  DISALLOW_COPY_AND_ASSIGN(LearningExperimentHelper);
 };
 
-}  // namespace learning
 }  // namespace media
 
-#endif  // MEDIA_LEARNING_COMMON_EXPERIMENT_HELPER_H_
+#endif  // MEDIA_BLINK_LEARNING_EXPERIMENT_HELPER_H_
diff --git a/media/learning/common/experiment_helper_unittest.cc b/media/blink/learning_experiment_helper_unittest.cc
similarity index 80%
rename from media/learning/common/experiment_helper_unittest.cc
rename to media/blink/learning_experiment_helper_unittest.cc
index 16e98ae..d0432ea 100644
--- a/media/learning/common/experiment_helper_unittest.cc
+++ b/media/blink/learning_experiment_helper_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "media/learning/common/experiment_helper.h"
+#include "media/blink/learning_experiment_helper.h"
 
 #include <memory>
 
@@ -10,10 +10,16 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using media::learning::FeatureDictionary;
+using media::learning::FeatureValue;
+using media::learning::FeatureVector;
+using media::learning::LearningTask;
+using media::learning::LearningTaskController;
+using media::learning::ObservationCompletion;
+using media::learning::TargetValue;
 using testing::_;
 
 namespace media {
-namespace learning {
 
 class MockLearningTaskController : public LearningTaskController {
  public:
@@ -36,7 +42,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockLearningTaskController);
 };
 
-class ExperimentHelperTest : public testing::Test {
+class LearningExperimentHelperTest : public testing::Test {
  public:
   void SetUp() override {
     const std::string feature_name_1("feature 1");
@@ -59,17 +65,17 @@
         std::make_unique<MockLearningTaskController>(task_);
     controller_raw_ = controller.get();
 
-    helper_ = std::make_unique<ExperimentHelper>(std::move(controller));
+    helper_ = std::make_unique<LearningExperimentHelper>(std::move(controller));
   }
 
   LearningTask task_;
   MockLearningTaskController* controller_raw_ = nullptr;
-  std::unique_ptr<ExperimentHelper> helper_;
+  std::unique_ptr<LearningExperimentHelper> helper_;
 
   FeatureDictionary dict_;
 };
 
-TEST_F(ExperimentHelperTest, BeginComplete) {
+TEST_F(LearningExperimentHelperTest, BeginComplete) {
   EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _));
   helper_->BeginObservation(dict_);
   TargetValue target(123);
@@ -86,30 +92,30 @@
   helper_->CompleteObservationIfNeeded(target);
 }
 
-TEST_F(ExperimentHelperTest, BeginCancel) {
+TEST_F(LearningExperimentHelperTest, BeginCancel) {
   EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _));
   helper_->BeginObservation(dict_);
   EXPECT_CALL(*controller_raw_, CancelObservation(_));
   helper_->CancelObservationIfNeeded();
 }
 
-TEST_F(ExperimentHelperTest, CompleteWithoutBeginDoesNothing) {
+TEST_F(LearningExperimentHelperTest, CompleteWithoutBeginDoesNothing) {
   EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _)).Times(0);
   EXPECT_CALL(*controller_raw_, CompleteObservation(_, _)).Times(0);
   EXPECT_CALL(*controller_raw_, CancelObservation(_)).Times(0);
   helper_->CompleteObservationIfNeeded(TargetValue(123));
 }
 
-TEST_F(ExperimentHelperTest, CancelWithoutBeginDoesNothing) {
+TEST_F(LearningExperimentHelperTest, CancelWithoutBeginDoesNothing) {
   EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _)).Times(0);
   EXPECT_CALL(*controller_raw_, CompleteObservation(_, _)).Times(0);
   EXPECT_CALL(*controller_raw_, CancelObservation(_)).Times(0);
   helper_->CancelObservationIfNeeded();
 }
 
-TEST_F(ExperimentHelperTest, DoesNothingWithoutController) {
+TEST_F(LearningExperimentHelperTest, DoesNothingWithoutController) {
   // Make sure that nothing crashes if there's no controller.
-  ExperimentHelper helper(nullptr);
+  LearningExperimentHelper helper(nullptr);
 
   // Begin / complete.
   helper_->BeginObservation(dict_);
@@ -124,5 +130,4 @@
   helper_->CancelObservationIfNeeded();
 }
 
-}  // namespace learning
 }  // namespace media
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index edc3e495..23b3c4e6 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -35,12 +35,12 @@
 #include "media/base/simple_watch_timer.h"
 #include "media/base/text_track.h"
 #include "media/blink/buffered_data_source_host_impl.h"
+#include "media/blink/learning_experiment_helper.h"
 #include "media/blink/media_blink_export.h"
 #include "media/blink/multibuffer_data_source.h"
 #include "media/blink/video_frame_compositor.h"
 #include "media/blink/webmediaplayer_params.h"
 #include "media/filters/pipeline_controller.h"
-#include "media/learning/common/experiment_helper.h"
 #include "media/renderers/paint_canvas_video_renderer.h"
 #include "services/media_session/public/cpp/media_position.h"
 #include "third_party/blink/public/platform/media/webmediaplayer_delegate.h"
@@ -1015,7 +1015,7 @@
   RendererFactorySelector::FactoryType reported_renderer_type_;
   SimpleWatchTimer simple_watch_timer_;
 
-  learning::ExperimentHelper will_play_helper_;
+  LearningExperimentHelper will_play_helper_;
 
   base::WeakPtr<WebMediaPlayerImpl> weak_this_;
   base::WeakPtrFactory<WebMediaPlayerImpl> weak_factory_{this};
diff --git a/media/gpu/android/codec_image.cc b/media/gpu/android/codec_image.cc
index 917207f..4362da2d 100644
--- a/media/gpu/android/codec_image.cc
+++ b/media/gpu/android/codec_image.cc
@@ -150,6 +150,11 @@
 
 void CodecImage::NotifyOverlayPromotion(bool promotion,
                                         const gfx::Rect& bounds) {
+  // Use-after-release.  It happens if the renderer crashes before getting
+  // returns from viz.
+  if (!promotion_hint_cb_)
+    return;
+
   if (!codec_buffer_wait_coordinator_ && promotion) {
     // When |CodecImage| is already backed by SurfaceView, and it should be used
     // as overlay.
@@ -339,7 +344,12 @@
 
 std::unique_ptr<base::android::ScopedHardwareBufferFenceSync>
 CodecImage::GetAHardwareBuffer() {
-  DCHECK(codec_buffer_wait_coordinator_);
+  // It would be nice if this didn't happen, but we can be incorrectly marked
+  // as free when viz is still using us for drawing.  This can happen if the
+  // renderer crashes before receiving returns.  It's hard to catch elsewhere,
+  // so just handle it gracefully here.
+  if (!codec_buffer_wait_coordinator_)
+    return nullptr;
 
   RenderToTextureOwnerFrontBuffer(BindingsMode::kDontRestoreIfBound);
   return codec_buffer_wait_coordinator_->texture_owner()->GetAHardwareBuffer();
diff --git a/media/gpu/android/codec_image_unittest.cc b/media/gpu/android/codec_image_unittest.cc
index e545235f..bf0135a 100644
--- a/media/gpu/android/codec_image_unittest.cc
+++ b/media/gpu/android/codec_image_unittest.cc
@@ -404,4 +404,11 @@
   EXPECT_TRUE(i->was_rendered_to_front_buffer());
 }
 
+TEST_F(CodecImageTest, GetAHardwareBufferAfterRelease) {
+  // Make sure that we get a nullptr AHB once we've marked the image as unused.
+  auto i = NewImage(kTextureOwner);
+  i->NotifyUnused();
+  EXPECT_FALSE(i->GetAHardwareBuffer());
+}
+
 }  // namespace media
diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc
index c35103c..c6521a7 100644
--- a/media/gpu/android/video_frame_factory_impl.cc
+++ b/media/gpu/android/video_frame_factory_impl.cc
@@ -324,6 +324,26 @@
   frame->metadata()->SetBoolean(VideoFrameMetadata::TEXTURE_OWNER,
                                 !!codec_buffer_wait_coordinator);
 
+  // TODO(liberato): if this is run via being dropped, then it would be nice
+  // to find that out rather than treating the image as unused.  If the renderer
+  // is torn down, then this will be dropped rather than run.  While |provider_|
+  // allows this, it doesn't have enough information to understand if the image
+  // is free or not.  The problem only really affects the pool, since the
+  // direct provider destroys the SharedImage which works in either case.  Any
+  // use of the image (e.g., if viz is still using it after the renderer has
+  // been torn down unexpectedly), will just not draw anything.  That's fine.
+  //
+  // However, the pool will try to re-use the image, so the SharedImage remains
+  // valid.  However, it's not a good idea to draw with it until the CodecImage
+  // is re-initialized with a new frame.  If the renderer is torn down without
+  // getting returns from viz, then the pool does the wrong thing.  However,
+  // the pool really doesn't know anything about VideoFrames, and dropping the
+  // callback does, in fact, signal that it's unused now (as described in the
+  // api).  So, we probably should wrap the release cb in a default invoke, and
+  // if the default invoke happens, do something.  Unclear what, though.  Can't
+  // move it into the CodecImage (might hold a ref to the CodecImage in the cb),
+  // so it's unclear.  As it is, CodecImage just handles the case where it's
+  // used after release.
   frame->SetReleaseMailboxCB(std::move(record.release_cb));
 
   // Note that we don't want to handle the CodecImageGroup here.  It needs to be
diff --git a/media/learning/common/BUILD.gn b/media/learning/common/BUILD.gn
index a8116637..7a39303 100644
--- a/media/learning/common/BUILD.gn
+++ b/media/learning/common/BUILD.gn
@@ -24,8 +24,6 @@
   defines = [ "IS_LEARNING_COMMON_IMPL" ]
 
   sources = [
-    "experiment_helper.cc",
-    "experiment_helper.h",
     "feature_dictionary.cc",
     "feature_dictionary.h",
     "feature_library.cc",
@@ -52,7 +50,6 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
-    "experiment_helper_unittest.cc",
     "feature_dictionary_unittest.cc",
     "labelled_example_unittest.cc",
     "media_learning_tasks_unittest.cc",
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 4b346ce..506d4df 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -3277,7 +3277,7 @@
     ]
   }
 
-  executable("quic_client_for_interop_test") {
+  executable("quic_client_interop_test") {
     sources = [
       "third_party/quiche/src/quic/tools/fake_proof_verifier.h",
       "third_party/quiche/src/quic/tools/quic_client_interop_test_bin.cc",
@@ -6647,7 +6647,7 @@
     "//base",
     "//net",
   ]
-  dict = "base/unescape_url_component_fuzzer.dict"
+  dict = "data/fuzzer_dictionaries/unescape_url_component_fuzzer.dict"
   libfuzzer_options = [ "max_len = 2048" ]
 }
 
@@ -6695,6 +6695,7 @@
     ":net_fuzzer_test_support",
     "//net",
   ]
+  dict = "data/fuzzer_dictionaries/http_chunked_decoder_fuzzer.dict"
 }
 
 fuzzer_test("net_http_content_disposition_fuzzer") {
diff --git a/net/cookies/cookie_deletion_info.cc b/net/cookies/cookie_deletion_info.cc
index ff92c05..73a1194 100644
--- a/net/cookies/cookie_deletion_info.cc
+++ b/net/cookies/cookie_deletion_info.cc
@@ -90,7 +90,8 @@
 CookieDeletionInfo& CookieDeletionInfo::operator=(
     const CookieDeletionInfo& rhs) = default;
 
-bool CookieDeletionInfo::Matches(const CanonicalCookie& cookie) const {
+bool CookieDeletionInfo::Matches(const CanonicalCookie& cookie,
+                                 CookieAccessSemantics access_semantics) const {
   if (session_control != SessionControl::IGNORE_CONTROL &&
       (cookie.IsPersistent() !=
        (session_control == SessionControl::PERSISTENT_COOKIES))) {
@@ -117,7 +118,8 @@
   // cookies associated with the URL are deleted.
   if (url.has_value() &&
       !cookie
-           .IncludeForRequestURL(url.value(), CookieOptions::MakeAllInclusive())
+           .IncludeForRequestURL(url.value(), CookieOptions::MakeAllInclusive(),
+                                 access_semantics)
            .IsInclude()) {
     return false;
   }
diff --git a/net/cookies/cookie_deletion_info.h b/net/cookies/cookie_deletion_info.h
index f5eeeb2..be0bdaa 100644
--- a/net/cookies/cookie_deletion_info.h
+++ b/net/cookies/cookie_deletion_info.h
@@ -11,6 +11,7 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "net/cookies/canonical_cookie.h"
+#include "net/cookies/cookie_constants.h"
 
 namespace net {
 
@@ -87,9 +88,17 @@
   // |creation_range| AND the |cookie| name is equal to |name|, etc. then true
   // will be returned. If not false.
   //
+  // |access_semantics| is the access semantics mode of the cookie at the time
+  // of the attempted match. This is used to determine whether the cookie
+  // matches a particular URL based on effective SameSite mode. (But the value
+  // should not matter because the CookieOptions used for this check includes
+  // all cookies for a URL regardless of SameSite).
+  //
   // All members are used. See comments above other members for specifics
   // about how checking is done for that value.
-  bool Matches(const CanonicalCookie& cookie) const;
+  bool Matches(const CanonicalCookie& cookie,
+               CookieAccessSemantics access_semantics =
+                   CookieAccessSemantics::UNKNOWN) const;
 
   // See comment above for TimeRange::Contains() for more info.
   TimeRange creation_range;
diff --git a/net/cookies/cookie_deletion_info_unittest.cc b/net/cookies/cookie_deletion_info_unittest.cc
index a6e8535..39131b5 100644
--- a/net/cookies/cookie_deletion_info_unittest.cc
+++ b/net/cookies/cookie_deletion_info_unittest.cc
@@ -4,7 +4,10 @@
 
 #include "net/cookies/cookie_deletion_info.h"
 
+#include "base/test/scoped_feature_list.h"
+#include "net/base/features.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
 
 namespace net {
 
@@ -84,7 +87,7 @@
                                     /*creation=*/base::Time::Now(),
                                     /*expiration=*/base::Time::Max(),
                                     /*last_access=*/base::Time::Now(),
-                                    /*secure=*/false,
+                                    /*secure=*/true,
                                     /*httponly=*/false,
                                     CookieSameSite::NO_RESTRICTION,
                                     CookiePriority::COOKIE_PRIORITY_DEFAULT);
@@ -94,7 +97,7 @@
       /*creation=*/base::Time::Now(),
       /*expiration=*/base::Time(),
       /*last_access=*/base::Time::Now(),
-      /*secure=*/false,
+      /*secure=*/true,
       /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
       CookiePriority::COOKIE_PRIORITY_DEFAULT);
 
@@ -119,7 +122,7 @@
                                 /*creation=*/base::Time::Now(),
                                 /*expiration=*/base::Time::Max(),
                                 /*last_access=*/base::Time::Now(),
-                                /*secure=*/false,
+                                /*secure=*/true,
                                 /*httponly=*/false,
                                 CookieSameSite::NO_RESTRICTION,
                                 CookiePriority::COOKIE_PRIORITY_DEFAULT);
@@ -129,7 +132,7 @@
                               /*creation=*/base::Time::Now(),
                               /*expiration=*/base::Time::Max(),
                               /*last_access=*/base::Time::Now(),
-                              /*secure=*/false,
+                              /*secure=*/true,
                               /*httponly=*/false,
                               CookieSameSite::NO_RESTRICTION,
                               CookiePriority::COOKIE_PRIORITY_DEFAULT);
@@ -160,7 +163,7 @@
                           /*creation=*/base::Time::Now(),
                           /*expiration=*/base::Time::Max(),
                           /*last_access=*/base::Time::Now(),
-                          /*secure=*/false,
+                          /*secure=*/true,
                           /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
                           CookiePriority::COOKIE_PRIORITY_DEFAULT);
   CanonicalCookie cookie2("cookie2-name", "cookie2-value",
@@ -168,7 +171,7 @@
                           /*creation=*/base::Time::Now(),
                           /*expiration=*/base::Time::Max(),
                           /*last_access=*/base::Time::Now(),
-                          /*secure=*/false,
+                          /*secure=*/true,
                           /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
                           CookiePriority::COOKIE_PRIORITY_DEFAULT);
 
@@ -184,7 +187,7 @@
                           /*creation=*/base::Time::Now(),
                           /*expiration=*/base::Time::Max(),
                           /*last_access=*/base::Time::Now(),
-                          /*secure=*/false,
+                          /*secure=*/true,
                           /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
                           CookiePriority::COOKIE_PRIORITY_DEFAULT);
   CanonicalCookie cookie2("cookie2-name", "cookie2-value",
@@ -192,7 +195,7 @@
                           /*creation=*/base::Time::Now(),
                           /*expiration=*/base::Time::Max(),
                           /*last_access=*/base::Time::Now(),
-                          /*secure=*/false,
+                          /*secure=*/true,
                           /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
                           CookiePriority::COOKIE_PRIORITY_DEFAULT);
 
@@ -208,7 +211,7 @@
                          /*creation=*/base::Time::Now(),
                          /*expiration=*/base::Time::Max(),
                          /*last_access=*/base::Time::Now(),
-                         /*secure=*/false,
+                         /*secure=*/true,
                          /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
                          CookiePriority::COOKIE_PRIORITY_DEFAULT);
 
@@ -236,7 +239,7 @@
         /*creation=*/base::Time::FromDoubleT(kTestMinEpoch + 1),
         /*expiration=*/base::Time::Max(),
         /*last_access=*/base::Time::FromDoubleT(kTestMinEpoch + 1),
-        /*secure=*/false,
+        /*secure=*/true,
         /*httponly=*/false,
         /*same_site=*/CookieSameSite::NO_RESTRICTION,
         /*priority=*/CookiePriority::COOKIE_PRIORITY_DEFAULT);
@@ -318,4 +321,38 @@
   EXPECT_FALSE(delete_info.Matches(create_cookie("outside.com")));
 }
 
+// Test that Matches() works regardless of the cookie access semantics (because
+// the IncludeForRequestURL call uses CookieOptions::MakeAllInclusive).
+TEST(CookieDeletionInfoTest, MatchesWithCookieAccessSemantics) {
+  // Cookie with unspecified SameSite.
+  auto cookie =
+      CanonicalCookie::Create(GURL("https://www.example.com"), "cookie=1",
+                              base::Time::Now(), base::nullopt);
+
+  {
+    // With SameSite features off.
+    base::test::ScopedFeatureList feature_list;
+    feature_list.InitAndDisableFeature(features::kSameSiteByDefaultCookies);
+
+    CookieDeletionInfo delete_info;
+    delete_info.url = GURL("https://www.example.com/path");
+    EXPECT_TRUE(delete_info.Matches(*cookie));  // defaults to UNKNOWN
+    EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::UNKNOWN));
+    EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::LEGACY));
+    EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::NONLEGACY));
+  }
+  {
+    // With SameSite features on.
+    base::test::ScopedFeatureList feature_list;
+    feature_list.InitAndEnableFeature(features::kSameSiteByDefaultCookies);
+
+    CookieDeletionInfo delete_info;
+    delete_info.url = GURL("https://www.example.com/path");
+    EXPECT_TRUE(delete_info.Matches(*cookie));  // defaults to UNKNOWN
+    EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::UNKNOWN));
+    EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::LEGACY));
+    EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::NONLEGACY));
+  }
+}
+
 }  // namespace net
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc
index e317102..adbda8bd 100644
--- a/net/cookies/cookie_monster.cc
+++ b/net/cookies/cookie_monster.cc
@@ -663,7 +663,7 @@
     CanonicalCookie* cc = curit->second.get();
     ++it;
 
-    if (delete_info.Matches(*cc)) {
+    if (delete_info.Matches(*cc, GetAccessSemanticsForCookie(*cc))) {
       InternalDeleteCookie(curit, true, /*sync_to_store*/
                            DELETE_COOKIE_EXPLICIT);
       ++num_deleted;
diff --git a/net/http/http_chunked_decoder_fuzzer.dict b/net/data/fuzzer_dictionaries/http_chunked_decoder_fuzzer.dict
similarity index 100%
rename from net/http/http_chunked_decoder_fuzzer.dict
rename to net/data/fuzzer_dictionaries/http_chunked_decoder_fuzzer.dict
diff --git a/net/base/unescape_url_component_fuzzer.dict b/net/data/fuzzer_dictionaries/unescape_url_component_fuzzer.dict
similarity index 100%
rename from net/base/unescape_url_component_fuzzer.dict
rename to net/data/fuzzer_dictionaries/unescape_url_component_fuzzer.dict
diff --git a/net/http/http_proxy_connect_job.cc b/net/http/http_proxy_connect_job.cc
index 6ee20a1..2349095 100644
--- a/net/http/http_proxy_connect_job.cc
+++ b/net/http/http_proxy_connect_job.cc
@@ -664,6 +664,7 @@
   return quic_stream_request_->Request(
       proxy_server, quic_version, ssl_params->privacy_mode(),
       kH2QuicTunnelPriority, socket_tag(), params_->network_isolation_key(),
+      ssl_params->GetDirectConnectionParams()->disable_secure_dns(),
       ssl_params->ssl_config().GetCertVerifyFlags(),
       GURL("https://" + proxy_server.ToString()), net_log(),
       &quic_net_error_details_,
@@ -821,7 +822,8 @@
       params_->ssl_params()->GetDirectConnectionParams()->destination(),
       ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
       SpdySessionKey::IsProxySession::kTrue, socket_tag(),
-      params_->network_isolation_key());
+      params_->network_isolation_key(),
+      params_->ssl_params()->GetDirectConnectionParams()->disable_secure_dns());
 }
 
 }  // namespace net
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc
index 3371b0f..a130dac 100644
--- a/net/http/http_proxy_connect_job_unittest.cc
+++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -861,6 +861,62 @@
   }
 }
 
+TEST_P(HttpProxyConnectJobTest, SpdySessionKeyDisableSecureDns) {
+  if (GetParam() != SPDY)
+    return;
+
+  SSLSocketDataProvider ssl_data(ASYNC, OK);
+  InitializeSpdySsl(&ssl_data);
+  session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data);
+
+  // SPDY proxy CONNECT request / response, with a pause during the read.
+  spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect(
+      nullptr, 0, 1, HttpProxyConnectJob::kH2QuicTunnelPriority,
+      HostPortPair(kEndpointHost, 443)));
+  MockWrite spdy_writes[] = {CreateMockWrite(req, 0)};
+  spdy::SpdySerializedFrame resp(
+      spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
+  MockRead spdy_reads[] = {CreateMockRead(resp, 1), MockRead(ASYNC, 0, 2)};
+  SequencedSocketData spdy_data(spdy_reads, spdy_writes);
+  spdy_data.set_connect_data(MockConnect(ASYNC, OK));
+  SequencedSocketData* sequenced_data = &spdy_data;
+  session_deps_.socket_factory->AddSocketDataProvider(sequenced_data);
+
+  TestConnectJobDelegate test_delegate;
+  auto ssl_params = base::MakeRefCounted<SSLSocketParams>(
+      base::MakeRefCounted<TransportSocketParams>(
+          HostPortPair(kHttpsProxyHost, 443), true /* disable_secure_dns */,
+          OnHostResolutionCallback()),
+      nullptr, nullptr, HostPortPair(kHttpsProxyHost, 443), SSLConfig(),
+      PRIVACY_MODE_DISABLED, NetworkIsolationKey());
+  auto http_proxy_params = base::MakeRefCounted<HttpProxySocketParams>(
+      nullptr /* tcp_params */, std::move(ssl_params), false /* is_quic */,
+      HostPortPair(kEndpointHost, 443), /*is_trusted_proxy=*/false,
+      /*tunnel=*/true, TRAFFIC_ANNOTATION_FOR_TESTS, NetworkIsolationKey());
+
+  std::unique_ptr<ConnectJob> connect_job = CreateConnectJob(
+      std::move(http_proxy_params), &test_delegate, DEFAULT_PRIORITY);
+
+  EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING));
+  EXPECT_THAT(test_delegate.WaitForResult(), test::IsOk());
+  EXPECT_TRUE(
+      common_connect_job_params_->spdy_session_pool->FindAvailableSession(
+          SpdySessionKey(HostPortPair(kHttpsProxyHost, 443),
+                         ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+                         SpdySessionKey::IsProxySession::kTrue, SocketTag(),
+                         NetworkIsolationKey(), true /* disable_secure_dns */),
+          /* enable_ip_based_pooling = */ false,
+          /* is_websocket = */ false, NetLogWithSource()));
+  EXPECT_FALSE(
+      common_connect_job_params_->spdy_session_pool->FindAvailableSession(
+          SpdySessionKey(HostPortPair(kHttpsProxyHost, 443),
+                         ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+                         SpdySessionKey::IsProxySession::kTrue, SocketTag(),
+                         NetworkIsolationKey(), false /* disable_secure_dns */),
+          /* enable_ip_based_pooling = */ false,
+          /* is_websocket = */ false, NetLogWithSource()));
+}
+
 // Make sure that HttpProxyConnectJob does not pass on its priority to its
 // SPDY session's socket request on Init, or on SetPriority.
 TEST_P(HttpProxyConnectJobTest, SetSpdySessionSocketRequestPriority) {
diff --git a/net/http/http_request_info.cc b/net/http/http_request_info.cc
index f764880..1410e3b1a 100644
--- a/net/http/http_request_info.cc
+++ b/net/http/http_request_info.cc
@@ -10,6 +10,7 @@
     : upload_data_stream(nullptr),
       load_flags(0),
       privacy_mode(PRIVACY_MODE_DISABLED),
+      disable_secure_dns(false),
       reporting_upload_depth(0) {}
 
 HttpRequestInfo::HttpRequestInfo(const HttpRequestInfo& other) = default;
diff --git a/net/http/http_request_info.h b/net/http/http_request_info.h
index 2e0cfa4..3c57bc6 100644
--- a/net/http/http_request_info.h
+++ b/net/http/http_request_info.h
@@ -48,6 +48,9 @@
   // tracked by the server (e.g. without channel id).
   PrivacyMode privacy_mode;
 
+  // Whether secure DNS should be disabled for the request.
+  bool disable_secure_dns;
+
   // Tag applied to all sockets used to service request.
   SocketTag socket_tag;
 
diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc
index b09da25e..a5acdda8 100644
--- a/net/http/http_stream_factory_job.cc
+++ b/net/http/http_stream_factory_job.cc
@@ -164,7 +164,8 @@
                                           origin_url_,
                                           request_info_.privacy_mode,
                                           request_info_.socket_tag,
-                                          request_info_.network_isolation_key)),
+                                          request_info_.network_isolation_key,
+                                          request_info_.disable_secure_dns)),
       stream_type_(HttpStreamRequest::BIDIRECTIONAL_STREAM),
       init_connection_already_resumed_(false) {
   // QUIC can only be spoken to servers, never to proxies.
@@ -373,18 +374,19 @@
     const GURL& origin_url,
     PrivacyMode privacy_mode,
     const SocketTag& socket_tag,
-    const NetworkIsolationKey& network_isolation_key) {
+    const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns) {
   // In the case that we're using an HTTPS proxy for an HTTP url, look for a
   // HTTP/2 proxy session *to* the proxy, instead of to the  origin server.
   if (!spdy_session_direct) {
     return SpdySessionKey(proxy_server.host_port_pair(), ProxyServer::Direct(),
                           PRIVACY_MODE_DISABLED,
                           SpdySessionKey::IsProxySession::kTrue, socket_tag,
-                          network_isolation_key);
+                          network_isolation_key, disable_secure_dns);
   }
   return SpdySessionKey(HostPortPair::FromURL(origin_url), proxy_server,
                         privacy_mode, SpdySessionKey::IsProxySession::kFalse,
-                        socket_tag, network_isolation_key);
+                        socket_tag, network_isolation_key, disable_secure_dns);
 }
 
 bool HttpStreamFactory::Job::CanUseExistingSpdySession() const {
@@ -756,7 +758,8 @@
     int rv = quic_request_.Request(
         destination, quic_version_, request_info_.privacy_mode, priority_,
         request_info_.socket_tag, request_info_.network_isolation_key,
-        ssl_config->GetCertVerifyFlags(), url, net_log_, &net_error_details_,
+        request_info_.disable_secure_dns, ssl_config->GetCertVerifyFlags(), url,
+        net_log_, &net_error_details_,
         base::BindOnce(&Job::OnFailedOnDefaultNetwork,
                        ptr_factory_.GetWeakPtr()),
         io_callback_);
@@ -862,7 +865,7 @@
         GetSocketGroup(), destination_, request_info_.load_flags, priority_,
         session_, proxy_info_, server_ssl_config_, proxy_ssl_config_,
         request_info_.privacy_mode, request_info_.network_isolation_key,
-        net_log_, num_streams_);
+        request_info_.disable_secure_dns, net_log_, num_streams_);
   }
 
   ClientSocketPool::ProxyAuthCallback proxy_auth_callback =
@@ -870,6 +873,7 @@
                           base::Unretained(this));
   if (is_websocket_) {
     DCHECK(request_info_.socket_tag == SocketTag());
+    DCHECK(!request_info_.disable_secure_dns);
     SSLConfig websocket_server_ssl_config = server_ssl_config_;
     websocket_server_ssl_config.alpn_protos.clear();
     return InitSocketHandleForWebSocketRequest(
@@ -883,8 +887,8 @@
       GetSocketGroup(), destination_, request_info_.load_flags, priority_,
       session_, proxy_info_, server_ssl_config_, proxy_ssl_config_,
       request_info_.privacy_mode, request_info_.network_isolation_key,
-      request_info_.socket_tag, net_log_, connection_.get(), io_callback_,
-      proxy_auth_callback);
+      request_info_.disable_secure_dns, request_info_.socket_tag, net_log_,
+      connection_.get(), io_callback_, proxy_auth_callback);
 }
 
 void HttpStreamFactory::Job::OnQuicHostResolution(int result) {
diff --git a/net/http/http_stream_factory_job.h b/net/http/http_stream_factory_job.h
index c7753aee..04a0b7a 100644
--- a/net/http/http_stream_factory_job.h
+++ b/net/http/http_stream_factory_job.h
@@ -336,7 +336,8 @@
       const GURL& origin_url,
       PrivacyMode privacy_mode,
       const SocketTag& socket_tag,
-      const NetworkIsolationKey& network_isolation_key);
+      const NetworkIsolationKey& network_isolation_key,
+      bool disable_secure_dns);
 
   // Returns true if the current request can use an existing spdy session.
   bool CanUseExistingSpdySession() const;
diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stream_factory_job_controller.cc
index bd12958..f5aef34 100644
--- a/net/http/http_stream_factory_job_controller.cc
+++ b/net/http/http_stream_factory_job_controller.cc
@@ -1060,9 +1060,9 @@
     // Check whether there is an existing QUIC session to use for this origin.
     HostPortPair mapped_origin(origin.host(), origin.port());
     ignore_result(ApplyHostMappingRules(original_url, &mapped_origin));
-    QuicSessionKey session_key(mapped_origin, request_info.privacy_mode,
-                               request_info.socket_tag,
-                               request_info.network_isolation_key);
+    QuicSessionKey session_key(
+        mapped_origin, request_info.privacy_mode, request_info.socket_tag,
+        request_info.network_isolation_key, request_info.disable_secure_dns);
 
     HostPortPair destination(alternative_service_info.host_port_pair());
     if (session_key.host() != destination.host() &&
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc
index 3f51e47b..6c4c8d0 100644
--- a/net/http/http_stream_factory_unittest.cc
+++ b/net/http/http_stream_factory_unittest.cc
@@ -363,6 +363,7 @@
 void PreconnectHelperForURL(int num_streams,
                             const GURL& url,
                             NetworkIsolationKey network_isolation_key,
+                            bool disable_secure_dns,
                             HttpNetworkSession* session) {
   HttpNetworkSessionPeer peer(session);
   MockHttpStreamFactoryForPreconnect* mock_factory =
@@ -374,6 +375,7 @@
   request.url = url;
   request.load_flags = 0;
   request.network_isolation_key = network_isolation_key;
+  request.disable_secure_dns = disable_secure_dns;
   request.traffic_annotation =
       MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
 
@@ -384,7 +386,8 @@
 void PreconnectHelper(const TestCase& test, HttpNetworkSession* session) {
   GURL url =
       test.ssl ? GURL("https://www.google.com") : GURL("http://www.google.com");
-  PreconnectHelperForURL(test.num_streams, url, NetworkIsolationKey(), session);
+  PreconnectHelperForURL(test.num_streams, url, NetworkIsolationKey(),
+                         false /* disable_secure_dns */, session);
 }
 
 ClientSocketPool::GroupId GetGroupId(const TestCase& test) {
@@ -616,7 +619,8 @@
   peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
 
   PreconnectHelperForURL(1, GURL("http://www.google.com:7"),
-                         NetworkIsolationKey(), session.get());
+                         NetworkIsolationKey(), false /* disable_secure_dns */,
+                         session.get());
   EXPECT_EQ(-1, transport_conn_pool->last_num_streams());
 }
 
@@ -648,17 +652,52 @@
   const auto kOriginBar = url::Origin::Create(GURL("http://bar.test"));
   const NetworkIsolationKey kKey1(kOriginFoo, kOriginFoo);
   const NetworkIsolationKey kKey2(kOriginBar, kOriginBar);
-  PreconnectHelperForURL(1, kURL, kKey1, session.get());
+  PreconnectHelperForURL(1, kURL, kKey1, false /* disable_secure_dns */,
+                         session.get());
   EXPECT_EQ(1, transport_conn_pool->last_num_streams());
   EXPECT_EQ(kKey1,
             transport_conn_pool->last_group_id().network_isolation_key());
 
-  PreconnectHelperForURL(2, kURL, kKey2, session.get());
+  PreconnectHelperForURL(2, kURL, kKey2, false /* disable_secure_dns */,
+                         session.get());
   EXPECT_EQ(2, transport_conn_pool->last_num_streams());
   EXPECT_EQ(kKey2,
             transport_conn_pool->last_group_id().network_isolation_key());
 }
 
+// Verify that preconnects use the specified disable_secure_dns field.
+TEST_F(HttpStreamFactoryTest, PreconnectDisableSecureDns) {
+  SpdySessionDependencies session_deps(ProxyResolutionService::CreateDirect());
+  std::unique_ptr<HttpNetworkSession> session(
+      SpdySessionDependencies::SpdyCreateSession(&session_deps));
+  HttpNetworkSessionPeer peer(session.get());
+  CommonConnectJobParams common_connect_job_params =
+      session->CreateCommonConnectJobParams();
+  std::unique_ptr<CapturePreconnectsTransportSocketPool>
+      owned_transport_conn_pool =
+          std::make_unique<CapturePreconnectsTransportSocketPool>(
+              &common_connect_job_params);
+  CapturePreconnectsTransportSocketPool* transport_conn_pool =
+      owned_transport_conn_pool.get();
+  auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>();
+  mock_pool_manager->SetSocketPool(ProxyServer::Direct(),
+                                   std::move(owned_transport_conn_pool));
+  peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
+
+  const GURL kURL("http://foo.test/");
+  const auto kOriginFoo = url::Origin::Create(GURL("http://foo.test"));
+  const auto kOriginBar = url::Origin::Create(GURL("http://bar.test"));
+  PreconnectHelperForURL(1, kURL, NetworkIsolationKey(),
+                         false /* disable_secure_dns */, session.get());
+  EXPECT_EQ(1, transport_conn_pool->last_num_streams());
+  EXPECT_FALSE(transport_conn_pool->last_group_id().disable_secure_dns());
+
+  PreconnectHelperForURL(2, kURL, NetworkIsolationKey(),
+                         true /* disable_secure_dns */, session.get());
+  EXPECT_EQ(2, transport_conn_pool->last_num_streams());
+  EXPECT_TRUE(transport_conn_pool->last_group_id().disable_secure_dns());
+}
+
 TEST_F(HttpStreamFactoryTest, JobNotifiesProxy) {
   const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT";
   SpdySessionDependencies session_deps(
@@ -1211,7 +1250,7 @@
                                      base::WrapUnique(http_proxy_pool));
     peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
     PreconnectHelperForURL(num_streams, url, NetworkIsolationKey(),
-                           session.get());
+                           false /* disable_secure_dns */, session.get());
     EXPECT_EQ(num_streams, http_proxy_pool->last_num_streams());
   }
 }
@@ -1326,6 +1365,81 @@
   EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2);
 }
 
+TEST_F(HttpStreamFactoryTest, DisableSecureDnsUsesDifferentSocketPoolGroup) {
+  SpdySessionDependencies session_deps(ProxyResolutionService::CreateDirect());
+
+  StaticSocketDataProvider socket_data_1;
+  socket_data_1.set_connect_data(MockConnect(ASYNC, OK));
+  session_deps.socket_factory->AddSocketDataProvider(&socket_data_1);
+  StaticSocketDataProvider socket_data_2;
+  socket_data_2.set_connect_data(MockConnect(ASYNC, OK));
+  session_deps.socket_factory->AddSocketDataProvider(&socket_data_2);
+  StaticSocketDataProvider socket_data_3;
+  socket_data_3.set_connect_data(MockConnect(ASYNC, OK));
+  session_deps.socket_factory->AddSocketDataProvider(&socket_data_3);
+
+  SSLSocketDataProvider ssl_1(ASYNC, OK);
+  session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_1);
+  SSLSocketDataProvider ssl_2(ASYNC, OK);
+  session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_2);
+  SSLSocketDataProvider ssl_3(ASYNC, OK);
+  session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_3);
+
+  std::unique_ptr<HttpNetworkSession> session(
+      SpdySessionDependencies::SpdyCreateSession(&session_deps));
+  ClientSocketPool* ssl_pool = session->GetSocketPool(
+      HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct());
+
+  EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0);
+
+  HttpRequestInfo request_info;
+  request_info.method = "GET";
+  request_info.url = GURL("https://www.google.com");
+  request_info.load_flags = 0;
+  request_info.privacy_mode = PRIVACY_MODE_DISABLED;
+  request_info.traffic_annotation =
+      MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+  request_info.disable_secure_dns = false;
+
+  SSLConfig ssl_config;
+  StreamRequestWaiter waiter;
+
+  std::unique_ptr<HttpStreamRequest> request1(
+      session->http_stream_factory()->RequestStream(
+          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
+  waiter.WaitForStream();
+
+  EXPECT_FALSE(
+      session_deps.host_resolver->last_secure_dns_mode_override().has_value());
+  EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1);
+
+  std::unique_ptr<HttpStreamRequest> request2(
+      session->http_stream_factory()->RequestStream(
+          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
+  waiter.WaitForStream();
+
+  EXPECT_FALSE(
+      session_deps.host_resolver->last_secure_dns_mode_override().has_value());
+  EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1);
+
+  request_info.disable_secure_dns = true;
+  std::unique_ptr<HttpStreamRequest> request3(
+      session->http_stream_factory()->RequestStream(
+          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
+  waiter.WaitForStream();
+
+  EXPECT_EQ(
+      net::DnsConfig::SecureDnsMode::OFF,
+      session_deps.host_resolver->last_secure_dns_mode_override().value());
+  EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2);
+}
+
 TEST_F(HttpStreamFactoryTest, GetLoadState) {
   SpdySessionDependencies session_deps(ProxyResolutionService::CreateDirect());
 
diff --git a/net/log/net_log_event_type_list.h b/net/log/net_log_event_type_list.h
index 5a2a8b9..f98139e 100644
--- a/net/log/net_log_event_type_list.h
+++ b/net/log/net_log_event_type_list.h
@@ -2007,6 +2007,30 @@
 //  }
 EVENT_TYPE(QUIC_SESSION_CONNECTIVITY_PROBING_FINISHED)
 
+// Session sent a PATH_CHALLENGE frame.
+//  {
+//    "data": <The challenge data in base64 string>
+//  }
+EVENT_TYPE(QUIC_SESSION_PATH_CHALLENGE_FRAME_SENT)
+
+// Session received a PATH_CHALLENGE frame.
+//  {
+//    "data": <The challenge data in base64 string>
+//  }
+EVENT_TYPE(QUIC_SESSION_PATH_CHALLENGE_FRAME_RECEIVED)
+
+// Session sent a PATH_RESPONSE frame.
+//  {
+//    "data": <The response data in base64 string>
+//  }
+EVENT_TYPE(QUIC_SESSION_PATH_RESPONSE_FRAME_SENT)
+
+// Session received a PATH_RESPONSE frame.
+//  {
+//    "data": <The response data in base64 string>
+//  }
+EVENT_TYPE(QUIC_SESSION_PATH_RESPONSE_FRAME_RECEIVED)
+
 // Session sent a CRYPTO frame.
 //  {
 //    "encryption_level": <The quic::EncryptionLevel of the frame>,
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index 4a8dec6..4b1f8fa 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -1304,13 +1304,15 @@
     const std::string& hostname,
     PrivacyMode privacy_mode,
     const SocketTag& socket_tag,
-    const NetworkIsolationKey& network_isolation_key) const {
+    const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns) const {
   DCHECK(connection()->connected());
   if (privacy_mode != session_key_.privacy_mode() ||
       socket_tag != session_key_.socket_tag() ||
       (network_isolation_key != session_key_.network_isolation_key() &&
        base::FeatureList::IsEnabled(
-           features::kPartitionConnectionsByNetworkIsolationKey))) {
+           features::kPartitionConnectionsByNetworkIsolationKey)) ||
+      disable_secure_dns != session_key_.disable_secure_dns()) {
     // Privacy mode and socket tag must always match.
     return false;
   }
@@ -3085,9 +3087,9 @@
 }
 
 bool QuicChromiumClientSession::IsAuthorized(const std::string& hostname) {
-  bool result =
-      CanPool(hostname, session_key_.privacy_mode(), session_key_.socket_tag(),
-              session_key_.network_isolation_key());
+  bool result = CanPool(
+      hostname, session_key_.privacy_mode(), session_key_.socket_tag(),
+      session_key_.network_isolation_key(), session_key_.disable_secure_dns());
   if (result)
     streams_pushed_count_++;
   return result;
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h
index 973f811..b25c8cf 100644
--- a/net/quic/quic_chromium_client_session.h
+++ b/net/quic/quic_chromium_client_session.h
@@ -572,7 +572,8 @@
   bool CanPool(const std::string& hostname,
                PrivacyMode privacy_mode,
                const SocketTag& socket_tag,
-               const NetworkIsolationKey& network_isolation_key) const;
+               const NetworkIsolationKey& network_isolation_key,
+               bool disable_secure_dns) const;
 
   const quic::QuicServerId& server_id() const {
     return session_key_.server_id();
diff --git a/net/quic/quic_chromium_client_session_peer.cc b/net/quic/quic_chromium_client_session_peer.cc
index 9ba6a39..dd16938 100644
--- a/net/quic/quic_chromium_client_session_peer.cc
+++ b/net/quic/quic_chromium_client_session_peer.cc
@@ -16,7 +16,9 @@
   quic::QuicServerId server_id(hostname,
                                session->session_key_.server_id().port(),
                                session->session_key_.privacy_mode());
-  session->session_key_ = QuicSessionKey(server_id, SocketTag());
+  session->session_key_ =
+      QuicSessionKey(server_id, SocketTag(), NetworkIsolationKey(),
+                     false /* disable_secure_dns */);
 }
 
 // static
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc
index 3a576e4..a30491b 100644
--- a/net/quic/quic_chromium_client_session_test.cc
+++ b/net/quic/quic_chromium_client_session_test.cc
@@ -1396,23 +1396,33 @@
   session_->OnProofVerifyDetailsAvailable(details);
 
   EXPECT_TRUE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED,
-                                SocketTag(), NetworkIsolationKey()));
+                                SocketTag(), NetworkIsolationKey(),
+                                false /* disable_secure_dns */));
   EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_ENABLED,
-                                 SocketTag(), NetworkIsolationKey()));
+                                 SocketTag(), NetworkIsolationKey(),
+                                 false /* disable_secure_dns */));
+  EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED,
+                                 SocketTag(), NetworkIsolationKey(),
+                                 true /* disable_secure_dns */));
 #if defined(OS_ANDROID)
   SocketTag tag1(SocketTag::UNSET_UID, 0x12345678);
   SocketTag tag2(getuid(), 0x87654321);
   EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag1,
-                                 NetworkIsolationKey()));
+                                 NetworkIsolationKey(),
+                                 false /* disable_secure_dns */));
   EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag2,
-                                 NetworkIsolationKey()));
+                                 NetworkIsolationKey(),
+                                 false /* disable_secure_dns */));
 #endif
   EXPECT_TRUE(session_->CanPool("mail.example.org", PRIVACY_MODE_DISABLED,
-                                SocketTag(), NetworkIsolationKey()));
+                                SocketTag(), NetworkIsolationKey(),
+                                false /* disable_secure_dns */));
   EXPECT_TRUE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED,
-                                SocketTag(), NetworkIsolationKey()));
+                                SocketTag(), NetworkIsolationKey(),
+                                false /* disable_secure_dns */));
   EXPECT_FALSE(session_->CanPool("mail.google.com", PRIVACY_MODE_DISABLED,
-                                 SocketTag(), NetworkIsolationKey()));
+                                 SocketTag(), NetworkIsolationKey(),
+                                 false /* disable_secure_dns */));
 
   const auto kOriginFoo = url::Origin::Create(GURL("http://foo.test/"));
 
@@ -1423,15 +1433,17 @@
         features::kPartitionConnectionsByNetworkIsolationKey);
     EXPECT_TRUE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED,
                                   SocketTag(),
-                                  NetworkIsolationKey(kOriginFoo, kOriginFoo)));
+                                  NetworkIsolationKey(kOriginFoo, kOriginFoo),
+                                  false /* disable_secure_dns */));
   }
   {
     base::test::ScopedFeatureList feature_list;
     feature_list.InitAndEnableFeature(
         features::kPartitionConnectionsByNetworkIsolationKey);
-    EXPECT_FALSE(session_->CanPool(
-        "mail.example.com", PRIVACY_MODE_DISABLED, SocketTag(),
-        NetworkIsolationKey(kOriginFoo, kOriginFoo)));
+    EXPECT_FALSE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED,
+                                   SocketTag(),
+                                   NetworkIsolationKey(kOriginFoo, kOriginFoo),
+                                   false /* disable_secure_dns */));
   }
 }
 
@@ -1446,9 +1458,9 @@
   const NetworkIsolationKey kNetworkIsolationKey1(kOriginFoo, kOriginFoo);
   const NetworkIsolationKey kNetworkIsolationKey2(kOriginBar, kOriginBar);
 
-  session_key_ =
-      QuicSessionKey(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED,
-                     SocketTag(), kNetworkIsolationKey1);
+  session_key_ = QuicSessionKey(
+      kServerHostname, kServerPort, PRIVACY_MODE_DISABLED, SocketTag(),
+      kNetworkIsolationKey1, false /* disable_secure_dns */);
 
   MockQuicData quic_data(version_);
   if (VersionUsesHttp3(version_.transport_version))
@@ -1471,28 +1483,37 @@
   session_->OnProofVerifyDetailsAvailable(details);
 
   EXPECT_TRUE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED,
-                                SocketTag(), kNetworkIsolationKey1));
+                                SocketTag(), kNetworkIsolationKey1,
+                                false /* disable_secure_dns */));
   EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_ENABLED,
-                                 SocketTag(), kNetworkIsolationKey1));
+                                 SocketTag(), kNetworkIsolationKey1,
+                                 false /* disable_secure_dns */));
 #if defined(OS_ANDROID)
   SocketTag tag1(SocketTag::UNSET_UID, 0x12345678);
   SocketTag tag2(getuid(), 0x87654321);
   EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag1,
-                                 kNetworkIsolationKey1));
+                                 kNetworkIsolationKey1,
+                                 false /* disable_secure_dns */));
   EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag2,
-                                 kNetworkIsolationKey1));
+                                 kNetworkIsolationKey1,
+                                 false /* disable_secure_dns */));
 #endif
   EXPECT_TRUE(session_->CanPool("mail.example.org", PRIVACY_MODE_DISABLED,
-                                SocketTag(), kNetworkIsolationKey1));
+                                SocketTag(), kNetworkIsolationKey1,
+                                false /* disable_secure_dns */));
   EXPECT_TRUE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED,
-                                SocketTag(), kNetworkIsolationKey1));
+                                SocketTag(), kNetworkIsolationKey1,
+                                false /* disable_secure_dns */));
   EXPECT_FALSE(session_->CanPool("mail.google.com", PRIVACY_MODE_DISABLED,
-                                 SocketTag(), kNetworkIsolationKey1));
+                                 SocketTag(), kNetworkIsolationKey1,
+                                 false /* disable_secure_dns */));
 
   EXPECT_FALSE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED,
-                                 SocketTag(), kNetworkIsolationKey2));
+                                 SocketTag(), kNetworkIsolationKey2,
+                                 false /* disable_secure_dns */));
   EXPECT_FALSE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED,
-                                 SocketTag(), NetworkIsolationKey()));
+                                 SocketTag(), NetworkIsolationKey(),
+                                 false /* disable_secure_dns */));
 }
 
 TEST_P(QuicChromiumClientSessionTest, ConnectionNotPooledWithDifferentPin) {
@@ -1533,7 +1554,8 @@
   QuicChromiumClientSessionPeer::SetHostname(session_.get(), kNoPinsHost);
 
   EXPECT_FALSE(session_->CanPool(kPreloadedPKPHost, PRIVACY_MODE_DISABLED,
-                                 SocketTag(), NetworkIsolationKey()));
+                                 SocketTag(), NetworkIsolationKey(),
+                                 false /* disable_secure_dns */));
 }
 
 TEST_P(QuicChromiumClientSessionTest, ConnectionPooledWithMatchingPin) {
@@ -1565,7 +1587,8 @@
   QuicChromiumClientSessionPeer::SetHostname(session_.get(), "www.example.org");
 
   EXPECT_TRUE(session_->CanPool("mail.example.org", PRIVACY_MODE_DISABLED,
-                                SocketTag(), NetworkIsolationKey()));
+                                SocketTag(), NetworkIsolationKey(),
+                                false /* disable_secure_dns */));
 }
 
 TEST_P(QuicChromiumClientSessionTest, MigrateToSocket) {
diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc
index 6eb8e53..1614a5aa 100644
--- a/net/quic/quic_connection_logger.cc
+++ b/net/quic/quic_connection_logger.cc
@@ -213,6 +213,14 @@
   return dict;
 }
 
+base::Value NetLogQuicPathData(const quic::QuicPathFrameBuffer& buffer) {
+  base::Value dict(base::Value::Type::DICTIONARY);
+  dict.SetKey("data",
+              NetLogBinaryValue(reinterpret_cast<const char*>(buffer.data()),
+                                buffer.size()));
+  return dict;
+}
+
 base::Value NetLogQuicCryptoHandshakeMessageParams(
     const quic::CryptoHandshakeMessage* message) {
   base::Value dict(base::Value::Type::DICTIONARY);
@@ -508,8 +516,16 @@
           });
       break;
     case quic::PATH_RESPONSE_FRAME:
+      net_log_.AddEvent(
+          NetLogEventType::QUIC_SESSION_PATH_RESPONSE_FRAME_SENT, [&] {
+            return NetLogQuicPathData(frame.path_response_frame->data_buffer);
+          });
       break;
     case quic::PATH_CHALLENGE_FRAME:
+      net_log_.AddEvent(
+          NetLogEventType::QUIC_SESSION_PATH_CHALLENGE_FRAME_SENT, [&] {
+            return NetLogQuicPathData(frame.path_challenge_frame->data_buffer);
+          });
       break;
     case quic::STOP_SENDING_FRAME:
       net_log_.AddEvent(
@@ -684,6 +700,22 @@
                     [&] { return NetLogQuicStreamFrameParams(frame); });
 }
 
+void QuicConnectionLogger::OnPathChallengeFrame(
+    const quic::QuicPathChallengeFrame& frame) {
+  if (!net_log_.IsCapturing())
+    return;
+  net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PATH_CHALLENGE_FRAME_RECEIVED,
+                    [&] { return NetLogQuicPathData(frame.data_buffer); });
+}
+
+void QuicConnectionLogger::OnPathResponseFrame(
+    const quic::QuicPathResponseFrame& frame) {
+  if (!net_log_.IsCapturing())
+    return;
+  net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PATH_RESPONSE_FRAME_RECEIVED,
+                    [&] { return NetLogQuicPathData(frame.data_buffer); });
+}
+
 void QuicConnectionLogger::OnCryptoFrame(const quic::QuicCryptoFrame& frame) {
   if (!net_log_.IsCapturing())
     return;
diff --git a/net/quic/quic_connection_logger.h b/net/quic/quic_connection_logger.h
index 02b3378..550266a 100644
--- a/net/quic/quic_connection_logger.h
+++ b/net/quic/quic_connection_logger.h
@@ -69,6 +69,8 @@
   void OnDuplicatePacket(quic::QuicPacketNumber packet_number) override;
   void OnProtocolVersionMismatch(quic::ParsedQuicVersion version) override;
   void OnPacketHeader(const quic::QuicPacketHeader& header) override;
+  void OnPathChallengeFrame(const quic::QuicPathChallengeFrame& frame) override;
+  void OnPathResponseFrame(const quic::QuicPathResponseFrame& frame) override;
   void OnCryptoFrame(const quic::QuicCryptoFrame& frame) override;
   void OnStopSendingFrame(const quic::QuicStopSendingFrame& frame) override;
   void OnStreamsBlockedFrame(
diff --git a/net/quic/quic_session_key.cc b/net/quic/quic_session_key.cc
index d7907d6b..b2393c5 100644
--- a/net/quic/quic_session_key.cc
+++ b/net/quic/quic_session_key.cc
@@ -9,45 +9,57 @@
 
 namespace net {
 
+QuicSessionKey::QuicSessionKey() = default;
+
 QuicSessionKey::QuicSessionKey(const HostPortPair& host_port_pair,
                                PrivacyMode privacy_mode,
                                const SocketTag& socket_tag,
-                               const NetworkIsolationKey& network_isolation_key)
+                               const NetworkIsolationKey& network_isolation_key,
+                               bool disable_secure_dns)
     : QuicSessionKey(host_port_pair.host(),
                      host_port_pair.port(),
                      privacy_mode,
                      socket_tag,
-                     network_isolation_key) {}
+                     network_isolation_key,
+                     disable_secure_dns) {}
 
 QuicSessionKey::QuicSessionKey(const std::string& host,
                                uint16_t port,
                                PrivacyMode privacy_mode,
                                const SocketTag& socket_tag,
-                               const NetworkIsolationKey& network_isolation_key)
+                               const NetworkIsolationKey& network_isolation_key,
+                               bool disable_secure_dns)
     : QuicSessionKey(
           quic::QuicServerId(host, port, privacy_mode == PRIVACY_MODE_ENABLED),
           socket_tag,
-          network_isolation_key) {}
+          network_isolation_key,
+          disable_secure_dns) {}
 
 QuicSessionKey::QuicSessionKey(const quic::QuicServerId& server_id,
                                const SocketTag& socket_tag,
-                               const NetworkIsolationKey& network_isolation_key)
+                               const NetworkIsolationKey& network_isolation_key,
+                               bool disable_secure_dns)
     : server_id_(server_id),
       socket_tag_(socket_tag),
       network_isolation_key_(
           base::FeatureList::IsEnabled(
               features::kPartitionConnectionsByNetworkIsolationKey)
               ? network_isolation_key
-              : NetworkIsolationKey()) {}
+              : NetworkIsolationKey()),
+      disable_secure_dns_(disable_secure_dns) {}
+
+QuicSessionKey::QuicSessionKey(const QuicSessionKey& other) = default;
 
 bool QuicSessionKey::operator<(const QuicSessionKey& other) const {
-  return std::tie(server_id_, socket_tag_, network_isolation_key_) <
+  return std::tie(server_id_, socket_tag_, network_isolation_key_,
+                  disable_secure_dns_) <
          std::tie(other.server_id_, other.socket_tag_,
-                  other.network_isolation_key_);
+                  other.network_isolation_key_, other.disable_secure_dns_);
 }
 bool QuicSessionKey::operator==(const QuicSessionKey& other) const {
   return server_id_ == other.server_id_ && socket_tag_ == other.socket_tag_ &&
-         network_isolation_key_ == other.network_isolation_key_;
+         network_isolation_key_ == other.network_isolation_key_ &&
+         disable_secure_dns_ == other.disable_secure_dns_;
 }
 
 size_t QuicSessionKey::EstimateMemoryUsage() const {
diff --git a/net/quic/quic_session_key.h b/net/quic/quic_session_key.h
index 5065564..a8987ec 100644
--- a/net/quic/quic_session_key.h
+++ b/net/quic/quic_session_key.h
@@ -19,22 +19,26 @@
  public:
   // TODO(mmenke): Remove default NetworkIsolationKey() values, which are only
   // used in tests.
-  QuicSessionKey() = default;
+  QuicSessionKey();
   QuicSessionKey(
       const HostPortPair& host_port_pair,
       PrivacyMode privacy_mode,
       const SocketTag& socket_tag,
-      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey());
+      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(),
+      bool disable_secure_dns = false);
   QuicSessionKey(
       const std::string& host,
       uint16_t port,
       PrivacyMode privacy_mode,
       const SocketTag& socket_tag,
-      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey());
+      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(),
+      bool disable_secure_dns = false);
   QuicSessionKey(
       const quic::QuicServerId& server_id,
       const SocketTag& socket_tag,
-      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey());
+      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(),
+      bool disable_secure_dns = false);
+  QuicSessionKey(const QuicSessionKey& other);
   ~QuicSessionKey() = default;
 
   // Needed to be an element of std::set.
@@ -56,6 +60,8 @@
     return network_isolation_key_;
   }
 
+  bool disable_secure_dns() const { return disable_secure_dns_; }
+
   size_t EstimateMemoryUsage() const;
 
  private:
@@ -63,6 +69,7 @@
   SocketTag socket_tag_;
   // Used to separate requests made in different contexts.
   NetworkIsolationKey network_isolation_key_;
+  bool disable_secure_dns_;
 };
 
 }  // namespace net
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 230e153..db6fe07 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -808,6 +808,8 @@
     parameters.cache_usage =
         HostResolver::ResolveHostParameters::CacheUsage::STALE_ALLOWED;
   }
+  if (key_.session_key().disable_secure_dns())
+    parameters.secure_dns_mode_override = DnsConfig::SecureDnsMode::OFF;
   resolve_host_request_ =
       host_resolver_->CreateRequest(key_.destination(), net_log_, parameters);
   // Unretained is safe because |this| owns the request, ensuring cancellation
@@ -1065,6 +1067,7 @@
     RequestPriority priority,
     const SocketTag& socket_tag,
     const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns,
     int cert_verify_flags,
     const GURL& url,
     const NetLogWithSource& net_log,
@@ -1080,8 +1083,9 @@
   net_error_details_ = net_error_details;
   failed_on_default_network_callback_ =
       std::move(failed_on_default_network_callback);
-  session_key_ = QuicSessionKey(HostPortPair::FromURL(url), privacy_mode,
-                                socket_tag, network_isolation_key);
+  session_key_ =
+      QuicSessionKey(HostPortPair::FromURL(url), privacy_mode, socket_tag,
+                     network_isolation_key, disable_secure_dns);
 
   int rv = factory_->Create(session_key_, destination, quic_version, priority,
                             cert_verify_flags, url, net_log, this);
@@ -1275,7 +1279,8 @@
     if (destination.Equals(all_sessions_[session].destination()) &&
         session->CanPool(session_key.host(), session_key.privacy_mode(),
                          session_key.socket_tag(),
-                         session_key.network_isolation_key())) {
+                         session_key.network_isolation_key(),
+                         session_key.disable_secure_dns())) {
       return true;
     }
   }
@@ -1352,7 +1357,8 @@
                                ? PRIVACY_MODE_ENABLED
                                : PRIVACY_MODE_DISABLED,
                            session_key.socket_tag(),
-                           session_key.network_isolation_key())) {
+                           session_key.network_isolation_key(),
+                           session_key.disable_secure_dns())) {
         request->SetSession(session->CreateHandle(destination));
         return OK;
       }
@@ -1787,7 +1793,8 @@
     for (QuicChromiumClientSession* session : sessions) {
       if (!session->CanPool(server_id.host(), key.session_key().privacy_mode(),
                             key.session_key().socket_tag(),
-                            key.session_key().network_isolation_key())) {
+                            key.session_key().network_isolation_key(),
+                            key.session_key().disable_secure_dns())) {
         continue;
       }
       active_sessions_[key.session_key()] = session;
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index 8491de9..52443db 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -255,6 +255,7 @@
               RequestPriority priority,
               const SocketTag& socket_tag,
               const NetworkIsolationKey& network_isolation_key,
+              bool disable_secure_dns,
               int cert_verify_flags,
               const GURL& url,
               const NetLogWithSource& net_log,
diff --git a/net/quic/quic_stream_factory_fuzzer.cc b/net/quic/quic_stream_factory_fuzzer.cc
index 157059f..36829e9 100644
--- a/net/quic/quic_stream_factory_fuzzer.cc
+++ b/net/quic/quic_stream_factory_fuzzer.cc
@@ -152,8 +152,8 @@
           0, versions.size() - 1)];
   request.Request(
       env->host_port_pair, version, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY,
-      SocketTag(), NetworkIsolationKey(), kCertVerifyFlags, GURL(kUrl),
-      env->net_log, &net_error_details,
+      SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+      kCertVerifyFlags, GURL(kUrl), env->net_log, &net_error_details,
       /*failed_on_default_network_callback=*/CompletionOnceCallback(),
       callback.callback());
 
diff --git a/net/quic/quic_stream_factory_peer.cc b/net/quic/quic_stream_factory_peer.cc
index 0d0eb90..fc68a87 100644
--- a/net/quic/quic_stream_factory_peer.cc
+++ b/net/quic/quic_stream_factory_peer.cc
@@ -39,12 +39,15 @@
     const quic::QuicServerId& server_id,
     const NetworkIsolationKey& network_isolation_key) {
   return factory->HasActiveSession(
-      QuicSessionKey(server_id, SocketTag(), network_isolation_key));
+      QuicSessionKey(server_id, SocketTag(), network_isolation_key,
+                     false /* disable_secure_dns */));
 }
 
 bool QuicStreamFactoryPeer::HasActiveJob(QuicStreamFactory* factory,
                                          const quic::QuicServerId& server_id) {
-  return factory->HasActiveJob(QuicSessionKey(server_id, SocketTag()));
+  return factory->HasActiveJob(QuicSessionKey(server_id, SocketTag(),
+                                              NetworkIsolationKey(),
+                                              false /* disable_secure_dns */));
 }
 
 bool QuicStreamFactoryPeer::HasActiveCertVerifierJob(
@@ -58,7 +61,8 @@
     QuicStreamFactory* factory,
     const quic::QuicServerId& server_id,
     const HostPortPair& destination) {
-  QuicSessionKey session_key(server_id, SocketTag());
+  QuicSessionKey session_key(server_id, SocketTag(), NetworkIsolationKey(),
+                             false /* disable_secure_dns */);
   QuicStreamFactory::QuicSessionAliasKey key(destination, session_key);
   DCHECK(factory->HasActiveJob(session_key));
   DCHECK_EQ(factory->all_sessions_.size(), 1u);
@@ -70,7 +74,8 @@
     QuicStreamFactory* factory,
     const quic::QuicServerId& server_id,
     const NetworkIsolationKey& network_isolation_key) {
-  QuicSessionKey session_key(server_id, SocketTag(), network_isolation_key);
+  QuicSessionKey session_key(server_id, SocketTag(), network_isolation_key,
+                             false /* disable_secure_dns */);
   DCHECK(factory->HasActiveSession(session_key));
   return factory->active_sessions_[session_key];
 }
@@ -79,7 +84,9 @@
     QuicStreamFactory* factory,
     const HostPortPair& destination,
     const quic::QuicServerId& server_id) {
-  QuicSessionKey session_key = QuicSessionKey(server_id, SocketTag());
+  QuicSessionKey session_key =
+      QuicSessionKey(server_id, SocketTag(), NetworkIsolationKey(),
+                     false /* disable_secure_dns */);
   QuicStreamFactory::QuicSessionAliasKey alias_key =
       QuicStreamFactory::QuicSessionAliasKey(destination, session_key);
   for (auto it = factory->all_sessions_.begin();
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 308a4a2..a07ac13 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -361,12 +361,13 @@
 
     QuicStreamRequest request(factory_.get());
     GURL url("https://" + destination.host() + "/");
-    EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(
-                  destination, version_, privacy_mode_, DEFAULT_PRIORITY,
-                  SocketTag(), NetworkIsolationKey(),
-                  /*cert_verify_flags=*/0, url, net_log_, &net_error_details_,
-                  failed_on_default_network_callback_, callback_.callback()));
+    EXPECT_EQ(
+        ERR_IO_PENDING,
+        request.Request(
+            destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+            NetworkIsolationKey(), false /* disable_secure_dns */,
+            /*cert_verify_flags=*/0, url, net_log_, &net_error_details_,
+            failed_on_default_network_callback_, callback_.callback()));
 
     EXPECT_THAT(callback_.WaitForResult(), IsOk());
     std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -514,12 +515,13 @@
 
     // Create request and QuicHttpStream.
     QuicStreamRequest request(factory_.get());
-    EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(
-                  host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                  SocketTag(), NetworkIsolationKey(),
-                  /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                  failed_on_default_network_callback_, callback_.callback()));
+    EXPECT_EQ(
+        ERR_IO_PENDING,
+        request.Request(
+            host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+            SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+            /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+            failed_on_default_network_callback_, callback_.callback()));
     EXPECT_EQ(OK, callback_.WaitForResult());
 
     // Run QuicChromiumClientSession::WriteToNewSocket()
@@ -732,7 +734,7 @@
               request.Request(
                   HostPortPair(quic_server_id1.host(), quic_server_id1.port()),
                   version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                  network_isolation_key1,
+                  network_isolation_key1, false /* disable_secure_dns */,
                   /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
                   failed_on_default_network_callback_, callback_.callback()));
     EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -774,7 +776,7 @@
         request2.Request(
             HostPortPair(quic_server_id2.host(), quic_server_id2.port()),
             version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-            network_isolation_key2,
+            network_isolation_key2, false /* disable_secure_dns */,
             /*cert_verify_flags=*/0,
             vary_network_isolation_key ? url_
                                        : GURL("https://mail.example.org/"),
@@ -937,12 +939,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -951,12 +954,13 @@
   EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->last_request_priority());
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   // Will reset stream 3.
   stream = CreateStream(&request2);
 
@@ -965,12 +969,13 @@
   // TODO(rtenneti): We should probably have a tests that HTTP and HTTPS result
   // in streams on different sessions.
   QuicStreamRequest request3(factory_.get());
-  EXPECT_EQ(OK,
-            request3.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request3.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   stream = CreateStream(&request3);  // Will reset stream 5.
   stream.reset();                    // Will reset stream 7.
 
@@ -998,12 +1003,13 @@
                                             "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -1023,12 +1029,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1052,12 +1059,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   auto request = std::make_unique<QuicStreamRequest>(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request->Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request->Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   request.reset();
   EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_));
   // Tearing down a QuicStreamFactory with a pending Job should not cause any
@@ -1084,12 +1092,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_FALSE(http_server_properties_->HasLastLocalAddressWhenQuicWorked());
 
@@ -1128,12 +1137,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_THAT(request.Request(
-                  host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                  SocketTag(), NetworkIsolationKey(),
-                  /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                  failed_on_default_network_callback_, callback_.callback()),
-              IsOk());
+  EXPECT_THAT(
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()),
+      IsOk());
 
   EXPECT_FALSE(http_server_properties_->HasLastLocalAddressWhenQuicWorked());
 
@@ -1167,12 +1177,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1233,12 +1244,13 @@
     socket_data.AddSocketDataToFactory(socket_factory_.get());
 
     QuicStreamRequest request(factory_.get());
-    EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(
-                  host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                  SocketTag(), network_isolation_key,
-                  /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                  failed_on_default_network_callback_, callback_.callback()));
+    EXPECT_EQ(
+        ERR_IO_PENDING,
+        request.Request(
+            host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+            SocketTag(), network_isolation_key, false /* disable_secure_dns */,
+            /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+            failed_on_default_network_callback_, callback_.callback()));
 
     EXPECT_THAT(callback_.WaitForResult(), IsOk());
     std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1275,12 +1287,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1309,12 +1322,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1338,12 +1352,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1371,12 +1386,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1453,6 +1469,7 @@
               request.Request(
                   host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
                   SocketTag(), kNetworkIsolationKeys[i],
+                  false /* disable_secure_dns */,
                   /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
                   failed_on_default_network_callback_, callback_.callback()));
 
@@ -1505,6 +1522,7 @@
               request.Request(
                   host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
                   SocketTag(), kNetworkIsolationKeys[i],
+                  false /* disable_secure_dns */,
                   /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
                   failed_on_default_network_callback_, callback_.callback()));
 
@@ -1544,12 +1562,13 @@
   host_resolver_->rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
 
@@ -1558,7 +1577,7 @@
   EXPECT_EQ(OK,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
@@ -1608,7 +1627,7 @@
   EXPECT_EQ(ERR_IO_PENDING,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback.callback()));
   EXPECT_EQ(OK, callback.WaitForResult());
@@ -1645,12 +1664,13 @@
   host_resolver_->rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
 
@@ -1659,7 +1679,7 @@
   EXPECT_EQ(OK,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
@@ -1674,7 +1694,7 @@
   EXPECT_EQ(OK,
             request3.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback3.callback()));
   std::unique_ptr<HttpStream> stream3 = CreateStream(&request3);
@@ -1711,7 +1731,7 @@
   EXPECT_EQ(OK,
             request.Request(
                 server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1722,7 +1742,7 @@
   EXPECT_EQ(OK,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
@@ -1762,7 +1782,7 @@
   EXPECT_EQ(OK,
             request.Request(
                 server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1773,7 +1793,7 @@
   EXPECT_EQ(OK,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
@@ -1826,7 +1846,7 @@
   EXPECT_EQ(OK,
             request.Request(
                 server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1837,7 +1857,7 @@
   EXPECT_EQ(OK,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
@@ -1870,12 +1890,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -1892,12 +1913,13 @@
   // Create a new request for the same destination and verify that a
   // new session is created.
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
@@ -1959,7 +1981,7 @@
     QuicStreamRequest request(factory_.get());
     int rv = request.Request(
         host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-        NetworkIsolationKey(),
+        NetworkIsolationKey(), false /* disable_secure_dns */,
         /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
         failed_on_default_network_callback_, callback_.callback());
     if (i == 0) {
@@ -1977,12 +1999,13 @@
   }
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, CompletionOnceCallback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, CompletionOnceCallback()));
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream);
   EXPECT_EQ(ERR_IO_PENDING,
@@ -2016,12 +2039,13 @@
   host_resolver_->rules()->AddSimulatedFailure(kDefaultServerHostName);
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_NAME_NOT_RESOLVED));
 
@@ -2037,12 +2061,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_ADDRESS_IN_USE));
 
@@ -2059,23 +2084,25 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
   {
     QuicStreamRequest request(factory_.get());
-    EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(
-                  host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                  SocketTag(), NetworkIsolationKey(),
-                  /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                  failed_on_default_network_callback_, callback_.callback()));
+    EXPECT_EQ(
+        ERR_IO_PENDING,
+        request.Request(
+            host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+            SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+            /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+            failed_on_default_network_callback_, callback_.callback()));
   }
 
   base::RunLoop().RunUntilIdle();
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream = CreateStream(&request2);
 
   EXPECT_TRUE(stream.get());
@@ -2115,12 +2142,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -2140,12 +2168,13 @@
   // a new session.
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   stream = CreateStream(&request2);
@@ -2176,12 +2205,13 @@
 
   // Create request, should fail after the write of the CHLO fails.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED, callback_.WaitForResult());
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
   EXPECT_FALSE(HasActiveJob(host_port_pair_, privacy_mode_));
@@ -2199,12 +2229,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
   EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_));
   // Run the message loop to complete host resolution.
@@ -2244,12 +2275,13 @@
 
   // Create request, should fail immediately.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_QUIC_HANDSHAKE_FAILED,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   // Check no active session, or active jobs left for this server.
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
   EXPECT_FALSE(HasActiveJob(host_port_pair_, privacy_mode_));
@@ -2267,12 +2299,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
   EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_));
 
@@ -2324,12 +2357,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -2358,12 +2392,13 @@
   // Now attempting to request a stream to the same origin should create
   // a new session.
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   stream = CreateStream(&request2);
@@ -2419,12 +2454,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -2465,12 +2501,13 @@
 
   // Second request should be sent on a new connection.
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
@@ -2509,12 +2546,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -2533,12 +2571,13 @@
 
   // Attempting a new request to the same origin uses the same connection.
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   stream = CreateStream(&request2);
 
   stream.reset();
@@ -2613,12 +2652,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -2796,12 +2836,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -2941,12 +2982,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3062,12 +3104,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3132,12 +3175,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3232,12 +3276,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3301,12 +3346,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3395,12 +3441,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3468,12 +3515,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3541,12 +3589,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3663,12 +3712,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -3829,12 +3879,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -4004,12 +4055,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -4210,12 +4262,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -4334,12 +4387,13 @@
 
   // Creat request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cerf_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cerf_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -4375,12 +4429,13 @@
 
   // Second request should be sent on a new connection.
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
@@ -4455,12 +4510,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -4593,12 +4649,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -4754,12 +4811,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -4901,7 +4959,7 @@
   EXPECT_EQ(OK,
             request1.Request(
                 server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
@@ -4912,7 +4970,7 @@
   EXPECT_EQ(OK,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
@@ -5027,12 +5085,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -5145,12 +5204,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -5216,12 +5276,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -5324,12 +5385,13 @@
 
   // Create request #1 and QuicHttpStream.
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -5346,12 +5408,13 @@
   // Request #2 returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
 
@@ -5464,12 +5527,13 @@
 
   // Create request QuicHttpStream.
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -5588,12 +5652,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   base::RunLoop().RunUntilIdle();
 
@@ -5649,12 +5714,13 @@
 
   // Create request.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   base::RunLoop().RunUntilIdle();
 
@@ -5774,12 +5840,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   base::RunLoop().RunUntilIdle();
 
@@ -5891,12 +5958,13 @@
 
   // Create request, should fail after the write of the CHLO fails.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED, callback_.WaitForResult());
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
   EXPECT_FALSE(HasActiveJob(host_port_pair_, privacy_mode_));
@@ -5914,12 +5982,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
   EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_));
   // Run the message loop to complete host resolution.
@@ -5990,12 +6059,13 @@
 
   // Create request, should fail after the write of the CHLO fails.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   // Ensure that the session is alive but not active.
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
   EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_));
@@ -6062,12 +6132,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -6162,12 +6233,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -6304,12 +6376,13 @@
 
   // Create request #1 and QuicHttpStream.
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -6326,12 +6399,13 @@
   // Second request returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
   HttpRequestInfo request_info2;
@@ -6441,12 +6515,13 @@
 
   // Create request #1 and QuicHttpStream.
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -6463,12 +6538,13 @@
   // Second request returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
 
@@ -6588,12 +6664,13 @@
 
   // Create request #1 and QuicHttpStream.
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -6610,12 +6687,13 @@
   // Second request returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
 
@@ -6726,12 +6804,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -6814,12 +6893,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -6944,12 +7024,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -7039,12 +7120,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   // Deliver the network notification, which should cause the connection to be
   // closed.
   scoped_mock_network_change_notifier_->mock_network_change_notifier()
@@ -7080,12 +7162,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -7218,12 +7301,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -7362,12 +7446,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -7501,12 +7586,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -7609,12 +7695,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -7728,12 +7815,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -7894,12 +7982,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8050,12 +8139,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8194,12 +8284,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8322,12 +8413,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8459,12 +8551,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8589,12 +8682,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8686,12 +8780,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8835,12 +8930,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -8933,12 +9029,13 @@
       ->NotifyNetworkMadeDefault(kNewNetworkForTests);
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
 
@@ -9026,12 +9123,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -9149,12 +9247,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -9230,12 +9329,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -9385,12 +9485,13 @@
 
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
@@ -9445,12 +9546,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -9468,12 +9570,13 @@
   // a new session.
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
@@ -9597,12 +9700,13 @@
                                             "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // If we are waiting for disk cache, we would have posted a task. Verify that
   // the CancelWaitForDataReady task hasn't been posted.
@@ -9651,12 +9755,13 @@
   EXPECT_EQ(quic::QuicTime::Delta::FromSeconds(quic::kPingTimeoutSecs),
             QuicStreamFactoryPeer::GetPingTimeout(factory_.get()));
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
   EXPECT_EQ(quic::QuicTime::Delta::FromSeconds(quic::kPingTimeoutSecs),
@@ -9692,7 +9797,7 @@
   EXPECT_EQ(OK,
             request2.Request(
                 server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
-                NetworkIsolationKey(),
+                NetworkIsolationKey(), false /* disable_secure_dns */,
                 /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
                 failed_on_default_network_callback_, callback2.callback()));
   QuicChromiumClientSession* session2 = GetActiveSession(server2);
@@ -10062,6 +10167,7 @@
     int rv = request.Request(
         HostPortPair(kDefaultServerHostName, kDefaultServerPort), version_,
         privacy_mode_, DEFAULT_PRIORITY, SocketTag(), network_isolation_keys[i],
+        false /* disable_secure_dns */,
         /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
         failed_on_default_network_callback_, callback_.callback());
     EXPECT_THAT(callback_.GetResult(rv), IsOk());
@@ -10138,12 +10244,13 @@
 
   // Start a QUIC request.
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_EQ(OK, callback_.WaitForResult());
 
@@ -10190,12 +10297,13 @@
                                        "StartReading");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Call run_loop so that QuicChromiumPacketReader::OnReadComplete() gets
   // called.
@@ -10242,12 +10350,13 @@
                                        "StartReading");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Call run_loop so that QuicChromiumPacketReader::OnReadComplete() gets
   // called.
@@ -10277,12 +10386,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -10300,12 +10410,13 @@
         ->promised_by_url())[kDefaultUrl] = &promised;
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_EQ(1, QuicStreamFactoryPeer::GetNumPushStreamsCreated(factory_.get()));
 }
@@ -10338,12 +10449,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -10366,12 +10478,13 @@
   // Doing the request should not use the push stream, but rather
   // cancel it because the privacy modes do not match.
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, PRIVACY_MODE_ENABLED,
-                DEFAULT_PRIORITY, SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, PRIVACY_MODE_ENABLED, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_EQ(0, QuicStreamFactoryPeer::GetNumPushStreamsCreated(factory_.get()));
   EXPECT_EQ(index->GetPromised(kDefaultUrl), nullptr);
@@ -10404,12 +10517,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                destination1, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          destination1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+          NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -10418,12 +10532,13 @@
   // Second request returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                destination2, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          destination2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+          NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
 
@@ -10526,12 +10641,13 @@
   AddHangingSocketData();
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                destination, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+          NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_QUIC_HANDSHAKE_FAILED));
 
@@ -10567,12 +10683,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                destination, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+          NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
 
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
@@ -10582,12 +10699,13 @@
   // Second request returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK,
-            request2.Request(
-                destination, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      OK,
+      request2.Request(
+          destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+          NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
 
@@ -10645,12 +10763,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -10658,12 +10777,13 @@
 
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                destination, version_, PRIVACY_MODE_ENABLED, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          destination, version_, PRIVACY_MODE_ENABLED, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   EXPECT_EQ(OK, callback2.WaitForResult());
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
@@ -10688,6 +10808,85 @@
   EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
 }
 
+// QuicStreamRequest is not pooled if the disable_secure_dns field differs.
+TEST_P(QuicStreamFactoryWithDestinationTest, DifferentDisableSecureDns) {
+  Initialize();
+
+  GURL url1("https://www.example.org/");
+  GURL url2("https://mail.example.org/");
+  origin1_ = HostPortPair::FromURL(url1);
+  origin2_ = HostPortPair::FromURL(url2);
+
+  HostPortPair destination = GetDestination();
+
+  scoped_refptr<X509Certificate> cert(
+      ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
+  ASSERT_TRUE(cert->VerifyNameMatch(origin1_.host()));
+  ASSERT_TRUE(cert->VerifyNameMatch(origin2_.host()));
+  ASSERT_FALSE(cert->VerifyNameMatch(kDifferentHostname));
+
+  ProofVerifyDetailsChromium verify_details1;
+  verify_details1.cert_verify_result.verified_cert = cert;
+  verify_details1.cert_verify_result.is_issued_by_known_root = true;
+  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details1);
+
+  ProofVerifyDetailsChromium verify_details2;
+  verify_details2.cert_verify_result.verified_cert = cert;
+  verify_details2.cert_verify_result.is_issued_by_known_root = true;
+  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2);
+
+  MockQuicData socket_data1(version_);
+  socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
+  if (VersionUsesHttp3(version_.transport_version))
+    socket_data1.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket());
+  socket_data1.AddSocketDataToFactory(socket_factory_.get());
+  client_maker_.Reset();
+  MockQuicData socket_data2(version_);
+  socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
+  if (VersionUsesHttp3(version_.transport_version))
+    socket_data2.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket());
+  socket_data2.AddSocketDataToFactory(socket_factory_.get());
+
+  QuicStreamRequest request1(factory_.get());
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(OK, callback_.WaitForResult());
+  std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
+  EXPECT_TRUE(stream1.get());
+  EXPECT_TRUE(HasActiveSession(origin1_));
+
+  TestCompletionCallback callback2;
+  QuicStreamRequest request2(factory_.get());
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), true /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(OK, callback2.WaitForResult());
+  std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
+  EXPECT_TRUE(stream2.get());
+
+  // |request2| does not pool to the first session, because |disable_secure_dns|
+  // does not match.
+  QuicChromiumClientSession::Handle* session1 =
+      QuicHttpStreamPeer::GetSessionHandle(stream1.get());
+  QuicChromiumClientSession::Handle* session2 =
+      QuicHttpStreamPeer::GetSessionHandle(stream2.get());
+  EXPECT_FALSE(session1->SharesSameSession(*session2));
+
+  EXPECT_TRUE(socket_data1.AllReadDataConsumed());
+  EXPECT_TRUE(socket_data1.AllWriteDataConsumed());
+  EXPECT_TRUE(socket_data2.AllReadDataConsumed());
+  EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
+}
+
 // QuicStreamRequest is not pooled if certificate does not match its origin.
 TEST_P(QuicStreamFactoryWithDestinationTest, DisjointCertificate) {
   Initialize();
@@ -10733,12 +10932,13 @@
   socket_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(
-                destination, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request1.Request(
+          destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+          NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream1 = CreateStream(&request1);
   EXPECT_TRUE(stream1.get());
@@ -10746,12 +10946,13 @@
 
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                destination, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback2.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(),
+          NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback2.callback()));
   EXPECT_THAT(callback2.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream2 = CreateStream(&request2);
   EXPECT_TRUE(stream2.get());
@@ -10866,12 +11067,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
@@ -10895,23 +11097,25 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   EXPECT_EQ(MAXIMUM_PRIORITY, host_resolver_->last_request_priority());
   EXPECT_EQ(MAXIMUM_PRIORITY, host_resolver_->request_priority(1));
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request2.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->last_request_priority());
   EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->request_priority(2));
 
@@ -10920,6 +11124,39 @@
   EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->request_priority(2));
 }
 
+// Verifies that the host resolver uses the disable secure DNS setting passed to
+// QuicStreamRequest::Request().
+TEST_P(QuicStreamFactoryTest, HostResolverUsesDisableSecureDns) {
+  Initialize();
+  ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
+  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
+
+  MockQuicData socket_data(version_);
+  socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
+  if (VersionUsesHttp3(version_.transport_version))
+    socket_data.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket());
+  socket_data.AddSocketDataToFactory(socket_factory_.get());
+
+  QuicStreamRequest request(factory_.get());
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), true /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
+
+  EXPECT_THAT(callback_.WaitForResult(), IsOk());
+  std::unique_ptr<HttpStream> stream = CreateStream(&request);
+  EXPECT_TRUE(stream.get());
+
+  EXPECT_EQ(net::DnsConfig::SecureDnsMode::OFF,
+            host_resolver_->last_secure_dns_mode_override().value());
+
+  EXPECT_TRUE(socket_data.AllReadDataConsumed());
+  EXPECT_TRUE(socket_data.AllWriteDataConsumed());
+}
+
 // Passes |quic_max_time_before_crypto_handshake| and
 // |quic_max_idle_time_before_crypto_handshake| to QuicStreamFactory,
 // checks that its internal quic::QuicConfig is correct.
@@ -10953,12 +11190,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   TestCompletionCallback host_resolution_callback;
   EXPECT_TRUE(
@@ -11007,12 +11245,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   TestCompletionCallback host_resolution_callback;
   EXPECT_TRUE(
@@ -11058,12 +11297,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_QUIC_PROTOCOL_ERROR,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // WaitForHostResolution() should return false since host
   // resolution has finished already.
@@ -11096,12 +11336,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // WaitForHostResolution() should return false since host
   // resolution has finished already.
@@ -11130,12 +11371,13 @@
   host_resolver_->set_synchronous_mode(true);
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_NAME_NOT_RESOLVED,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_NAME_NOT_RESOLVED,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // WaitForHostResolution() should return false since host
   // resolution has failed already.
@@ -11156,12 +11398,13 @@
   host_resolver_->rules()->AddSimulatedFailure(host_port_pair_.host());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   TestCompletionCallback host_resolution_callback;
   EXPECT_TRUE(
@@ -11211,12 +11454,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_THAT(request.Request(
-                  host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                  SocketTag(), NetworkIsolationKey(),
-                  /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                  failed_on_default_network_callback_, callback_.callback()),
-              IsOk());
+  EXPECT_THAT(
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()),
+      IsOk());
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
   QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
@@ -11247,12 +11491,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   TestCompletionCallback host_resolution_callback;
   EXPECT_TRUE(
       request.WaitForHostResolution(host_resolution_callback.callback()));
@@ -11306,12 +11551,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check that the racing job is running.
   EXPECT_TRUE(HasLiveSession(host_port_pair_));
@@ -11369,12 +11615,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Send Crypto handshake so connect will call back.
   crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
@@ -11438,12 +11685,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Finish dns async, check we still need to wait for stale connection async.
   host_resolver_->ResolveAllPending();
@@ -11515,12 +11763,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check the stale connection is running.
   EXPECT_TRUE(HasLiveSession(host_port_pair_));
@@ -11596,12 +11845,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Finish the stale connection.
   crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
@@ -11675,12 +11925,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   // Finish dns resolution, but need to wait for stale connection.
   host_resolver_->ResolveAllPending();
   base::RunLoop().RunUntilIdle();
@@ -11717,12 +11968,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
   QuicStreamRequest request(factory_.get());
 
-  EXPECT_EQ(ERR_NAME_NOT_RESOLVED,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_NAME_NOT_RESOLVED,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 }
 
 // With dns race experiment on, no cache available, dns resolve returns error
@@ -11742,12 +11994,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
   QuicStreamRequest request(factory_.get());
 
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Resolve and expect result that shows the resolution error.
   host_resolver_->ResolveAllPending();
@@ -11793,12 +12046,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check that the stale connection is running.
   EXPECT_TRUE(HasLiveSession(host_port_pair_));
@@ -11849,12 +12103,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   EXPECT_FALSE(HasLiveSession(host_port_pair_));
   EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_));
 
@@ -11900,12 +12155,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check that the stale connection fails.
   EXPECT_FALSE(HasLiveSession(host_port_pair_));
@@ -11963,12 +12219,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check the stale connection fails.
   EXPECT_FALSE(HasLiveSession(host_port_pair_));
@@ -12022,12 +12279,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // host resolution returned but stale connection hasn't finished yet.
   host_resolver_->ResolveAllPending();
@@ -12080,12 +12338,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Host Resolution returns failure but stale connection hasn't finished.
   host_resolver_->ResolveAllPending();
@@ -12116,12 +12375,13 @@
   quic_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check that expect_on_host_resolution_ is properlly set.
   TestCompletionCallback host_resolution_callback;
@@ -12183,12 +12443,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check that the racing job is running.
   EXPECT_TRUE(HasLiveSession(host_port_pair_));
@@ -12258,12 +12519,13 @@
   quic_data2.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
 
   // Check that the racing job is running.
   EXPECT_TRUE(HasLiveSession(host_port_pair_));
@@ -12323,12 +12585,13 @@
   socket_data.AddSocketDataToFactory(socket_factory_.get());
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(
-                host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-                SocketTag(), NetworkIsolationKey(),
-                /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
-                failed_on_default_network_callback_, callback_.callback()));
+  EXPECT_EQ(
+      ERR_IO_PENDING,
+      request.Request(
+          host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
+          SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */,
+          /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
+          failed_on_default_network_callback_, callback_.callback()));
   base::RunLoop().RunUntilIdle();
 
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
@@ -12394,7 +12657,7 @@
   QuicStreamRequest request1(factory_.get());
   int rv = request1.Request(
       host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, tag1,
-      NetworkIsolationKey(),
+      NetworkIsolationKey(), false /* disable_secure_dns */,
       /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
       failed_on_default_network_callback_, callback_.callback());
   EXPECT_THAT(callback_.GetResult(rv), IsOk());
@@ -12410,7 +12673,7 @@
   QuicStreamRequest request2(factory_.get());
   rv = request2.Request(
       host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, tag1,
-      NetworkIsolationKey(),
+      NetworkIsolationKey(), false /* disable_secure_dns */,
       /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
       failed_on_default_network_callback_, callback_.callback());
   EXPECT_THAT(callback_.GetResult(rv), IsOk());
@@ -12424,7 +12687,7 @@
   QuicStreamRequest request3(factory_.get());
   rv = request3.Request(
       host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, tag2,
-      NetworkIsolationKey(),
+      NetworkIsolationKey(), false /* disable_secure_dns */,
       /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
       failed_on_default_network_callback_, callback_.callback());
   EXPECT_THAT(callback_.GetResult(rv), IsOk());
diff --git a/net/socket/client_socket_pool.cc b/net/socket/client_socket_pool.cc
index b614c75..8e9f7e60 100644
--- a/net/socket/client_socket_pool.cc
+++ b/net/socket/client_socket_pool.cc
@@ -168,10 +168,10 @@
   if (using_ssl && proxy_server.is_direct()) {
     resolution_callback = base::BindRepeating(
         &OnHostResolution, common_connect_job_params->spdy_session_pool,
-        SpdySessionKey(group_id.destination(), proxy_server,
-                       group_id.privacy_mode(),
-                       SpdySessionKey::IsProxySession::kFalse, socket_tag,
-                       group_id.network_isolation_key()),
+        SpdySessionKey(
+            group_id.destination(), proxy_server, group_id.privacy_mode(),
+            SpdySessionKey::IsProxySession::kFalse, socket_tag,
+            group_id.network_isolation_key(), group_id.disable_secure_dns()),
         is_for_websockets);
   } else if (proxy_server.is_https()) {
     resolution_callback = base::BindRepeating(
@@ -179,7 +179,8 @@
         SpdySessionKey(proxy_server.host_port_pair(), ProxyServer::Direct(),
                        group_id.privacy_mode(),
                        SpdySessionKey::IsProxySession::kTrue, socket_tag,
-                       group_id.network_isolation_key()),
+                       group_id.network_isolation_key(),
+                       group_id.disable_secure_dns()),
         is_for_websockets);
   }
 
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc
index f8df5f5..84e6de66 100644
--- a/net/socket/client_socket_pool_manager.cc
+++ b/net/socket/client_socket_pool_manager.cc
@@ -112,6 +112,7 @@
     bool is_for_websockets,
     PrivacyMode privacy_mode,
     const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns,
     const SocketTag& socket_tag,
     const NetLogWithSource& net_log,
     int num_preconnect_streams,
@@ -130,7 +131,7 @@
 
   ClientSocketPool::GroupId connection_group =
       CreateGroupId(group_type, origin_host_port, proxy_info, privacy_mode,
-                    network_isolation_key, false /* disable_secure_dns */);
+                    network_isolation_key, disable_secure_dns);
   scoped_refptr<ClientSocketPool::SocketParams> socket_params =
       CreateSocketParams(connection_group, proxy_info.proxy_server(),
                          ssl_config_for_origin, ssl_config_for_proxy);
@@ -250,6 +251,7 @@
     const SSLConfig& ssl_config_for_proxy,
     PrivacyMode privacy_mode,
     const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns,
     const SocketTag& socket_tag,
     const NetLogWithSource& net_log,
     ClientSocketHandle* socket_handle,
@@ -260,7 +262,7 @@
       group_type, endpoint, request_load_flags, request_priority, session,
       proxy_info, ssl_config_for_origin, ssl_config_for_proxy,
       false /* is_for_websockets */, privacy_mode, network_isolation_key,
-      socket_tag, net_log, 0, socket_handle,
+      disable_secure_dns, socket_tag, net_log, 0, socket_handle,
       HttpNetworkSession::NORMAL_SOCKET_POOL, std::move(callback),
       proxy_auth_callback);
 }
@@ -289,7 +291,7 @@
       group_type, endpoint, request_load_flags, request_priority, session,
       proxy_info, ssl_config_for_origin, ssl_config_for_proxy,
       true /* is_for_websockets */, privacy_mode, network_isolation_key,
-      SocketTag(), net_log, 0, socket_handle,
+      false /*disable_secure_dns */, SocketTag(), net_log, 0, socket_handle,
       HttpNetworkSession::WEBSOCKET_SOCKET_POOL, std::move(callback),
       proxy_auth_callback);
 }
@@ -305,6 +307,7 @@
     const SSLConfig& ssl_config_for_proxy,
     PrivacyMode privacy_mode,
     const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns,
     const NetLogWithSource& net_log,
     int num_preconnect_streams) {
   // QUIC proxies are currently not supported through this method.
@@ -314,7 +317,7 @@
       group_type, endpoint, request_load_flags, request_priority, session,
       proxy_info, ssl_config_for_origin, ssl_config_for_proxy,
       false /* force_tunnel */, privacy_mode, network_isolation_key,
-      SocketTag(), net_log, num_preconnect_streams, nullptr,
+      disable_secure_dns, SocketTag(), net_log, num_preconnect_streams, nullptr,
       HttpNetworkSession::NORMAL_SOCKET_POOL, CompletionOnceCallback(),
       ClientSocketPool::ProxyAuthCallback());
 }
diff --git a/net/socket/client_socket_pool_manager.h b/net/socket/client_socket_pool_manager.h
index 3d92536..9a4ea9d 100644
--- a/net/socket/client_socket_pool_manager.h
+++ b/net/socket/client_socket_pool_manager.h
@@ -107,6 +107,7 @@
     const SSLConfig& ssl_config_for_proxy,
     PrivacyMode privacy_mode,
     const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns,
     const SocketTag& socket_tag,
     const NetLogWithSource& net_log,
     ClientSocketHandle* socket_handle,
@@ -151,6 +152,7 @@
     const SSLConfig& ssl_config_for_proxy,
     PrivacyMode privacy_mode,
     const NetworkIsolationKey& network_isolation_key,
+    bool disable_secure_dns,
     const NetLogWithSource& net_log,
     int num_preconnect_streams);
 
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index e10abf4..fc2cb7cd 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -1626,7 +1626,8 @@
   SpdySessionKey new_key(
       spdy_session_key_.host_port_pair(), spdy_session_key_.proxy_server(),
       spdy_session_key_.privacy_mode(), spdy_session_key_.is_proxy_session(),
-      new_tag, spdy_session_key_.network_isolation_key());
+      new_tag, spdy_session_key_.network_isolation_key(),
+      spdy_session_key_.disable_secure_dns());
   spdy_session_key_ = new_key;
 
   return true;
diff --git a/net/spdy/spdy_session_key.cc b/net/spdy/spdy_session_key.cc
index dd83efc..a7dd6908 100644
--- a/net/spdy/spdy_session_key.cc
+++ b/net/spdy/spdy_session_key.cc
@@ -21,7 +21,8 @@
                                PrivacyMode privacy_mode,
                                IsProxySession is_proxy_session,
                                const SocketTag& socket_tag,
-                               const NetworkIsolationKey& network_isolation_key)
+                               const NetworkIsolationKey& network_isolation_key,
+                               bool disable_secure_dns)
     : host_port_proxy_pair_(host_port_pair, proxy_server),
       privacy_mode_(privacy_mode),
       is_proxy_session_(is_proxy_session),
@@ -30,7 +31,8 @@
           base::FeatureList::IsEnabled(
               features::kPartitionConnectionsByNetworkIsolationKey)
               ? network_isolation_key
-              : NetworkIsolationKey()) {
+              : NetworkIsolationKey()),
+      disable_secure_dns_(disable_secure_dns) {
   // IsProxySession::kTrue should only be used with direct connections, since
   // using multiple layers of proxies on top of each other isn't supported.
   DCHECK(is_proxy_session != IsProxySession::kTrue || proxy_server.is_direct());
@@ -46,10 +48,11 @@
 bool SpdySessionKey::operator<(const SpdySessionKey& other) const {
   return std::tie(privacy_mode_, host_port_proxy_pair_.first,
                   host_port_proxy_pair_.second, is_proxy_session_,
-                  network_isolation_key_, socket_tag_) <
+                  network_isolation_key_, disable_secure_dns_, socket_tag_) <
          std::tie(other.privacy_mode_, other.host_port_proxy_pair_.first,
                   other.host_port_proxy_pair_.second, other.is_proxy_session_,
-                  other.network_isolation_key_, other.socket_tag_);
+                  other.network_isolation_key_, other.disable_secure_dns_,
+                  other.socket_tag_);
 }
 
 bool SpdySessionKey::operator==(const SpdySessionKey& other) const {
@@ -59,6 +62,7 @@
          host_port_proxy_pair_.second == other.host_port_proxy_pair_.second &&
          is_proxy_session_ == other.is_proxy_session_ &&
          network_isolation_key_ == other.network_isolation_key_ &&
+         disable_secure_dns_ == other.disable_secure_dns_ &&
          socket_tag_ == other.socket_tag_;
 }
 
diff --git a/net/spdy/spdy_session_key.h b/net/spdy/spdy_session_key.h
index 22e9204..d31e3df 100644
--- a/net/spdy/spdy_session_key.h
+++ b/net/spdy/spdy_session_key.h
@@ -36,7 +36,8 @@
       PrivacyMode privacy_mode,
       IsProxySession is_proxy_session,
       const SocketTag& socket_tag,
-      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey());
+      const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(),
+      bool disable_secure_dns = false);
 
   SpdySessionKey(const SpdySessionKey& other);
 
@@ -73,6 +74,8 @@
     return network_isolation_key_;
   }
 
+  bool disable_secure_dns() const { return disable_secure_dns_; }
+
   // Returns the estimate of dynamically allocated memory in bytes.
   size_t EstimateMemoryUsage() const;
 
@@ -84,6 +87,7 @@
   SocketTag socket_tag_;
   // Used to separate requests made in different contexts.
   NetworkIsolationKey network_isolation_key_;
+  bool disable_secure_dns_;
 };
 
 }  // namespace net
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc
index 4ce4347..3a452f0 100644
--- a/net/spdy/spdy_session_pool.cc
+++ b/net/spdy/spdy_session_pool.cc
@@ -279,7 +279,8 @@
       if (!(alias_key.proxy_server() == key.proxy_server()) ||
           !(alias_key.privacy_mode() == key.privacy_mode()) ||
           !(alias_key.is_proxy_session() == key.is_proxy_session()) ||
-          !(alias_key.network_isolation_key() == key.network_isolation_key())) {
+          !(alias_key.network_isolation_key() == key.network_isolation_key()) ||
+          !(alias_key.disable_secure_dns() == key.disable_secure_dns())) {
         continue;
       }
 
@@ -308,7 +309,8 @@
         SpdySessionKey new_key(old_key.host_port_pair(), old_key.proxy_server(),
                                old_key.privacy_mode(),
                                old_key.is_proxy_session(), key.socket_tag(),
-                               old_key.network_isolation_key());
+                               old_key.network_isolation_key(),
+                               old_key.disable_secure_dns());
 
         // If there is already a session with |new_key|, skip this one.
         // It will be found in |aliases_| in a future iteration.
@@ -344,10 +346,10 @@
           }
 
           UnmapKey(*it);
-          SpdySessionKey new_pool_alias_key =
-              SpdySessionKey(it->host_port_pair(), it->proxy_server(),
-                             it->privacy_mode(), it->is_proxy_session(),
-                             key.socket_tag(), it->network_isolation_key());
+          SpdySessionKey new_pool_alias_key = SpdySessionKey(
+              it->host_port_pair(), it->proxy_server(), it->privacy_mode(),
+              it->is_proxy_session(), key.socket_tag(),
+              it->network_isolation_key(), it->disable_secure_dns());
           MapKeyToAvailableSession(new_pool_alias_key, available_session);
           auto old_it = it;
           ++it;
diff --git a/net/spdy/spdy_session_pool_unittest.cc b/net/spdy/spdy_session_pool_unittest.cc
index a2d8986b..593e50f0 100644
--- a/net/spdy/spdy_session_pool_unittest.cc
+++ b/net/spdy/spdy_session_pool_unittest.cc
@@ -492,6 +492,15 @@
   EXPECT_FALSE(TryCreateAliasedSpdySession(spdy_session_pool_, proxy_key,
                                            test_hosts[1].iplist));
 
+  // Verify that the second host, with a different disable_secure_dns value,
+  // won't share the IP, even if the IP list matches.
+  SpdySessionKey disable_secure_dns_key(
+      test_hosts[1].key.host_port_pair(), ProxyServer::Direct(),
+      PRIVACY_MODE_DISABLED, SpdySessionKey::IsProxySession::kFalse,
+      SocketTag(), NetworkIsolationKey(), true /* disable_secure_dns */);
+  EXPECT_FALSE(TryCreateAliasedSpdySession(
+      spdy_session_pool_, disable_secure_dns_key, test_hosts[1].iplist));
+
   // Overlap between 2 and 3 is not transitive to 1.
   EXPECT_FALSE(TryCreateAliasedSpdySession(
       spdy_session_pool_, test_hosts[2].key, test_hosts[2].iplist));
diff --git a/remoting/base/BUILD.gn b/remoting/base/BUILD.gn
index a8e5b1f..3134240 100644
--- a/remoting/base/BUILD.gn
+++ b/remoting/base/BUILD.gn
@@ -66,6 +66,7 @@
   deps = [
     "//base/third_party/dynamic_annotations",
     "//google_apis",
+    "//remoting/base/grpc_support",
     "//third_party/libvpx",
     "//third_party/libyuv",
     "//third_party/webrtc/modules/desktop_capture:primitives",
diff --git a/remoting/base/name_value_map.h b/remoting/base/name_value_map.h
index 3027820..485e6f72 100644
--- a/remoting/base/name_value_map.h
+++ b/remoting/base/name_value_map.h
@@ -20,16 +20,22 @@
 };
 
 template <typename T, size_t N>
-const char* ValueToName(const NameMapElement<T> (&map)[N], T value) {
+const char* ValueToNameUnchecked(const NameMapElement<T> (&map)[N], T value) {
   for (size_t i = 0; i < N; ++i) {
     if (map[i].value == value)
       return map[i].name;
   }
-  NOTREACHED();
   return nullptr;
 }
 
 template <typename T, size_t N>
+const char* ValueToName(const NameMapElement<T> (&map)[N], T value) {
+  const char* result = ValueToNameUnchecked(map, value);
+  DCHECK_NE(nullptr, result);
+  return result;
+}
+
+template <typename T, size_t N>
 bool NameToValue(const NameMapElement<T> (&map)[N],
                  const std::string& name,
                  T* result) {
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn
index 2733d58..f9767a3 100644
--- a/remoting/host/BUILD.gn
+++ b/remoting/host/BUILD.gn
@@ -54,6 +54,23 @@
   ]
 }
 
+source_set("base") {
+  sources = [
+    "host_exit_codes.cc",
+    "host_exit_codes.h",
+    "logging.h",
+    "logging_linux.cc",
+    "logging_mac.cc",
+    "logging_win.cc",
+    "username.cc",
+    "username.h",
+  ]
+  deps = [
+    "//base",
+    "//remoting/base",
+  ]
+}
+
 # This must be a static library instead of a source set because
 # remoting_unittests requires that remoting_me2me_host.cc not be pulled in,
 # which in turn depends on remoting_me2me_host_static which isn't part of that
@@ -173,8 +190,6 @@
     "host_details.h",
     "host_event_logger.h",
     "host_event_logger_win.cc",
-    "host_exit_codes.cc",
-    "host_exit_codes.h",
     "host_experiment_session_plugin.cc",
     "host_experiment_session_plugin.h",
     "host_export.h",
@@ -221,10 +236,6 @@
     "ipc_video_frame_capturer.h",
     "it2me_desktop_environment.cc",
     "it2me_desktop_environment.h",
-    "logging.h",
-    "logging_linux.cc",
-    "logging_mac.cc",
-    "logging_win.cc",
     "me2me_desktop_environment.cc",
     "me2me_desktop_environment.h",
     "mouse_cursor_monitor_proxy.cc",
@@ -288,8 +299,6 @@
     "usage_stats_consent.h",
     "usage_stats_consent_mac.cc",
     "usage_stats_consent_win.cc",
-    "username.cc",
-    "username.h",
     "xmpp_register_support_host_request.cc",
     "xmpp_register_support_host_request.h",
     "xsession_chooser_linux.cc",
@@ -306,6 +315,7 @@
   defines = [ "WEBRTC_CHROMIUM_BUILD" ]
 
   deps = [
+    ":base",
     "//base:i18n",
     "//build:branding_buildflags",
     "//components/policy/core/common",
diff --git a/remoting/host/host_exit_codes.cc b/remoting/host/host_exit_codes.cc
index 0809a8a..daec9bb 100644
--- a/remoting/host/host_exit_codes.cc
+++ b/remoting/host/host_exit_codes.cc
@@ -25,4 +25,9 @@
   return ValueToName(kHostExitCodeStrings, exit_code);
 }
 
+const char* ExitCodeToStringUnchecked(int exit_code) {
+  return ValueToNameUnchecked(kHostExitCodeStrings,
+                              static_cast<HostExitCodes>(exit_code));
+}
+
 }  // namespace remoting
diff --git a/remoting/host/host_exit_codes.h b/remoting/host/host_exit_codes.h
index 5a31757..b48c284 100644
--- a/remoting/host/host_exit_codes.h
+++ b/remoting/host/host_exit_codes.h
@@ -35,6 +35,10 @@
 };
 
 const char* ExitCodeToString(HostExitCodes exit_code);
+
+// Returns nullptr if |exit_code| is not a HostExitCodes.
+const char* ExitCodeToStringUnchecked(int exit_code);
+
 }  // namespace remoting
 
 #endif  // REMOTING_HOST_HOST_EXIT_CODES_H_
diff --git a/remoting/host/mac/BUILD.gn b/remoting/host/mac/BUILD.gn
index 3ac8732..7a7f9af2 100644
--- a/remoting/host/mac/BUILD.gn
+++ b/remoting/host/mac/BUILD.gn
@@ -20,6 +20,31 @@
   ]
 }
 
+executable("remoting_me2me_host_service") {
+  sources = [
+    "host_service_main.cc",
+  ]
+  configs += [ "//remoting/build/config:version" ]
+  deps = [
+    ":constants",
+    "//base",
+    "//remoting/base",
+    "//remoting/host:base",
+  ]
+}
+
+bundle_data("remoting_me2me_host_service_bundle_data") {
+  sources = [
+    "$root_out_dir/remoting_me2me_host_service",
+  ]
+  outputs = [
+    "{{bundle_executable_dir}}/{{source_file_part}}",
+  ]
+  public_deps = [
+    ":remoting_me2me_host_service",
+  ]
+}
+
 # remoting_me2me_host-InfoPlist.strings
 foreach(locale, remoting_locales_with_underscores) {
   bundle_data("remoting_me2me_host_strings_${locale}_bundle_data") {
@@ -100,6 +125,7 @@
   }
   deps += [
     ":remoting_host_resources",
+    ":remoting_me2me_host_service_bundle_data",
     ":remoting_me2me_script",
     "//remoting/host:remoting_infoplist_strings",
     "//remoting/resources:copy_locales",
diff --git a/remoting/host/mac/host_service_main.cc b/remoting/host/mac/host_service_main.cc
new file mode 100644
index 0000000..5b890bd
--- /dev/null
+++ b/remoting/host/mac/host_service_main.cc
@@ -0,0 +1,332 @@
+// Copyright 2019 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 <signal.h>
+#include <unistd.h>
+
+#include <iostream>
+#include <string>
+
+#include "base/at_exit.h"
+#include "base/bind.h"
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/logging.h"
+#include "base/no_destructor.h"
+#include "base/path_service.h"
+#include "base/process/launch.h"
+#include "base/process/process.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringize_macros.h"
+#include "base/threading/platform_thread.h"
+#include "base/time/time.h"
+#include "remoting/base/logging.h"
+#include "remoting/host/host_exit_codes.h"
+#include "remoting/host/logging.h"
+#include "remoting/host/mac/constants_mac.h"
+#include "remoting/host/username.h"
+
+using namespace remoting;
+
+namespace remoting {
+namespace {
+
+constexpr char kSwitchDisable[] = "disable";
+constexpr char kSwitchEnable[] = "enable";
+constexpr char kSwitchSaveConfig[] = "save-config";
+constexpr char kSwitchHostVersion[] = "host-version";
+constexpr char kSwitchHostRunFromLaunchd[] = "run-from-launchd";
+
+constexpr char kHostExeFileName[] = "remoting_me2me_host";
+
+// The exit code returned by 'wait' when a process is terminated by SIGTERM.
+constexpr int kSigtermExitCode = 128 + SIGTERM;
+
+// Constants controlling the host process relaunch throttling.
+constexpr base::TimeDelta kMinimumRelaunchInterval =
+    base::TimeDelta::FromMinutes(1);
+constexpr int kMaximumHostFailures = 10;
+
+// Exit code 126 is defined by Posix to mean "Command found, but not
+// executable", and is returned if the process cannot be launched due to
+// parental control.
+constexpr int kPermissionDeniedParentalControl = 126;
+
+// This executable works as a proxy between launchd and the host. Signals of
+// interest to the host must be forwarded.
+constexpr int kSignalList[] = {
+    SIGHUP,  SIGINT,    SIGQUIT, SIGILL,   SIGTRAP, SIGABRT, SIGEMT,
+    SIGFPE,  SIGBUS,    SIGSEGV, SIGSYS,   SIGPIPE, SIGALRM, SIGTERM,
+    SIGURG,  SIGTSTP,   SIGCONT, SIGTTIN,  SIGTTOU, SIGIO,   SIGXCPU,
+    SIGXFSZ, SIGVTALRM, SIGPROF, SIGWINCH, SIGINFO, SIGUSR1, SIGUSR2};
+
+// Current host PID used to forward signals. 0 if host is not running.
+static base::ProcessId g_host_pid = 0;
+
+void HandleSignal(int signum) {
+  if (g_host_pid) {
+    // All other signals are forwarded to host then ignored except SIGTERM.
+    // launchd sends SIGTERM when service is being stopped so both the host and
+    // the host service need to terminate.
+    HOST_LOG << "Forwarding signal " << signum << " to host process "
+             << g_host_pid;
+    kill(g_host_pid, signum);
+    if (signum == SIGTERM) {
+      HOST_LOG << "Host service is terminating upon reception of SIGTERM";
+      exit(kSigtermExitCode);
+    }
+  } else {
+    HOST_LOG << "Signal " << signum
+             << " will not be forwarded since host is not running.";
+    exit(128 + signum);
+  }
+}
+
+void RegisterSignalHandler() {
+  struct sigaction action = {};
+  sigfillset(&action.sa_mask);
+  action.sa_flags = 0;
+  action.sa_handler = &HandleSignal;
+
+  for (int signum : kSignalList) {
+    if (sigaction(signum, &action, nullptr) == -1) {
+      PLOG(DFATAL) << "Failed to register signal handler for signal " << signum;
+    }
+  }
+}
+
+class HostService {
+ public:
+  HostService();
+  ~HostService();
+
+  bool Disable();
+  bool Enable();
+  bool WriteStdinToConfig();
+  int RunHost();
+  void PrintHostVersion();
+  void PrintPid();
+
+ private:
+  base::FilePath enabled_file_;
+  base::FilePath config_file_;
+  base::FilePath host_exe_file_;
+};
+
+HostService::HostService() {
+  enabled_file_ = base::FilePath(kHostEnabledPath);
+  config_file_ = base::FilePath(kHostConfigFilePath);
+
+  base::FilePath host_service_dir;
+  base::PathService::Get(base::DIR_EXE, &host_service_dir);
+  host_exe_file_ = host_service_dir.AppendASCII(kHostExeFileName);
+}
+
+HostService::~HostService() = default;
+
+int HostService::RunHost() {
+  // Run the config-upgrade tool, but only if running as root, as normal users
+  // don't have permission to write the config file.
+  if (geteuid() == 0) {
+    HOST_LOG << "Attempting to upgrade token";
+    base::CommandLine cmdline(host_exe_file_);
+    cmdline.AppendSwitch("upgrade-token");
+    cmdline.AppendSwitchPath("host-config", config_file_);
+    std::string output;
+    base::GetAppOutputAndError(cmdline, &output);
+    if (!output.empty()) {
+      HOST_LOG << "Message from host --upgrade-token: " << output;
+    }
+  }
+
+  int host_failure_count = 0;
+  base::TimeTicks host_start_time;
+
+  while (true) {
+    if (!base::PathExists(enabled_file_)) {
+      HOST_LOG << "Daemon is disabled.";
+      return 0;
+    }
+
+    // If this is not the first time the host has run, make sure we don't
+    // relaunch it too soon.
+    if (!host_start_time.is_null()) {
+      base::TimeDelta host_lifetime = base::TimeTicks::Now() - host_start_time;
+      HOST_LOG << "Host ran for " << host_lifetime;
+      if (host_lifetime < kMinimumRelaunchInterval) {
+        // If the host didn't run for very long, assume it crashed. Relaunch
+        // only after a suitable delay and increase the failure count.
+        host_failure_count++;
+        LOG(WARNING) << "Host failure count " << host_failure_count << "/"
+                     << kMaximumHostFailures;
+        if (host_failure_count >= kMaximumHostFailures) {
+          LOG(ERROR) << "Too many host failures. Giving up.";
+          return 1;
+        }
+        base::TimeDelta relaunch_in = kMinimumRelaunchInterval - host_lifetime;
+        HOST_LOG << "Relaunching in " << relaunch_in;
+        base::PlatformThread::Sleep(relaunch_in);
+      } else {
+        // If the host ran for long enough, reset the crash counter.
+        host_failure_count = 0;
+      }
+    }
+
+    host_start_time = base::TimeTicks::Now();
+    base::CommandLine cmdline(host_exe_file_);
+    cmdline.AppendSwitchPath("host-config", config_file_);
+    std::string ssh_auth_sockname =
+        "/tmp/chromoting." + GetUsername() + ".ssh_auth_sock";
+    cmdline.AppendSwitchASCII("ssh-auth-sockname", ssh_auth_sockname);
+    base::Process process = base::LaunchProcess(cmdline, base::LaunchOptions());
+    if (!process.IsValid()) {
+      LOG(ERROR) << "Failed to launch host process for unknown reason.";
+      return 1;
+    }
+
+    g_host_pid = process.Pid();
+    int exit_code;
+    process.WaitForExit(&exit_code);
+    g_host_pid = 0;
+    const char* exit_code_string_ptr = ExitCodeToStringUnchecked(exit_code);
+    std::string exit_code_string =
+        exit_code_string_ptr ? (std::string(exit_code_string_ptr) + " (" +
+                                base::NumberToString(exit_code) + ")")
+                             : base::NumberToString(exit_code);
+
+    if (exit_code == 0 || exit_code == kSigtermExitCode ||
+        exit_code == kPermissionDeniedParentalControl ||
+        (exit_code >= kMinPermanentErrorExitCode &&
+         exit_code <= kMaxPermanentErrorExitCode)) {
+      HOST_LOG << "Host returned permanent exit code " << exit_code_string
+               << " at " << base::Time::Now();
+      if (exit_code == kInvalidHostIdExitCode ||
+          exit_code == kHostDeletedExitCode) {
+        // The host was taken off-line remotely. To prevent the host being
+        // restarted when the login context changes, try to delete the "enabled"
+        // file. Since this requires root privileges, this is only possible when
+        // this executable is launched in the "login" context. In the "aqua"
+        // context, just exit and try again next time.
+        HOST_LOG << "Host deleted - disabling";
+        Disable();
+      }
+      return exit_code;
+    }
+
+    // Ignore non-permanent error-code and launch host again. Stop handling
+    // signals temporarily in case the executable has to sleep to throttle host
+    // relaunches. While throttling, there is no host process to which to
+    // forward the signal, so the default behaviour should be restored.
+    HOST_LOG << "Host returned non-permanent exit code " << exit_code_string
+             << " at " << base::Time::Now();
+  }
+
+  return 0;
+}
+
+bool HostService::Disable() {
+  return base::DeleteFile(enabled_file_, false);
+}
+
+bool HostService::Enable() {
+  // Ensure the config file is private whilst being written.
+  base::DeleteFile(config_file_, false);
+  if (!WriteStdinToConfig()) {
+    return false;
+  }
+  if (!base::SetPosixFilePermissions(config_file_, 0600)) {
+    LOG(ERROR) << "Failed to set posix permission";
+    return false;
+  }
+
+  // Ensure the config is readable by the user registering the host.
+  // We don't seem to have API for adding Mac ACL entry for file. This code just
+  // uses the chmod binary to do so.
+  base::CommandLine chmod_cmd(base::FilePath("/bin/chmod"));
+  chmod_cmd.AppendArg("+a");
+  chmod_cmd.AppendArg(GetUsername() + ":allow:read");
+  chmod_cmd.AppendArgPath(config_file_);
+  std::string output;
+  if (!base::GetAppOutputAndError(chmod_cmd, &output)) {
+    LOG(ERROR) << "Failed to chmod file " << config_file_;
+    return false;
+  }
+  if (!output.empty()) {
+    HOST_LOG << "Message from chmod: " << output;
+  }
+
+  if (base::WriteFile(enabled_file_, nullptr, 0) < 0) {
+    LOG(ERROR) << "Failed to write enabled file";
+    return false;
+  }
+  return true;
+}
+
+bool HostService::WriteStdinToConfig() {
+  // Reads from stdin and writes it to the config file.
+  std::istreambuf_iterator<char> begin(std::cin);
+  std::istreambuf_iterator<char> end;
+  std::string config(begin, end);
+  if (base::WriteFile(config_file_, config.data(), config.size()) !=
+      static_cast<int>(config.size())) {
+    LOG(ERROR) << "Failed to write config file";
+    return false;
+  }
+  return true;
+}
+
+void HostService::PrintHostVersion() {
+  printf("%s\n", STRINGIZE(VERSION));
+}
+
+void HostService::PrintPid() {
+  // Caller running host service with privilege waits for the PID to continue,
+  // so we need to flush it immediately.
+  printf("%d\n", base::Process::Current().Pid());
+  fflush(stdout);
+}
+
+}  // namespace
+}  // namespace remoting
+
+int main(int argc, char const* argv[]) {
+  base::AtExitManager exitManager;
+  base::CommandLine::Init(argc, argv);
+  InitHostLogging();
+
+  HostService service;
+  auto* current_cmdline = base::CommandLine::ForCurrentProcess();
+  std::string pid = base::NumberToString(base::Process::Current().Pid());
+  if (current_cmdline->HasSwitch(kSwitchDisable)) {
+    service.PrintPid();
+    if (!service.Disable()) {
+      LOG(ERROR) << "Failed to disable";
+      return 1;
+    }
+  } else if (current_cmdline->HasSwitch(kSwitchEnable)) {
+    service.PrintPid();
+    if (!service.Enable()) {
+      LOG(ERROR) << "Failed to enable";
+      return 1;
+    }
+  } else if (current_cmdline->HasSwitch(kSwitchSaveConfig)) {
+    service.PrintPid();
+    if (!service.WriteStdinToConfig()) {
+      LOG(ERROR) << "Failed to save config";
+      return 1;
+    }
+  } else if (current_cmdline->HasSwitch(kSwitchHostVersion)) {
+    service.PrintHostVersion();
+  } else if (current_cmdline->HasSwitch(kSwitchHostRunFromLaunchd)) {
+    RegisterSignalHandler();
+    HOST_LOG << "Host started for user " << GetUsername() << " at "
+             << base::Time::Now();
+    return service.RunHost();
+  } else {
+    service.PrintPid();
+    return 1;
+  }
+  return 0;
+}
diff --git a/skia/public/mojom/BUILD.gn b/skia/public/mojom/BUILD.gn
index 578cc41..3eeb273 100644
--- a/skia/public/mojom/BUILD.gn
+++ b/skia/public/mojom/BUILD.gn
@@ -9,6 +9,7 @@
     "bitmap.mojom",
     "blur_image_filter_tile_mode.mojom",
     "image_info.mojom",
+    "skcolor.mojom",
   ]
 
   public_deps = [
diff --git a/skia/public/mojom/skcolor.mojom b/skia/public/mojom/skcolor.mojom
new file mode 100644
index 0000000..9947645
--- /dev/null
+++ b/skia/public/mojom/skcolor.mojom
@@ -0,0 +1,10 @@
+// Copyright 2019 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.
+
+module skia.mojom;
+
+// Mirror of SkColor
+struct SkColor {
+    uint32 value;
+};
diff --git a/skia/public/mojom/skcolor.typemap b/skia/public/mojom/skcolor.typemap
new file mode 100644
index 0000000..8528029
--- /dev/null
+++ b/skia/public/mojom/skcolor.typemap
@@ -0,0 +1,11 @@
+# Copyright 2019 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.
+
+mojom = "//skia/public/mojom/skcolor.mojom"
+public_headers = [ "//third_party/skia/include/core/SkColor.h" ]
+traits_headers = [ "//skia/public/mojom/skcolor_mojom_traits.h" ]
+sources = [
+  "//skia/public/mojom/skcolor_mojom_traits.h",
+]
+type_mappings = [ "skia.mojom.SkColor=::SkColor" ]
diff --git a/skia/public/mojom/skcolor_mojom_traits.h b/skia/public/mojom/skcolor_mojom_traits.h
new file mode 100644
index 0000000..79593522
--- /dev/null
+++ b/skia/public/mojom/skcolor_mojom_traits.h
@@ -0,0 +1,24 @@
+// Copyright 2019 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 SKIA_PUBLIC_MOJOM_SKCOLOR_MOJOM_TRAITS_H_
+#define SKIA_PUBLIC_MOJOM_SKCOLOR_MOJOM_TRAITS_H_
+
+#include "skia/public/mojom/skcolor.mojom.h"
+#include "third_party/skia/include/core/SkColor.h"
+
+namespace mojo {
+
+template <>
+struct StructTraits<skia::mojom::SkColorDataView, ::SkColor> {
+  static uint32_t value(::SkColor color) { return color; }
+  static bool Read(skia::mojom::SkColorDataView data, ::SkColor* color) {
+    *color = data.value();
+    return true;
+  }
+};
+
+}  // namespace mojo
+
+#endif  // SKIA_PUBLIC_MOJOM_SKCOLOR_MOJOM_TRAITS_H_
diff --git a/skia/public/mojom/typemaps.gni b/skia/public/mojom/typemaps.gni
index 1fdd6bc..ca48cec5 100644
--- a/skia/public/mojom/typemaps.gni
+++ b/skia/public/mojom/typemaps.gni
@@ -5,5 +5,6 @@
 typemaps = [
   "//skia/public/mojom/blur_image_filter_tile_mode.typemap",
   "//skia/public/mojom/skbitmap.typemap",
+  "//skia/public/mojom/skcolor.typemap",
   "//skia/public/mojom/skimageinfo.typemap",
 ]
diff --git a/third_party/blink/public/mojom/clipboard/clipboard.mojom b/third_party/blink/public/mojom/clipboard/clipboard.mojom
index f7064c8..a1f0d0f2 100644
--- a/third_party/blink/public/mojom/clipboard/clipboard.mojom
+++ b/third_party/blink/public/mojom/clipboard/clipboard.mojom
@@ -5,6 +5,7 @@
 module blink.mojom;
 
 import "mojo/public/mojom/base/string16.mojom";
+import "mojo/public/mojom/base/big_buffer.mojom";
 import "skia/public/mojom/bitmap.mojom";
 import "url/mojom/url.mojom";
 
@@ -65,7 +66,11 @@
 
   WriteSmartPasteMarker();
 
+  // Chrome-specific pickled data.
   WriteCustomData(map<mojo_base.mojom.String16, mojo_base.mojom.BigString16> data);
+  // Arbitrary unsanitized data from renderer.
+  // NOTE: This has no callers, but will with Raw Clipboard Access.
+  WriteRawData(mojo_base.mojom.String16 format, mojo_base.mojom.BigBuffer data);
 
   // TODO(dcheng): The |url| parameter should really be a GURL, but <canvas>'s
   // copy as image tries to set very long data: URLs on the clipboard. Using
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom
index f264c70e..29011b6 100644
--- a/third_party/blink/public/mojom/frame/frame.mojom
+++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -20,4 +20,10 @@
   GetTextSurroundingSelection(uint32 max_length)
       => (mojo_base.mojom.String16 content, uint32 start_offset,
           uint32 end_offset);
+
+  // Creates an intervention report in the frame with contents |id| and
+  // |message|, returns once the report has been queued. |id| identifies the
+  // intervention that occurred. |message| is a human-readable string that
+  // can provide additional context to the cause of the intervention.
+  SendInterventionReport(string id, string message);
 };
diff --git a/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h b/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h
index 65e08f1..0fb7d9c 100644
--- a/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h
+++ b/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h
@@ -56,9 +56,6 @@
   void SetTopLevelBlameContext(
       base::trace_event::BlameContext* blame_context) override;
   void SetRendererProcessType(WebRendererProcessType type) override;
-  WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
-      const char* name,
-      WebScopedVirtualTimePauser::VirtualTaskDuration duration) override;
   void OnMainFrameRequestedForInput() override;
 
  private:
diff --git a/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h b/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h
index 5432871..442fe29 100644
--- a/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h
+++ b/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h
@@ -64,10 +64,6 @@
   MOCK_METHOD0(VirtualTimeResumed, void());
   MOCK_METHOD1(SetTopLevelBlameContext, void(base::trace_event::BlameContext*));
   MOCK_METHOD1(SetRendererProcessType, void(WebRendererProcessType));
-  MOCK_METHOD2(CreateWebScopedVirtualTimePauser,
-               WebScopedVirtualTimePauser(
-                   const char* name,
-                   WebScopedVirtualTimePauser::VirtualTaskDuration));
   MOCK_METHOD0(OnMainFrameRequestedForInput, void());
 
  private:
diff --git a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
index 041bf8d9..c2e979a 100644
--- a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
+++ b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
@@ -14,7 +14,6 @@
 #include "build/build_config.h"
 #include "third_party/blink/public/platform/scheduler/web_rail_mode_observer.h"
 #include "third_party/blink/public/platform/scheduler/web_render_widget_scheduling_state.h"
-#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_input_event.h"
 #include "third_party/blink/public/platform/web_input_event_result.h"
@@ -235,17 +234,6 @@
   // once.
   virtual void SetRendererProcessType(WebRendererProcessType type);
 
-  // Returns a WebScopedVirtualTimePauser which can be used to vote for pausing
-  // virtual time. Virtual time will be paused if any WebScopedVirtualTimePauser
-  // votes to pause it, and only unpaused only if all
-  // WebScopedVirtualTimePausers are either destroyed or vote to unpause.  Note
-  // the WebScopedVirtualTimePauser returned by this method is initially
-  // unpaused.
-  virtual WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
-      const char* name,
-      WebScopedVirtualTimePauser::VirtualTaskDuration duration =
-          WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant);
-
  protected:
   WebThreadScheduler() = default;
   DISALLOW_COPY_AND_ASSIGN(WebThreadScheduler);
diff --git a/third_party/blink/renderer/core/frame/frame_impl.cc b/third_party/blink/renderer/core/frame/frame_impl.cc
index ae4d25d..50d773f 100644
--- a/third_party/blink/renderer/core/frame/frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/frame_impl.cc
@@ -8,6 +8,7 @@
 
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/editing/surrounding_text.h"
+#include "third_party/blink/renderer/core/frame/intervention.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
@@ -65,4 +66,9 @@
                           surrounding_text.EndOffsetInTextContent());
 }
 
+void FrameImpl::SendInterventionReport(const String& id,
+                                       const String& message) {
+  Intervention::GenerateReport(GetSupplementable(), id, message);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/frame_impl.h b/third_party/blink/renderer/core/frame/frame_impl.h
index 47e0b18..8b8ab63 100644
--- a/third_party/blink/renderer/core/frame/frame_impl.h
+++ b/third_party/blink/renderer/core/frame/frame_impl.h
@@ -41,6 +41,8 @@
       uint32_t max_length,
       GetTextSurroundingSelectionCallback callback) final;
 
+  void SendInterventionReport(const String& id, const String& message) final;
+
  private:
   mojo::AssociatedReceiver<mojom::blink::Frame> receiver_{this};
 
diff --git a/third_party/blink/renderer/core/frame/history.cc b/third_party/blink/renderer/core/frame/history.cc
index 0eef974..36b9bb36 100644
--- a/third_party/blink/renderer/core/frame/history.cc
+++ b/third_party/blink/renderer/core/frame/history.cc
@@ -195,6 +195,8 @@
     return;
 
   if (delta) {
+    if (Page* page = GetFrame()->GetPage())
+      page->HistoryNavigationVirtualTimePauser().PauseVirtualTime();
     GetFrame()->Client()->NavigateBackForward(delta);
   } else {
     // We intentionally call reload() for the current frame if delta is zero.
diff --git a/third_party/blink/renderer/core/html/html_progress_element.cc b/third_party/blink/renderer/core/html/html_progress_element.cc
index 99d1410b..7847ce9 100644
--- a/third_party/blink/renderer/core/html/html_progress_element.cc
+++ b/third_party/blink/renderer/core/html/html_progress_element.cc
@@ -56,7 +56,7 @@
   }
   UseCounter::Count(GetDocument(),
                     WebFeature::kProgressElementWithProgressBarAppearance);
-  return LayoutObjectFactory::CreateLayoutProgress(this, style, legacy);
+  return LayoutObjectFactory::CreateProgress(this, style, legacy);
 }
 
 LayoutProgress* HTMLProgressElement::GetLayoutProgress() const {
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.cc b/third_party/blink/renderer/core/layout/layout_object_factory.cc
index bc47670..c23306d 100644
--- a/third_party/blink/renderer/core/layout/layout_object_factory.cc
+++ b/third_party/blink/renderer/core/layout/layout_object_factory.cc
@@ -147,10 +147,9 @@
   return layout_text_fragment;
 }
 
-LayoutProgress* LayoutObjectFactory::CreateLayoutProgress(
-    Node* node,
-    const ComputedStyle& style,
-    LegacyLayout legacy) {
+LayoutProgress* LayoutObjectFactory::CreateProgress(Node* node,
+                                                    const ComputedStyle& style,
+                                                    LegacyLayout legacy) {
   return CreateObject<LayoutProgress, LayoutNGProgress>(*node, style, legacy);
 }
 
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.h b/third_party/blink/renderer/core/layout/layout_object_factory.h
index 9425007..3fbd47b 100644
--- a/third_party/blink/renderer/core/layout/layout_object_factory.h
+++ b/third_party/blink/renderer/core/layout/layout_object_factory.h
@@ -56,9 +56,9 @@
                                                 int start_offset,
                                                 int length,
                                                 LegacyLayout);
-  static LayoutProgress* CreateLayoutProgress(Node* node,
-                                              const ComputedStyle& style,
-                                              LegacyLayout legacy);
+  static LayoutProgress* CreateProgress(Node* node,
+                                        const ComputedStyle& style,
+                                        LegacyLayout legacy);
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index 138f90f..433f6e0 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -1109,6 +1109,10 @@
         DocumentLoader::LoadTypeToCommitType(document_loader_->LoadType()),
         document_loader_->GetGlobalObjectReusePolicy());
   }
+  if (document_loader_->LoadType() == WebFrameLoadType::kBackForward) {
+    if (Page* page = frame_->GetPage())
+      page->HistoryNavigationVirtualTimePauser().UnpauseVirtualTime();
+  }
 
   // Load the document if needed.
   document_loader_->StartLoadingResponse();
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc
index 2f7939fb..80128c91 100644
--- a/third_party/blink/renderer/core/page/page.cc
+++ b/third_party/blink/renderer/core/page/page.cc
@@ -902,6 +902,10 @@
   page_scheduler_ = std::move(page_scheduler);
   // The scheduler should be set before the main frame.
   DCHECK(!main_frame_);
+  history_navigation_virtual_time_pauser_ =
+      page_scheduler_->CreateWebScopedVirtualTimePauser(
+          "HistoryNavigation",
+          WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant);
 }
 
 bool Page::IsOrdinary() const {
diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/renderer/core/page/page.h
index e4a4c367..e2106445 100644
--- a/third_party/blink/renderer/core/page/page.h
+++ b/third_party/blink/renderer/core/page/page.h
@@ -26,6 +26,7 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h"
 #include "third_party/blink/public/platform/web_text_autosizer_page_info.h"
 #include "third_party/blink/public/web/web_window_features.h"
 #include "third_party/blink/renderer/core/core_export.h"
@@ -335,6 +336,10 @@
   }
   void ClearMediaFeatureOverrides();
 
+  WebScopedVirtualTimePauser& HistoryNavigationVirtualTimePauser() {
+    return history_navigation_virtual_time_pauser_;
+  }
+
  private:
   friend class ScopedPagePauser;
 
@@ -445,6 +450,8 @@
 
   WebTextAutosizerPageInfo web_text_autosizer_page_info_;
 
+  WebScopedVirtualTimePauser history_navigation_virtual_time_pauser_;
+
   DISALLOW_COPY_AND_ASSIGN(Page);
 };
 
diff --git a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc
index 3808d616..2f0f3aa 100644
--- a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc
+++ b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc
@@ -24,14 +24,6 @@
   return ts.Release();
 }
 
-FloatPoint ScrollPosition(const GraphicsLayer& layer) {
-  if (const auto* scrollable_area =
-          layer.Client().GetScrollableAreaForTesting(&layer)) {
-    return scrollable_area->ScrollPosition();
-  }
-  return FloatPoint();
-}
-
 std::unique_ptr<JSONObject> GraphicsLayerAsJSON(
     const GraphicsLayer* layer,
     LayerTreeFlags flags,
@@ -80,10 +72,6 @@
                     Color(layer->BackgroundColor()).NameForLayoutTreeAsText());
   }
 
-  FloatPoint scroll_position(ScrollPosition(*layer));
-  if (scroll_position != FloatPoint())
-    json->SetArray("scrollPosition", PointAsJSONArray(scroll_position));
-
   if ((flags & kLayerTreeIncludesPaintInvalidations) &&
       layer->Client().IsTrackingRasterInvalidations() &&
       layer->GetRasterInvalidationTracking()) {
@@ -222,6 +210,7 @@
     }
 
     transforms_json_->PushObject(std::move(transform_json));
+    transform_id_map_.Set(&transform, id);
     return id;
   }
 
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
index 8230ad6..5f70df08 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -288,9 +288,8 @@
   // Only create scroll hit test data for objects that scroll.
   const auto* layer = PhysicalFragment().Layer();
   if (!layer || !layer->GetScrollableArea() ||
-      !layer->GetScrollableArea()->ScrollsOverflow()) {
+      !layer->GetScrollableArea()->ScrollsOverflow())
     return;
-  }
 
   // TODO(pdr): Break dependency on LayoutObject functionality.
   const LayoutObject& layout_object = *box_fragment_.GetLayoutObject();
@@ -343,8 +342,10 @@
       return;
   }
 
-  if (paint_phase == PaintPhase::kMask && is_visible)
-    return PaintMask(paint_info, paint_offset);
+  if (paint_phase == PaintPhase::kMask && is_visible) {
+    PaintMask(paint_info, paint_offset);
+    return;
+  }
 
   if (paint_phase == PaintPhase::kForeground &&
       paint_info.ShouldAddUrlMetadata()) {
@@ -379,15 +380,13 @@
           PaintFloats(paint_info);
       }
     } else {
-      if (paint_phase != PaintPhase::kFloat) {
+      if (paint_phase != PaintPhase::kFloat)
         PaintBlockChildren(paint_info);
-      }
 
       if (paint_phase == PaintPhase::kFloat ||
           paint_phase == PaintPhase::kSelection ||
-          paint_phase == PaintPhase::kTextClip) {
+          paint_phase == PaintPhase::kTextClip)
         PaintFloats(paint_info);
-      }
     }
   }
 
@@ -525,9 +524,8 @@
       continue;
     }
     if (const auto* child_container =
-            DynamicTo<NGPhysicalContainerFragment>(&child_fragment)) {
+            DynamicTo<NGPhysicalContainerFragment>(&child_fragment))
       PaintBlockFloatingChildren(*child_container, paint_info);
-    }
   }
 }
 
@@ -1175,8 +1173,7 @@
   const NGPhysicalBoxFragment& fragment = PhysicalFragment();
   if (!fragment.IsInlineBox()) {
     return paint_state.LocalRectIntersectsCullRect(
-        ToLayoutBox(fragment.GetLayoutObject())
-            ->PhysicalSelfVisualOverflowRect());
+        ToLayoutBox(fragment.GetLayoutObject())->PhysicalVisualOverflowRect());
   }
   NOTREACHED();
   return false;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.cc b/third_party/blink/renderer/modules/webgpu/gpu_device.cc
index b4acf0e..1604383f 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_device.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_device.cc
@@ -232,8 +232,7 @@
                                   AsDawnEnum<DawnErrorFilter>(filter));
 }
 
-ScriptPromise GPUDevice::popErrorScope(ScriptState* script_state,
-                                       ExceptionState& exception_state) {
+ScriptPromise GPUDevice::popErrorScope(ScriptState* script_state) {
   ScriptPromiseResolver* resolver =
       MakeGarbageCollected<ScriptPromiseResolver>(script_state);
   ScriptPromise promise = resolver->Promise();
@@ -244,9 +243,10 @@
 
   if (!GetProcs().devicePopErrorScope(GetHandle(), callback->UnboundCallback(),
                                       callback->AsUserdata())) {
-    exception_state.ThrowDOMException(DOMExceptionCode::kOperationError,
-                                      "No error scopes to pop.");
+    resolver->Reject(MakeGarbageCollected<DOMException>(
+        DOMExceptionCode::kOperationError, "No error scopes to pop."));
     delete callback;
+    return promise;
   }
 
   // WebGPU guarantees callbacks complete in finite time. Flush now so that
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.h b/third_party/blink/renderer/modules/webgpu/gpu_device.h
index 93bf6b9..1f17269 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_device.h
+++ b/third_party/blink/renderer/modules/webgpu/gpu_device.h
@@ -104,8 +104,7 @@
   GPUQueue* getQueue();
 
   void pushErrorScope(const WTF::String& filter);
-  ScriptPromise popErrorScope(ScriptState* script_state,
-                              ExceptionState& exception_state);
+  ScriptPromise popErrorScope(ScriptState* script_state);
 
   DEFINE_ATTRIBUTE_EVENT_LISTENER(uncapturederror, kUncapturederror)
 
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.idl b/third_party/blink/renderer/modules/webgpu/gpu_device.idl
index 1b9ec8b..56e9b38 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_device.idl
+++ b/third_party/blink/renderer/modules/webgpu/gpu_device.idl
@@ -29,7 +29,7 @@
     GPUQueue getQueue();
 
     void pushErrorScope(GPUErrorFilter filter);
-    [CallWith=ScriptState, RaisesException] Promise<GPUError?> popErrorScope();
+    [CallWith=ScriptState] Promise<GPUError?> popErrorScope();
 
     attribute EventHandler onuncapturederror;
 };
diff --git a/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc b/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc
index ce590849..4633243e 100644
--- a/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc
@@ -121,6 +121,11 @@
     return false;
   }
   bool RequestBeginMainFrameNotExpected(bool) override { return false; }
+  WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
+      const String& name,
+      WebScopedVirtualTimePauser::VirtualTaskDuration) override {
+    return WebScopedVirtualTimePauser();
+  }
 
  private:
   DISALLOW_COPY_AND_ASSIGN(DummyPageScheduler);
diff --git a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
index 74e6c82b..ac27cae 100644
--- a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
@@ -200,13 +200,6 @@
   NOTREACHED();
 }
 
-WebScopedVirtualTimePauser WebThreadScheduler::CreateWebScopedVirtualTimePauser(
-    const char* name,
-    WebScopedVirtualTimePauser::VirtualTaskDuration duration) {
-  NOTREACHED();
-  return WebScopedVirtualTimePauser();
-}
-
 void WebThreadScheduler::OnMainFrameRequestedForInput() {
   NOTREACHED();
 }
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
index f7641b6..8cf68e5 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
@@ -2314,14 +2314,6 @@
   main_thread_only().process_type = type;
 }
 
-WebScopedVirtualTimePauser
-MainThreadSchedulerImpl::CreateWebScopedVirtualTimePauser(
-    const char* name,
-    WebScopedVirtualTimePauser::VirtualTaskDuration duration) {
-  return WebScopedVirtualTimePauser(this, duration,
-                                    WebString(WTF::String(name)));
-}
-
 PendingUserInputInfo MainThreadSchedulerImpl::GetPendingUserInputInfo() const {
   base::AutoLock lock(any_thread_lock_);
   return any_thread().pending_input_monitor.Info();
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
index 2748d22..3e33b90 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
@@ -215,9 +215,6 @@
   void AddRAILModeObserver(RAILModeObserver* observer) override;
   void RemoveRAILModeObserver(RAILModeObserver const* observer) override;
   void SetRendererProcessType(WebRendererProcessType type) override;
-  WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
-      const char* name,
-      WebScopedVirtualTimePauser::VirtualTaskDuration duration) override;
   PendingUserInputInfo GetPendingUserInputInfo() const override;
   bool IsBeginMainFrameScheduled() const override;
 
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
index ae46068..afd86e3 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
@@ -3213,9 +3213,9 @@
   scheduler_->SetVirtualTimePolicy(
       PageSchedulerImpl::VirtualTimePolicy::kDeterministicLoading);
 
-  WebScopedVirtualTimePauser pauser =
-      scheduler_->CreateWebScopedVirtualTimePauser(
-          "test", WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant);
+  WebScopedVirtualTimePauser pauser(
+      scheduler_.get(),
+      WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant, "test");
 
   base::TimeTicks before = scheduler_->GetVirtualTimeDomain()->Now();
   EXPECT_TRUE(scheduler_->VirtualTimeAllowedToAdvance());
@@ -3234,9 +3234,9 @@
   scheduler_->SetVirtualTimePolicy(
       PageSchedulerImpl::VirtualTimePolicy::kDeterministicLoading);
 
-  WebScopedVirtualTimePauser pauser =
-      scheduler_->CreateWebScopedVirtualTimePauser(
-          "test", WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant);
+  WebScopedVirtualTimePauser pauser(
+      scheduler_.get(),
+      WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant, "test");
 
   base::TimeTicks before = scheduler_->GetVirtualTimeDomain()->Now();
   pauser.PauseVirtualTime();
@@ -3254,9 +3254,9 @@
   scheduler_->SetVirtualTimePolicy(
       PageSchedulerImpl::VirtualTimePolicy::kDeterministicLoading);
 
-  WebScopedVirtualTimePauser pauser =
-      scheduler_->CreateWebScopedVirtualTimePauser(
-          "test", WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant);
+  WebScopedVirtualTimePauser pauser(
+      scheduler_.get(),
+      WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant, "test");
 
   // Test will pass if the queue without virtual is the last one in the
   // iteration order. Create 100 of them and ensure that it is created in the
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc
index 1779e61..c565d53 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc
@@ -768,6 +768,12 @@
   return nullptr;
 }
 
+WebScopedVirtualTimePauser PageSchedulerImpl::CreateWebScopedVirtualTimePauser(
+    const String& name,
+    WebScopedVirtualTimePauser::VirtualTaskDuration duration) {
+  return WebScopedVirtualTimePauser(main_thread_scheduler_, duration, name);
+}
+
 // static
 const char PageSchedulerImpl::kHistogramPageLifecycleStateTransition[] =
     "PageScheduler.PageLifecycleStateTransition";
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h
index 4de806f0..e1370f47 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h
@@ -77,6 +77,9 @@
   bool IsExemptFromBudgetBasedThrottling() const override;
   bool OptedOutFromAggressiveThrottlingForTest() const override;
   bool RequestBeginMainFrameNotExpected(bool new_state) override;
+  WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
+      const WTF::String& name,
+      WebScopedVirtualTimePauser::VirtualTaskDuration) override;
 
   // Virtual for testing.
   virtual void ReportIntervention(const String& message);
diff --git a/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h
index 43e6e76..3d7dde32 100644
--- a/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include "third_party/blink/public/platform/blame_context.h"
+#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/page_lifecycle_state.h"
@@ -140,6 +141,16 @@
   // Returns true if the request has been succcessfully relayed to the
   // compositor.
   virtual bool RequestBeginMainFrameNotExpected(bool new_state) = 0;
+
+  // Returns a WebScopedVirtualTimePauser which can be used to vote for pausing
+  // virtual time. Virtual time will be paused if any WebScopedVirtualTimePauser
+  // votes to pause it, and only unpaused only if all
+  // WebScopedVirtualTimePausers are either destroyed or vote to unpause.  Note
+  // the WebScopedVirtualTimePauser returned by this method is initially
+  // unpaused.
+  virtual WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
+      const String& name,
+      WebScopedVirtualTimePauser::VirtualTaskDuration) = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h b/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h
index a089527..904f54f2 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h
@@ -78,6 +78,11 @@
   bool RequestBeginMainFrameNotExpected(bool new_state) override {
     return false;
   }
+  WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
+      const String& name,
+      WebScopedVirtualTimePauser::VirtualTaskDuration) override {
+    return WebScopedVirtualTimePauser();
+  }
 
  private:
   bool is_audio_playing_;
diff --git a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
index 17766c3..1cc6384 100644
--- a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
@@ -9,7 +9,6 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
-#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
 namespace scheduler {
@@ -106,13 +105,5 @@
 
 void WebFakeThreadScheduler::OnMainFrameRequestedForInput() {}
 
-WebScopedVirtualTimePauser
-WebFakeThreadScheduler::CreateWebScopedVirtualTimePauser(
-    const char* name,
-    WebScopedVirtualTimePauser::VirtualTaskDuration duration) {
-  return WebScopedVirtualTimePauser(nullptr, duration,
-                                    WebString(WTF::String(name)));
-}
-
 }  // namespace scheduler
 }  // namespace blink
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
index 2c9f902..9929e121 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
@@ -538,19 +538,6 @@
                 _log.warning(
                     '  %s -> pixel hash failed (but diff passed)', self._test_name)
 
-            if err_str:
-                _log.error(err_str)
-                driver_output.error = (driver_output.error or '') + err_str
-
-            if diff or err_str:
-                return [
-                    test_failures.FailureImageHashMismatch(
-                        driver_output, expected_driver_output)]
-            else:
-                # See https://bugs.webkit.org/show_bug.cgi?id=69444 for why this
-                # isn't a full failure.
-                _log.warning(
-                    '  %s -> pixel hash failed (but diff passed)', self._test_name)
         return []
 
     def _run_reftest(self):
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 42fa21e..30ec35ef 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -2682,11 +2682,11 @@
 # Subgrid is not implemented yet
 crbug.com/618969 external/wpt/css/css-grid/subgrid/ [ Skip ]
 
-crbug.com/1012600 virtual/threaded/external/wpt/css/css-animations/animation-opacity-pause-and-set-time.html [ Failure Pass ]
 crbug.com/1012627 [ Win7 ] external/wpt/css/css-text/line-breaking/line-breaking-021.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
 crbug.com/626703 [ Win10 ] virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ]
+crbug.com/626703 [ Retina ] virtual/threaded/external/wpt/css/css-animations/animation-opacity-pause-and-set-time.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/html/rendering/non-replaced-elements/form-controls/select-sizing-001.html [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-align/baseline-rules/grid-item-input-type-number.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/css/css-align/baseline-rules/grid-item-input-type-number.html [ Failure ]
diff --git a/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt b/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt
index b20f969..e49f564 100644
--- a/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt
+++ b/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2513],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
index 6bd6b84..cdec5f9 100644
--- a/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
+++ b/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='software')",
       "position": [-105, -105],
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [105, 105, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [105, 105, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt b/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt
index 64b93eb..58ee645 100644
--- a/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt
+++ b/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt
@@ -24,7 +24,6 @@
       "name": "Scrolling Contents Layer",
       "bounds": [785, 3700],
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt
index c1922bd..6f79804 100644
--- a/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt
+++ b/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='layer-A')",
       "position": [12, 7],
       "bounds": [226, 180],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [8, 13, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 13, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
index fa70382..9d84137 100644
--- a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
+++ b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [508, 516],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [135, 135],
       "bounds": [15, 15],
-      "transform": 5
+      "transform": 2
     }
   ],
   "transforms": [
@@ -35,35 +35,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
index 71566a6..8e99de8 100644
--- a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
+++ b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [508, 516],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [135, 135],
       "bounds": [15, 15],
-      "transform": 5
+      "transform": 2
     }
   ],
   "transforms": [
@@ -35,35 +35,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
index 4e6ddce..f305076 100644
--- a/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
+++ b/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -19,14 +19,14 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow PRE id='layers')",
       "position": [0, -250],
       "bounds": [792, 100],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='indicator box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -47,15 +47,6 @@
         [0, 0, 1, 0],
         [0, 250, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 250, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt b/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt
index 45ed822..97d88524 100644
--- a/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt
@@ -14,53 +14,53 @@
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 6
+      "transform": 3
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 8
+      "transform": 4
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 11
+      "transform": 5
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [284, 204],
-      "transform": 12
+      "transform": 6
     },
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
-      "transform": 14
+      "transform": 7
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 17
+      "transform": 8
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 19
+      "transform": 9
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 22
+      "transform": 10
     },
     {
       "name": "LayoutNGBlockFlow DIV id='box' class='composited'",
@@ -81,11 +81,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 120, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -95,16 +96,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 120, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
@@ -114,27 +116,26 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [18, 10, 0, 1]
       ]
     },
     {
       "id": 6,
-      "parent": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [20, 344, 0, 1]
       ]
     },
     {
       "id": 7,
-      "parent": 5,
+      "parent": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -144,17 +145,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [1, 1, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
       "id": 9,
-      "parent": 5,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
@@ -164,123 +165,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 11,
-      "parent": 10,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 344, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 344, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 15,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 344, 0, 1]
-      ]
-    },
-    {
-      "id": 16,
-      "parent": 15,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 17,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 18,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 19,
-      "parent": 18,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 20,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 21,
-      "parent": 20,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 22,
-      "parent": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt
index cec23a30..a4ffe973 100644
--- a/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -15,20 +15,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [305, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='overlay'",
       "bounds": [150, 150],
       "backgroundColor": "#00000099",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -43,11 +43,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [58, 58, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -57,21 +58,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
index f6cc8b0e..69bc9767c 100644
--- a/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -18,21 +18,21 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow DIV id='box' class='composited'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -47,11 +47,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 128, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -61,21 +62,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt
index f6704047..48e1275 100644
--- a/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -16,20 +16,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow DIV id='test' class='composited box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -44,11 +44,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -58,21 +59,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt b/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt
index 841a2b8..d713991 100644
--- a/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt
@@ -16,20 +16,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [385, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -44,11 +44,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -58,21 +59,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt
index 2a0301b..4595f03 100644
--- a/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -15,20 +15,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -43,11 +43,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -57,21 +58,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt
index 5f70417..b3692c4 100644
--- a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt
@@ -16,20 +16,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -44,11 +44,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -58,21 +59,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt
index a40983f..fbbb077 100644
--- a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt
@@ -21,12 +21,12 @@
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame (positioned) IFRAME id='overlap'",
       "bounds": [304, 304],
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -41,16 +41,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -59,7 +50,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt
index 6eb84e0..4d79b07 100644
--- a/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -5,64 +5,63 @@
       "bounds": [785, 1650],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [284, 204],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
+      "transform": 3
+    },
+    {
+      "name": "LayoutIFrame IFRAME",
+      "bounds": [252, 172],
+      "transform": 4
+    },
+    {
+      "name": "LayoutView #document",
+      "bounds": [250, 170],
+      "backgroundColor": "#C0C0C0",
+      "transform": 5
+    },
+    {
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "bounds": [210, 210],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 6
     },
     {
       "name": "LayoutIFrame IFRAME",
-      "bounds": [252, 172],
-      "transform": 10
-    },
-    {
-      "name": "LayoutView #document",
-      "bounds": [250, 170],
-      "backgroundColor": "#C0C0C0",
-      "transform": 12
-    },
-    {
-      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
-      "bounds": [210, 210],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 15
-    },
-    {
-      "name": "LayoutIFrame IFRAME",
       "bounds": [284, 204],
-      "transform": 17
+      "transform": 7
     },
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
-      "transform": 20
+      "transform": 8
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 24
+      "transform": 9
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 26
+      "transform": 10
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 29
+      "transform": 11
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='banner'",
@@ -82,11 +81,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [20, 150, 0, 1]
       ]
     },
     {
@@ -96,16 +96,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 150, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
@@ -115,7 +116,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 150, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
@@ -125,16 +126,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [18, 10, 0, 1]
       ]
     },
     {
       "id": 7,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [20, 374, 0, 1]
       ]
     },
     {
@@ -144,7 +146,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 150, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -154,7 +156,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
@@ -164,189 +166,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
       "id": 11,
-      "parent": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 12,
-      "parent": 11,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "parent": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 15,
-      "parent": 14,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 17,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 374, 0, 1]
-      ]
-    },
-    {
-      "id": 18,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 19,
-      "parent": 18,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 374, 0, 1]
-      ]
-    },
-    {
-      "id": 20,
-      "parent": 19,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 22,
-      "parent": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 374, 0, 1]
-      ]
-    },
-    {
-      "id": 23,
-      "parent": 22,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 24,
-      "parent": 23,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 25,
-      "parent": 23,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 26,
-      "parent": 25,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 27,
-      "parent": 23,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 28,
-      "parent": 27,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 29,
-      "parent": 28,
+      "parent": 10,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt
index e9ee7f1..d03eddd 100644
--- a/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt
@@ -16,27 +16,26 @@
       "name": "Scrolling Contents Layer",
       "bounds": [508, 608],
       "backgroundColor": "#C0C0C0",
-      "scrollPosition": [80, 80],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 4
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 135],
       "bounds": [15, 15],
-      "transform": 7
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 8
+      "transform": 5
     }
   ],
   "transforms": [
@@ -51,11 +50,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -65,7 +65,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
+        [-80, -80, 0, 1]
       ]
     },
     {
@@ -75,40 +75,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [-80, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [108, 100, 0, 1]
       ]
     },
     {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 28, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
+      "id": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt
index 7bc6465..4bad745 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -19,20 +19,20 @@
       "bounds": [250, 50],
       "contentsOpaque": true,
       "backgroundColor": "#C0C0C0",
-      "transform": 5
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='test1 box')",
       "position": [5, 15],
       "bounds": [100, 100],
-      "transform": 8
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV class='box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 9
+      "transform": 4
     }
   ],
   "transforms": [
@@ -57,64 +57,16 @@
     },
     {
       "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [6, 6, 0, 1]
       ]
     },
     {
       "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt
index 6a6fd31..6116c4d 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 5021],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
index f729126..98cf1ab9 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
@@ -14,14 +14,14 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [785, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='yellow fixed'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FFFF00",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -40,15 +40,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 13, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [200, 13, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
index f9d98d7..3a632cad 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -52,7 +52,6 @@
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 10],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
index a24d4f0..d7f82d0 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
@@ -6,7 +6,6 @@
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [100, 100],
       "transform": 2
     },
     {
@@ -118,7 +117,6 @@
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [100, 100],
       "transform": 2
     },
     {
@@ -230,7 +228,6 @@
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [100, 100],
       "transform": 2
     },
     {
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt
index 19b03543..7b6ebce 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt
@@ -5,14 +5,13 @@
       "bounds": [785, 5021],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow DIV id='transform'",
       "position": [100, 100],
       "bounds": [256, 256],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='overlap'",
@@ -33,16 +32,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -1000, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -51,8 +41,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
index 415a0eb..03b5128 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
@@ -23,7 +23,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box')",
       "position": [0, 155],
       "bounds": [210, 100],
-      "transform": 7
+      "transform": 4
     }
   ],
   "transforms": [
@@ -64,35 +64,6 @@
         [0, 0, 1, 0],
         [23, 58, 0, 1]
       ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 20, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -49, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [23, 58, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt
index 9a2db50..f5b1992 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt
@@ -25,28 +25,28 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='to-animate2' class='box animating2'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
+      "transform": 7
+    },
+    {
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'",
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFF00",
+      "transform": 8
+    },
+    {
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'",
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFF00",
       "transform": 9
-    },
-    {
-      "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'",
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFF00",
-      "transform": 11
-    },
-    {
-      "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'",
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFF00",
-      "transform": 12
     }
   ],
   "transforms": [
@@ -80,6 +80,7 @@
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -99,7 +100,7 @@
     },
     {
       "id": 6,
-      "parent": 5,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -109,6 +110,7 @@
     },
     {
       "id": 7,
+      "parent": 6,
       "transform": [
         [...],
         [...],
@@ -118,7 +120,7 @@
     },
     {
       "id": 8,
-      "parent": 7,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -128,35 +130,6 @@
     },
     {
       "id": 9,
-      "parent": 8,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 10,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 11,
-      "parent": 10,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 12,
       "transform": [
         [...],
         [...],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt
index 0ee5666..43a82e18 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt
@@ -26,13 +26,13 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box yellow')",
       "position": [-51, 451],
       "bounds": [100, 100],
-      "transform": 8
+      "transform": 4
     }
   ],
   "transforms": [
@@ -66,6 +66,7 @@
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -82,35 +83,6 @@
         [...],
         [...]
       ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
     }
   ]
 }
@@ -143,13 +115,13 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='first-green-box' class='box green rotate-45deg')",
       "position": [-51, 87],
       "bounds": [174, 464],
-      "transform": 8
+      "transform": 4
     }
   ],
   "transforms": [
@@ -183,6 +155,7 @@
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -199,35 +172,6 @@
         [...],
         [...]
       ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt
index a094ea29..9e67b55 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt
@@ -16,14 +16,14 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV class='box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 6
+      "transform": 4
     }
   ],
   "transforms": [
@@ -38,6 +38,7 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [...],
         [...],
@@ -53,31 +54,12 @@
         [...],
         [...],
         [...]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
       ],
       "origin": [50, 50]
     },
     {
-      "id": 5,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "id": 4,
+      "parent": 1,
       "transform": [
         [...],
         [...],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt
index 9bb1609..58cb176 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='green')",
       "position": [-400, 0],
       "bounds": [300, 300],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [400, 0, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [400, 0, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt
index 00003ee0..e8bd8b6 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt
@@ -24,7 +24,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='overlap')",
       "position": [400, 0],
       "bounds": [100, 100],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -45,15 +45,6 @@
         [0, 0, 1, 0],
         [50, 200, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 200, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt
index b6f950e..9621269 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt
@@ -58,7 +58,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top left')",
       "position": [-100, -100],
       "bounds": [300, 300],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -81,15 +81,6 @@
         [0, 0, -1, 1]
       ],
       "origin": [50, 50]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 108, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
index d796fb0..b8d83ba 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
@@ -16,12 +16,12 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='over')",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -33,15 +33,6 @@
         [0, 0, 1, 0],
         [110, 0, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [110, 0, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
index 33171e09..181475f 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
@@ -23,31 +23,31 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-2'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 8
+      "transform": 7
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-3'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 11
+      "transform": 9
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-4'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 14
+      "transform": 11
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-5'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 17
+      "transform": 13
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-6'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 20
+      "transform": 15
     }
   ],
   "transforms": [
@@ -104,26 +104,13 @@
     },
     {
       "id": 6,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
       "id": 7,
       "parent": 6,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
       "transform": [
         [0, 0, -1, 0],
         [0, 1, 0, 0],
@@ -135,27 +122,14 @@
       "renderingContext": 1
     },
     {
+      "id": 8,
+      "parent": 3,
+      "flattenInheritedTransform": false,
+      "renderingContext": 1
+    },
+    {
       "id": 9,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 10,
-      "parent": 9,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 11,
-      "parent": 10,
+      "parent": 8,
       "transform": [
         [-1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -167,27 +141,14 @@
       "renderingContext": 1
     },
     {
-      "id": 12,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 10,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 13,
-      "parent": 12,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 14,
-      "parent": 13,
+      "id": 11,
+      "parent": 10,
       "transform": [
         [0, 0, 1, 0],
         [0, 1, 0, 0],
@@ -199,27 +160,14 @@
       "renderingContext": 1
     },
     {
-      "id": 15,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 12,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 16,
-      "parent": 15,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 17,
-      "parent": 16,
+      "id": 13,
+      "parent": 12,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, 1, 0],
@@ -231,27 +179,14 @@
       "renderingContext": 1
     },
     {
-      "id": 18,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 14,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 19,
-      "parent": 18,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 20,
-      "parent": 19,
+      "id": 15,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, -1, 0],
@@ -284,43 +219,43 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-2'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 8
+      "transform": 7
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-3'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 11
+      "transform": 9
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-4'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 14
+      "transform": 11
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-5'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 17
+      "transform": 13
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='side side-6'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 20
+      "transform": 15
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='box top left'",
       "bounds": [100, 150],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 21
+      "transform": 16
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top right')",
       "bounds": [300, 300],
-      "transform": 22
+      "transform": 16
     }
   ],
   "transforms": [
@@ -377,26 +312,13 @@
     },
     {
       "id": 6,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
       "id": 7,
       "parent": 6,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
       "transform": [
         [0, 0, -1, 0],
         [0, 1, 0, 0],
@@ -408,27 +330,14 @@
       "renderingContext": 1
     },
     {
+      "id": 8,
+      "parent": 3,
+      "flattenInheritedTransform": false,
+      "renderingContext": 1
+    },
+    {
       "id": 9,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 10,
-      "parent": 9,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 11,
-      "parent": 10,
+      "parent": 8,
       "transform": [
         [-1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -440,27 +349,14 @@
       "renderingContext": 1
     },
     {
-      "id": 12,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 10,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 13,
-      "parent": 12,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 14,
-      "parent": 13,
+      "id": 11,
+      "parent": 10,
       "transform": [
         [0, 0, 1, 0],
         [0, 1, 0, 0],
@@ -472,27 +368,14 @@
       "renderingContext": 1
     },
     {
-      "id": 15,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 12,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 16,
-      "parent": 15,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 17,
-      "parent": 16,
+      "id": 13,
+      "parent": 12,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, 1, 0],
@@ -504,27 +387,14 @@
       "renderingContext": 1
     },
     {
-      "id": 18,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 14,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 19,
-      "parent": 18,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 20,
-      "parent": 19,
+      "id": 15,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, -1, 0],
@@ -536,16 +406,7 @@
       "renderingContext": 1
     },
     {
-      "id": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 22,
+      "id": 16,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt
index 1f82171..79387a3 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -31,16 +31,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -49,8 +40,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt
index 0860f19..f2d6c9f 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -26,20 +26,20 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box')",
       "position": [-5, 115],
       "bounds": [110, 110],
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV class='composited box rotate45'",
       "position": [-5, -5],
       "bounds": [110, 110],
       "backgroundColor": "#0000FF",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box')",
       "position": [-5, 115],
       "bounds": [110, 110],
-      "transform": 7
+      "transform": 4
     }
   ],
   "transforms": [
@@ -78,21 +78,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [172, 28, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [316, 28, 0, 1]
       ]
     },
     {
-      "id": 6,
-      "parent": 5,
+      "id": 5,
+      "parent": 4,
       "transform": [
         [0.707106781186548, 0.707106781186548, 0, 0],
         [-0.707106781186548, 0.707106781186548, 0, 0],
@@ -100,15 +91,6 @@
         [0, 0, 0, 1]
       ],
       "origin": [50, 50]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [316, 28, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
index b12766d..dac32d8 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -14,7 +14,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='output')",
       "bounds": [100, 50],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -26,15 +26,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
index 596b8554..e1be4b3 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -16,7 +16,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='squashed')",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [8, 58, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 58, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt
index 7f02d6c..e6697cb 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='container')",
       "position": [0, 10],
       "bounds": [142, 142],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt b/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt
index f0465b3..f8b30f8 100644
--- a/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt
@@ -31,20 +31,20 @@
       "bounds": [100, 150],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 8
+      "transform": 7
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='container'",
       "position": [20, 10],
       "bounds": [60, 70],
-      "transform": 9
+      "transform": 8
     },
     {
       "name": "LayoutNGBlockFlow DIV class='box'",
       "bounds": [100, 150],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 12
+      "transform": 10
     }
   ],
   "transforms": [
@@ -97,11 +97,12 @@
     },
     {
       "id": 6,
+      "parent": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 220, 0, 1]
+        [22, 22, 0, 1]
       ]
     },
     {
@@ -111,40 +112,21 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [22, 22, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [0, 0, 1, 1]
       ]
     },
     {
+      "id": 8,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [220, 220, 0, 1]
+      ]
+    },
+    {
       "id": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [220, 220, 0, 1]
-      ]
-    },
-    {
-      "id": 10,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [220, 220, 0, 1]
-      ]
-    },
-    {
-      "id": 11,
-      "parent": 10,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -153,8 +135,8 @@
       ]
     },
     {
-      "id": 12,
-      "parent": 11,
+      "id": 10,
+      "parent": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
index f0cc730..2c7c1e1 100644
--- a/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -38,7 +38,7 @@
         "GraphicsLayerPaintCompositedScroll",
         "GraphicsLayerPaintDecoration"
       ],
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "Scrolling Contents Layer",
@@ -61,7 +61,7 @@
         "GraphicsLayerPaintMask",
         "GraphicsLayerPaintDecoration"
       ],
-      "transform": 4
+      "transform": 1
     }
   ],
   "transforms": [
@@ -83,24 +83,6 @@
         [0, 0, 1, 0],
         [1, 11, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 20, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 20, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
index fcc9473..61f5db6 100644
--- a/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -14,12 +14,12 @@
     {
       "name": "LayoutNGBlockFlow DIV id='scroller'",
       "bounds": [1200, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1200, 10000],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -31,15 +31,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt b/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt
index b09a1ad..09b8de7 100644
--- a/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [400, 400],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 3
     }
   ],
   "transforms": [
@@ -42,27 +42,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [120, 120]
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt
index cb50b2b..f4ab0315 100644
--- a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt
@@ -23,14 +23,14 @@
       "bounds": [400, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV",
       "bounds": [100, 400],
       "contentsOpaque": true,
       "backgroundColor": "#FF00FF",
-      "transform": 7
+      "transform": 5
     }
   ],
   "transforms": [
@@ -66,27 +66,7 @@
     },
     {
       "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [120, 120]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -95,7 +75,7 @@
       ]
     },
     {
-      "id": 7,
+      "id": 5,
       "parent": 2,
       "transform": [
         [1, 0, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt
index 06963f0b..068676d 100644
--- a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt
@@ -18,14 +18,14 @@
       "bounds": [200, 22],
       "contentsOpaque": true,
       "backgroundColor": "#FFFF00",
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV",
       "bounds": [50, 200],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 6
+      "transform": 2
     }
   ],
   "transforms": [
@@ -48,46 +48,6 @@
         [0, 0, 0, 1]
       ],
       "origin": [150, 50]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [150, 50]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [150, 50]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
index c612a2c..1e08ad8 100644
--- a/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -40,7 +40,7 @@
       "position": [0, 44],
       "bounds": [60, 128],
       "backfaceVisibility": "hidden",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -71,16 +71,6 @@
         [0, 0, 1, 0],
         [5, 5, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [5, 5, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt
index 1334485..77c1859d 100644
--- a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt
@@ -24,94 +24,94 @@
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='outer B'",
       "position": [-21, -21],
       "bounds": [352, 294],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow DIV class='scroller'",
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 5
+      "transform": 4
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV class='content'",
       "bounds": [196, 212],
       "contentsOpaque": true,
       "backgroundColor": "#DDDDDD",
-      "transform": 7
+      "transform": 5
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='outer C'",
       "position": [-21, -21],
       "bounds": [352, 294],
-      "transform": 8
+      "transform": 6
     },
     {
       "name": "LayoutNGBlockFlow DIV class='scroller'",
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 9
+      "transform": 7
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 10
+      "transform": 7
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV class='content'",
       "bounds": [196, 212],
       "contentsOpaque": true,
       "backgroundColor": "#DDDDDD",
-      "transform": 11
+      "transform": 8
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='outer D'",
       "position": [-21, -21],
       "bounds": [352, 294],
-      "transform": 12
+      "transform": 9
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV class='clipper'",
       "position": [-7, -7],
       "bounds": [292, 200],
-      "transform": 13
+      "transform": 10
     },
     {
       "name": "LayoutNGBlockFlow DIV class='scroller'",
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 15
+      "transform": 11
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 17
+      "transform": 11
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV class='content'",
       "bounds": [196, 212],
       "contentsOpaque": true,
       "backgroundColor": "#DDDDDD",
-      "transform": 18
+      "transform": 12
     }
   ],
   "transforms": [
@@ -136,16 +136,6 @@
     },
     {
       "id": 3,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -154,23 +144,32 @@
       ]
     },
     {
+      "id": 4,
+      "parent": 3,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [41, 41, 0, 1]
+      ]
+    },
+    {
       "id": 5,
       "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [41, 41, 0, 1]
+        [17, 17, 0, 1]
       ]
     },
     {
       "id": 6,
-      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [41, 41, 0, 1]
+        [21, 312, 0, 1]
       ]
     },
     {
@@ -180,36 +179,36 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [17, 17, 0, 1]
+        [40, 40, 0, 1]
       ]
     },
     {
       "id": 8,
+      "parent": 7,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [21, 312, 0, 1]
+        [17, 17, 0, 1]
       ]
     },
     {
       "id": 9,
-      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [40, 40, 0, 1]
+        [370, 312, 0, 1]
       ]
     },
     {
       "id": 10,
-      "parent": 8,
+      "parent": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [40, 40, 0, 1]
+        [16, 16, 0, 1]
       ]
     },
     {
@@ -219,71 +218,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [17, 17, 0, 1]
+        [24, 24, 0, 1]
       ]
     },
     {
       "id": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 312, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 15,
-      "parent": 14,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [24, 24, 0, 1]
-      ]
-    },
-    {
-      "id": 16,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 17,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [24, 24, 0, 1]
-      ]
-    },
-    {
-      "id": 18,
-      "parent": 17,
+      "parent": 11,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt
index 3ebf4cfe..965d460 100644
--- a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt
@@ -30,7 +30,7 @@
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "Scrolling Contents Layer",
@@ -69,16 +69,6 @@
         [0, 0, 1, 0],
         [17, 17, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
index 538dd6d..f165bd64 100644
--- a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
@@ -30,7 +30,7 @@
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "Scrolling Contents Layer",
@@ -69,16 +69,6 @@
         [0, 0, 1, 0],
         [17, 17, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
index b7d50ba..3d781d9 100644
--- a/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
+++ b/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -15,67 +15,215 @@
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [85, 144],
-      "scrollPosition": [0, 59],
+      "transform": 2
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 1
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 1
+    },
+    {
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'",
+      "bounds": [75, 24],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 3
     },
     {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')",
+      "position": [0, 56],
+      "bounds": [75, 24],
+      "transform": 3
+    },
+    {
+      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'",
+      "bounds": [104, 104],
+      "transform": 4
+    },
+    {
+      "name": "Scrolling Contents Layer",
+      "position": [2, 2],
+      "bounds": [105, 144],
+      "transform": 5
+    },
+    {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
       "transform": 4
     },
     {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'",
       "bounds": [80, 40],
-      "transform": 5
+      "contentsOpaque": true,
+      "backgroundColor": "#800080",
+      "transform": 6
     },
     {
-      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'",
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')",
+      "position": [-21, -33],
+      "bounds": [75, 80],
+      "transform": 6
+    },
+    {
+      "name": "LayoutNGBlockFlow DIV id='container-absolute-not-contained' class='overflow'",
+      "bounds": [104, 104],
+      "transform": 7
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 7
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 7
+    },
+    {
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 8
+      "transform": 9
     },
     {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')",
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
+      "transform": 9
+    },
+    {
+      "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'",
+      "bounds": [104, 104],
+      "transform": 10
+    },
+    {
+      "name": "Scrolling Contents Layer",
+      "position": [2, 2],
+      "bounds": [85, 144],
       "transform": 11
     },
     {
-      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 10
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 10
+    },
+    {
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'",
+      "bounds": [75, 24],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 12
     },
     {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')",
+      "position": [0, 56],
+      "bounds": [75, 24],
+      "transform": 12
+    },
+    {
+      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'",
+      "bounds": [104, 104],
+      "transform": 13
+    },
+    {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [105, 144],
-      "scrollPosition": [0, 59],
       "transform": 14
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 15
+      "transform": 13
     },
     {
-      "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
+      "transform": 15
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')",
+      "position": [-21, -33],
+      "bounds": [75, 80],
+      "transform": 15
+    },
+    {
+      "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'",
+      "bounds": [104, 104],
+      "transform": 16
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 16
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 16
+    },
+    {
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'",
+      "bounds": [75, 24],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 18
     },
     {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')",
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')",
+      "position": [0, 56],
+      "bounds": [75, 24],
+      "transform": 18
+    },
+    {
+      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'",
+      "bounds": [104, 104],
+      "transform": 19
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 19
+    },
+    {
+      "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'",
+      "bounds": [80, 40],
+      "contentsOpaque": true,
+      "backgroundColor": "#800080",
+      "transform": 21
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')",
       "position": [-21, -33],
       "bounds": [75, 80],
       "transform": 21
     },
     {
-      "name": "LayoutNGBlockFlow DIV id='container-absolute-not-contained' class='overflow'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'",
       "bounds": [104, 104],
       "transform": 22
     },
@@ -83,508 +231,354 @@
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 23
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
-      "bounds": [80, 40],
-      "transform": 24
-    },
-    {
-      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'",
-      "bounds": [75, 24],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 27
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')",
-      "position": [0, 56],
-      "bounds": [75, 24],
-      "transform": 30
-    },
-    {
-      "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'",
-      "bounds": [104, 104],
-      "transform": 31
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [2, 2],
-      "bounds": [85, 144],
-      "scrollPosition": [0, 59],
-      "transform": 33
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 34
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
-      "bounds": [80, 40],
-      "transform": 35
-    },
-    {
-      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'",
-      "bounds": [75, 24],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 38
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')",
-      "position": [0, 56],
-      "bounds": [75, 24],
-      "transform": 41
-    },
-    {
-      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
-      "transform": 42
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [2, 2],
-      "bounds": [105, 144],
-      "scrollPosition": [0, 59],
-      "transform": 44
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 45
-    },
-    {
-      "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'",
-      "bounds": [80, 40],
-      "contentsOpaque": true,
-      "backgroundColor": "#800080",
-      "transform": 48
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')",
-      "position": [-21, -33],
-      "bounds": [75, 80],
-      "transform": 51
-    },
-    {
-      "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'",
-      "bounds": [104, 104],
-      "transform": 52
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 53
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
-      "bounds": [80, 40],
-      "transform": 54
-    },
-    {
-      "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'",
-      "bounds": [75, 24],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 57
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')",
-      "position": [0, 56],
-      "bounds": [75, 24],
-      "transform": 60
-    },
-    {
-      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
-      "transform": 61
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 62
-    },
-    {
-      "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'",
-      "bounds": [80, 40],
-      "contentsOpaque": true,
-      "backgroundColor": "#800080",
-      "transform": 65
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')",
-      "position": [-21, -33],
-      "bounds": [75, 80],
-      "transform": 68
-    },
-    {
-      "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
-      "transform": 69
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 70
+      "transform": 22
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 73
+      "transform": 24
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')",
       "position": [-21, -33],
       "bounds": [75, 80],
-      "transform": 76
+      "transform": 24
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 77
+      "transform": 25
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [85, 144],
-      "scrollPosition": [0, 59],
-      "transform": 79
+      "transform": 26
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 80
+      "transform": 25
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 81
+      "transform": 27
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 84
+      "transform": 28
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 87
+      "transform": 28
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 88
+      "transform": 29
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 89
+      "transform": 29
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 90
+      "transform": 30
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 93
+      "transform": 32
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 96
+      "transform": 32
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 97
+      "transform": 33
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [85, 144],
-      "scrollPosition": [0, 59],
-      "transform": 99
+      "transform": 34
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 100
+      "transform": 33
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 101
+      "transform": 35
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 104
+      "transform": 36
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 107
+      "transform": 36
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 108
+      "transform": 37
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 109
+      "transform": 37
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 110
+      "transform": 38
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 113
+      "transform": 40
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 116
+      "transform": 40
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 117
+      "transform": 41
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 118
+      "transform": 42
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling-not-contained' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 119
+      "transform": 43
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 120
+      "transform": 44
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-fixed-sibling-grandchildren' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 121
+      "transform": 45
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-fixed-sibling' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 122
+      "transform": 46
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 125
+      "transform": 47
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 128
+      "transform": 47
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 131
+      "transform": 48
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 134
+      "transform": 48
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 137
+      "transform": 49
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 140
+      "transform": 49
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 143
+      "transform": 50
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 146
+      "transform": 50
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 149
+      "transform": 51
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 152
+      "transform": 51
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 155
+      "transform": 52
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 158
+      "transform": 52
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 161
+      "transform": 53
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 164
+      "transform": 53
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 167
+      "transform": 54
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 170
+      "transform": 54
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 173
+      "transform": 55
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 176
+      "transform": 55
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 179
+      "transform": 56
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 182
+      "transform": 56
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 185
+      "transform": 57
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 188
+      "transform": 57
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 191
+      "transform": 58
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 194
+      "transform": 58
     }
   ],
   "transforms": [
@@ -599,11 +593,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [10, 10, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
@@ -613,7 +608,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -59, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
@@ -622,30 +617,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [10, 10, 0, 1]
+        [130, 10, 0, 1]
       ]
     },
     {
       "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -654,32 +631,51 @@
       ]
     },
     {
+      "id": 6,
+      "parent": 5,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [27, 67, 0, 1]
+      ]
+    },
+    {
+      "id": 7,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [250, 10, 0, 1]
+      ]
+    },
+    {
       "id": 8,
       "parent": 7,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [6, 34, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
       "id": 9,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [10, 10, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
       "id": 10,
-      "parent": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -59, 0, 1]
+        [370, 10, 0, 1]
       ]
     },
     {
@@ -689,16 +685,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [6, 34, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
       "id": 12,
+      "parent": 11,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
@@ -707,7 +704,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [10, 130, 0, 1]
       ]
     },
     {
@@ -722,11 +719,12 @@
     },
     {
       "id": 15,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [27, 67, 0, 1]
       ]
     },
     {
@@ -735,7 +733,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [130, 130, 0, 1]
       ]
     },
     {
@@ -755,7 +753,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [27, 67, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
@@ -764,7 +762,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [250, 130, 0, 1]
       ]
     },
     {
@@ -793,25 +791,27 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [370, 130, 0, 1]
       ]
     },
     {
       "id": 23,
+      "parent": 22,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
       "id": 24,
+      "parent": 23,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [27, 67, 0, 1]
       ]
     },
     {
@@ -820,7 +820,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [10, 250, 0, 1]
       ]
     },
     {
@@ -835,6 +835,15 @@
     },
     {
       "id": 27,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [35, 315, 0, 1]
+      ]
+    },
+    {
+      "id": 28,
       "parent": 26,
       "transform": [
         [1, 0, 0, 0],
@@ -844,17 +853,26 @@
       ]
     },
     {
-      "id": 28,
+      "id": 29,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [130, 250, 0, 1]
       ]
     },
     {
-      "id": 29,
-      "parent": 28,
+      "id": 30,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [155, 315, 0, 1]
+      ]
+    },
+    {
+      "id": 31,
+      "parent": 29,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -863,8 +881,8 @@
       ]
     },
     {
-      "id": 30,
-      "parent": 29,
+      "id": 32,
+      "parent": 31,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -873,26 +891,17 @@
       ]
     },
     {
-      "id": 31,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 32,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
       "id": 33,
-      "parent": 32,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [250, 250, 0, 1]
+      ]
+    },
+    {
+      "id": 34,
+      "parent": 33,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -901,45 +910,17 @@
       ]
     },
     {
-      "id": 34,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
       "id": 35,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [370, 10, 0, 1]
+        [275, 315, 0, 1]
       ]
     },
     {
       "id": 36,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 37,
-      "parent": 36,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 38,
-      "parent": 37,
+      "parent": 34,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -948,12 +929,31 @@
       ]
     },
     {
-      "id": 39,
+      "id": 37,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [370, 10, 0, 1]
+        [370, 250, 0, 1]
+      ]
+    },
+    {
+      "id": 38,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [395, 315, 0, 1]
+      ]
+    },
+    {
+      "id": 39,
+      "parent": 37,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [0, -59, 0, 1]
       ]
     },
     {
@@ -963,731 +963,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -59, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
       "id": 41,
-      "parent": 40,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 42,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 43,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 44,
-      "parent": 43,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 45,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 46,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 47,
-      "parent": 46,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 48,
-      "parent": 47,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 49,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 50,
-      "parent": 49,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 51,
-      "parent": 50,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 52,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 53,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 54,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 55,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 56,
-      "parent": 55,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 57,
-      "parent": 56,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 58,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 59,
-      "parent": 58,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 60,
-      "parent": 59,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 61,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 62,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 63,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 64,
-      "parent": 63,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 65,
-      "parent": 64,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 66,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 67,
-      "parent": 66,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 68,
-      "parent": 67,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 69,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 70,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 71,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 72,
-      "parent": 71,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 73,
-      "parent": 72,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 74,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 75,
-      "parent": 74,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 76,
-      "parent": 75,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 77,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 78,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 79,
-      "parent": 78,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 80,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 81,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [35, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 82,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 83,
-      "parent": 82,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 84,
-      "parent": 83,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 85,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 86,
-      "parent": 85,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 87,
-      "parent": 86,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 88,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 89,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 90,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [155, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 91,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 92,
-      "parent": 91,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 93,
-      "parent": 92,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 94,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 95,
-      "parent": 94,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 96,
-      "parent": 95,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 97,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 98,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 99,
-      "parent": 98,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 100,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 101,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [275, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 102,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 103,
-      "parent": 102,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 104,
-      "parent": 103,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 105,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 106,
-      "parent": 105,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 107,
-      "parent": 106,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 108,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 109,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 110,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [395, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 111,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 112,
-      "parent": 111,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 113,
-      "parent": 112,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 114,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 115,
-      "parent": 114,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 116,
-      "parent": 115,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 117,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1696,7 +976,7 @@
       ]
     },
     {
-      "id": 118,
+      "id": 42,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1705,7 +985,7 @@
       ]
     },
     {
-      "id": 119,
+      "id": 43,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1714,7 +994,7 @@
       ]
     },
     {
-      "id": 120,
+      "id": 44,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1723,7 +1003,7 @@
       ]
     },
     {
-      "id": 121,
+      "id": 45,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1732,7 +1012,7 @@
       ]
     },
     {
-      "id": 122,
+      "id": 46,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1741,27 +1021,8 @@
       ]
     },
     {
-      "id": 123,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 124,
-      "parent": 123,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 125,
-      "parent": 124,
+      "id": 47,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1770,27 +1031,8 @@
       ]
     },
     {
-      "id": 126,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 127,
-      "parent": 126,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 128,
-      "parent": 127,
+      "id": 48,
+      "parent": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1799,27 +1041,8 @@
       ]
     },
     {
-      "id": 129,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 130,
-      "parent": 129,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 131,
-      "parent": 130,
+      "id": 49,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1828,27 +1051,8 @@
       ]
     },
     {
-      "id": 132,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 133,
-      "parent": 132,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 134,
-      "parent": 133,
+      "id": 50,
+      "parent": 11,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1857,27 +1061,8 @@
       ]
     },
     {
-      "id": 135,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 136,
-      "parent": 135,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 137,
-      "parent": 136,
+      "id": 51,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1886,27 +1071,8 @@
       ]
     },
     {
-      "id": 138,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 139,
-      "parent": 138,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 140,
-      "parent": 139,
+      "id": 52,
+      "parent": 17,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1915,27 +1081,8 @@
       ]
     },
     {
-      "id": 141,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 142,
-      "parent": 141,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 143,
-      "parent": 142,
+      "id": 53,
+      "parent": 20,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1944,27 +1091,8 @@
       ]
     },
     {
-      "id": 144,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 145,
-      "parent": 144,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 146,
-      "parent": 145,
+      "id": 54,
+      "parent": 23,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1973,27 +1101,8 @@
       ]
     },
     {
-      "id": 147,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 148,
-      "parent": 147,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 149,
-      "parent": 148,
+      "id": 55,
+      "parent": 26,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -2002,27 +1111,8 @@
       ]
     },
     {
-      "id": 150,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 151,
-      "parent": 150,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 152,
-      "parent": 151,
+      "id": 56,
+      "parent": 31,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -2031,27 +1121,8 @@
       ]
     },
     {
-      "id": 153,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 154,
-      "parent": 153,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 155,
-      "parent": 154,
+      "id": 57,
+      "parent": 34,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -2060,375 +1131,8 @@
       ]
     },
     {
-      "id": 156,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 157,
-      "parent": 156,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 158,
-      "parent": 157,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 159,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 160,
-      "parent": 159,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 161,
-      "parent": 160,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 162,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 163,
-      "parent": 162,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 164,
-      "parent": 163,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 165,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 166,
-      "parent": 165,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 167,
-      "parent": 166,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 168,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 169,
-      "parent": 168,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 170,
-      "parent": 169,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 171,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 172,
-      "parent": 171,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 173,
-      "parent": 172,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 174,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 175,
-      "parent": 174,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 176,
-      "parent": 175,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 177,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 178,
-      "parent": 177,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 179,
-      "parent": 178,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 180,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 181,
-      "parent": 180,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 182,
-      "parent": 181,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 183,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 184,
-      "parent": 183,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 185,
-      "parent": 184,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 186,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 187,
-      "parent": 186,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 188,
-      "parent": 187,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 189,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 190,
-      "parent": 189,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 191,
-      "parent": 190,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 192,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 193,
-      "parent": 192,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 194,
-      "parent": 193,
+      "id": 58,
+      "parent": 39,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt b/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt
index 558eb2a..abf1b14 100644
--- a/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt
+++ b/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt
@@ -18,14 +18,14 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutNGBlockFlow DIV id='child' class='composited'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 11
+      "transform": 5
     }
   ],
   "transforms": [
@@ -45,59 +45,19 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "parent": 2,
+      "flattenInheritedTransform": false,
+      "renderingContext": 1
     },
     {
       "id": 4,
       "parent": 3,
+      "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
       "id": 5,
       "parent": 4,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "renderingContext": 1
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 10,
-      "parent": 9,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 11,
-      "parent": 10,
       "renderingContext": 2
     }
   ]
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt
index 0cb4e1fb..ec078b6 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [215, 0],
       "transform": 1
     },
     {
@@ -13,7 +12,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -28,16 +27,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [-215, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
index cca0571..dbd39d9 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [1, 0],
       "transform": 1
     },
     {
@@ -13,7 +12,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -28,16 +27,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [-1, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt
index 4cc19c3e..b8820c85 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [215, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
index f3700b77..9c586104 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [1, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
index d2e2d28..a622357 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
index 27d1c50..eae6632c 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
index 43ab9f3..642e7936 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
index 43ab9f3..642e7936 100644
--- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
index d98df46..1dcb86c 100644
--- a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
+++ b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -15,38 +15,37 @@
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [400, 704],
-      "scrollPosition": [0, 304],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='inner'",
       "bounds": [204, 204],
-      "transform": 6
+      "transform": 3
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [5000, 9000],
-      "transform": 9
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='grey'",
       "bounds": [100, 800],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 10
+      "transform": 4
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='spacer')",
       "position": [0, 2000],
       "bounds": [5000, 1000],
-      "transform": 11
+      "transform": 4
     },
     {
       "name": "Scroll Corner Layer",
       "position": [195, 195],
       "bounds": [7, 7],
-      "transform": 14
+      "transform": 3
     }
   ],
   "transforms": [
@@ -61,11 +60,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [0, -304, 0, 1]
       ]
     },
     {
@@ -75,115 +75,18 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -304, 0, 1]
+        [2, 502, 0, 1]
       ]
     },
     {
       "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -304, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 502, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -304, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 502, 0, 1]
-      ]
-    },
-    {
-      "id": 10,
-      "parent": 9,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [2, 2, 0, 1]
       ]
-    },
-    {
-      "id": 11,
-      "parent": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -304, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 502, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt b/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt
index 229f8e85..5e41acd 100644
--- a/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [180, 180],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -72,7 +63,7 @@
           "reason": "chunk appeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -84,15 +75,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -124,7 +106,7 @@
           "reason": "chunk disappeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -136,15 +118,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -181,7 +154,7 @@
           "reason": "paint property change"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -193,15 +166,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -243,7 +207,7 @@
           "reason": "paint property change"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -255,15 +219,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -310,7 +265,7 @@
           "reason": "paint property change"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -322,15 +277,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt b/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
index 5ef5e22..d1fec12 100644
--- a/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
@@ -23,7 +23,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV)",
       "bounds": [285, 1000],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -44,15 +44,6 @@
         [0, 0, 1, 0],
         [108, 100, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt b/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
index c4c7d60d..b3d4b08b5 100644
--- a/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2038],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 300],
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
index 7c2a893..3243f60 100644
--- a/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -16,7 +16,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box')",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [10, 10, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt b/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt
index e5f5d65c..d5d97db 100644
--- a/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt
@@ -26,7 +26,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='squashed')",
       "position": [-92, -92],
       "bounds": [100, 100],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -47,15 +47,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt
index 9f788cad..a89d894a 100644
--- a/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='squashed')",
       "position": [8, -4],
       "bounds": [40, 90],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt b/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt
index 0137ac54..b198560 100644
--- a/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt
@@ -18,7 +18,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top')",
       "position": [80, 80],
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -30,15 +30,6 @@
         [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
     }
   ]
 }
@@ -70,7 +61,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -82,15 +73,6 @@
         [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt
index 0ff4786..ba28f5f3 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt
@@ -29,7 +29,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan')",
       "position": [0, 100],
       "bounds": [200, 300],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -50,15 +50,6 @@
         [0, 0, 1, 0],
         [0, 100, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -71,7 +62,6 @@
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 80],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'",
@@ -105,7 +95,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')",
@@ -118,7 +108,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -142,35 +132,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 200, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -189,7 +151,6 @@
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 120],
       "transform": 1
     },
     {
@@ -204,13 +165,13 @@
       "bounds": [200, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')",
       "position": [0, 100],
       "bounds": [200, 300],
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -234,35 +195,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -120, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 200, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -120, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -281,7 +214,6 @@
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 170],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'",
@@ -315,7 +247,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan')",
@@ -328,7 +260,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -352,35 +284,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -170, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 300, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -170, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt
index 3f007e6..1e21fc95 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt
@@ -52,7 +52,6 @@
       "bounds": [785, 4050],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 80],
       "transform": 1
     },
     {
@@ -74,7 +73,7 @@
       "bounds": [200, 4000],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -89,16 +88,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt
index 624fa02..a51ccb3 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt
@@ -36,7 +36,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -60,16 +60,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -88,7 +79,6 @@
       "bounds": [785, 4100],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 10],
       "transform": 1
     },
     {
@@ -102,21 +92,21 @@
       "bounds": [100, 4000],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='innerFixed'",
       "bounds": [200, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='innerScrolling'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 7
+      "transform": 4
     }
   ],
   "transforms": [
@@ -131,16 +121,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -10, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -149,7 +130,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -158,27 +139,8 @@
       ]
     },
     {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -10, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
+      "id": 4,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -197,7 +159,6 @@
       "bounds": [785, 4100],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 110],
       "transform": 1
     },
     {
@@ -217,14 +178,14 @@
           "reason": "appeared"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='innerFixed'",
       "bounds": [200, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -239,16 +200,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -110, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -257,7 +209,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt
index cfa25e9..537febd 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -72,7 +63,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle2')",
       "position": [80, 80],
       "bounds": [180, 180],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -93,15 +84,6 @@
         [0, 0, 1, 0],
         [180, 180, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [180, 180, 0, 1]
-      ]
     }
   ]
 }
@@ -126,20 +108,20 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='box middle2'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top')",
       "position": [80, 80],
       "bounds": [100, 100],
-      "transform": 4
+      "transform": 2
     }
   ],
   "transforms": [
@@ -158,24 +140,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [260, 260, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [260, 260, 0, 1]
       ]
     }
@@ -202,14 +166,14 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [180, 180],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='box top'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -228,15 +192,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [340, 340, 0, 1]
       ]
     }
@@ -263,7 +218,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -275,15 +230,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt
index d8c45628..ea1a072 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [-85, -85],
       "bounds": [180, 190],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [125, 125, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [125, 125, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt
index 0fd84259..d179a0c 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [-80, -80],
       "bounds": [260, 260],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -40,15 +40,6 @@
         [0, 0, 0, 1]
       ],
       "origin": [50, 50]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt
index d10e43e..0898cd8 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [-80, -80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt
index 7e44115..f84dcb6f 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [-60, -60],
       "bounds": [180, 190],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt
index d1850ad..5f38153f 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [-101, -101],
       "bounds": [281, 281],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt
index 665cf7c..6c11128 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -18,7 +18,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [-101, -101],
       "bounds": [281, 281],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -30,15 +30,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -70,7 +61,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -82,15 +73,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -127,7 +109,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -139,15 +121,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
index 3443df8a..18202b9 100644
--- a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -18,7 +18,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')",
       "position": [-96, -96],
       "bounds": [276, 276],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -30,15 +30,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -70,7 +61,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -82,15 +73,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -127,7 +109,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -139,15 +121,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt b/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
index b5b08a07..bfd80d0 100644
--- a/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt b/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt
index 920898ce..3ee4c4b 100644
--- a/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -72,7 +63,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -84,15 +75,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -129,7 +111,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -141,15 +123,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -186,7 +159,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -198,15 +171,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -243,7 +207,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -255,15 +219,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt b/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
index 9c5ce42..931efa44 100644
--- a/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
+++ b/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
@@ -17,20 +17,20 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [10, 10],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='B' class='overlap2'",
       "bounds": [10, 10],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='C' class='overlap3')",
       "position": [0, 80],
       "bounds": [25, 10],
-      "transform": 4
+      "transform": 2
     }
   ],
   "transforms": [
@@ -49,24 +49,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [220, 220, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [220, 220, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt b/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt
index 34e644c..0db1d7b 100644
--- a/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt
+++ b/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt
@@ -31,7 +31,7 @@
         "GraphicsLayerPaintOverflowContents",
         "GraphicsLayerPaintCompositedScroll"
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
@@ -43,7 +43,7 @@
         "GraphicsLayerPaintMask",
         "GraphicsLayerPaintDecoration"
       ],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -55,24 +55,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt
index e55a5b99..efc7b90 100644
--- a/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt
+++ b/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -31,16 +31,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -49,8 +40,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
index 232ae7d..5789f216 100644
--- a/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
+++ b/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -15,7 +15,7 @@
       "name": "LayoutNGBlockFlow DIV id='content'",
       "bounds": [285, 1000],
       "contentsOpaque": true,
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -27,15 +27,6 @@
         [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt
index 48d6e35..74b03a5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2513],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
index 086c286..1f45360 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='software')",
       "position": [-105, -105],
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [105, 105, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [105, 105, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt
index bb56e9f..b2f373fb 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='layer-A')",
       "position": [12, 7],
       "bounds": [226, 180],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [8, 13, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 13, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
index fc7c633b..d2cc91c 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -19,14 +19,14 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow PRE id='layers')",
       "position": [0, -250],
       "bounds": [792, 100],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='indicator box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -47,15 +47,6 @@
         [0, 0, 1, 0],
         [0, 250, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 250, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt
index 6bea270..d256c36 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 9
+      "transform": 6
     }
   ],
   "transforms": [
@@ -76,42 +76,7 @@
     },
     {
       "id": 5,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.002],
-        [0, 0, 0, 1]
-      ],
-      "origin": [152, 152]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [12, 12, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [0.766044443118978, -0.556670399226419, -0.32139380484327, 0],
-        [0, 0.5, -0.866025403784439, 0],
-        [0.642787609686539, 0.663413948168938, 0.383022221559489, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [140, 140],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -122,8 +87,8 @@
       "renderingContext": 1
     },
     {
-      "id": 9,
-      "parent": 8,
+      "id": 6,
+      "parent": 5,
       "transform": [
         [0.766044443118978, 0, 0.642787609686539, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt
index 41da0a6..946cba0 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt
@@ -14,53 +14,53 @@
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 6
+      "transform": 3
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 8
+      "transform": 4
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 11
+      "transform": 5
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [284, 204],
-      "transform": 12
+      "transform": 6
     },
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
-      "transform": 14
+      "transform": 7
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 17
+      "transform": 8
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 19
+      "transform": 9
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 22
+      "transform": 10
     },
     {
       "name": "LayoutBlockFlow DIV id='box' class='composited'",
@@ -81,11 +81,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 120, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -95,16 +96,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 120, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
@@ -114,27 +116,26 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [18, 10, 0, 1]
       ]
     },
     {
       "id": 6,
-      "parent": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [20, 344, 0, 1]
       ]
     },
     {
       "id": 7,
-      "parent": 5,
+      "parent": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -144,17 +145,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [1, 1, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
       "id": 9,
-      "parent": 5,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
@@ -164,123 +165,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 11,
-      "parent": 10,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 344, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 344, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 15,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 344, 0, 1]
-      ]
-    },
-    {
-      "id": 16,
-      "parent": 15,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 17,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 18,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 19,
-      "parent": 18,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 20,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 21,
-      "parent": 20,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 22,
-      "parent": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt
index 11afe43a..33989de 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -15,20 +15,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [305, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='overlay'",
       "bounds": [150, 150],
       "backgroundColor": "#00000099",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -43,11 +43,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [58, 58, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -57,21 +58,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
index 29f5c5b..17c62a5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -18,21 +18,21 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow DIV id='box' class='composited'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -47,11 +47,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 128, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -61,21 +62,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt
index fea2ced..09468b1 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -16,20 +16,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow DIV id='test' class='composited box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -44,11 +44,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -58,21 +59,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt
index 2e1e54f..571379b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt
@@ -16,20 +16,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [385, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -44,11 +44,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -58,21 +59,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt
index 68828f7..0046676 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -15,20 +15,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -43,11 +43,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -57,21 +58,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt
index 9c44cc4..25ca3e982 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -15,32 +15,32 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [285, 193],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 9
+      "transform": 5
     },
     {
       "name": "LayoutBlockFlow DIV class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 11
+      "transform": 7
     }
   ],
   "transforms": [
@@ -55,11 +55,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -69,7 +70,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
@@ -79,52 +80,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
       "id": 5,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -133,7 +94,7 @@
       ]
     },
     {
-      "id": 10,
+      "id": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -142,8 +103,8 @@
       ]
     },
     {
-      "id": 11,
-      "parent": 10,
+      "id": 7,
+      "parent": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt
index 415c20d..4beda0e 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt
@@ -16,20 +16,20 @@
       "name": "Scrolling Contents Layer",
       "bounds": [285, 230],
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -44,11 +44,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -58,21 +59,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [18, 10, 0, 1]
       ]
     },
     {
-      "id": 5,
+      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt
index 637662e8..39b22448 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt
@@ -21,12 +21,12 @@
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame (positioned) IFRAME id='overlap'",
       "bounds": [304, 304],
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -41,16 +41,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -59,7 +50,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt
index fd6155e9..d3115742 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -5,64 +5,63 @@
       "bounds": [785, 1650],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [284, 204],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
+      "transform": 3
+    },
+    {
+      "name": "LayoutIFrame IFRAME",
+      "bounds": [252, 172],
+      "transform": 4
+    },
+    {
+      "name": "LayoutView #document",
+      "bounds": [250, 170],
+      "backgroundColor": "#C0C0C0",
+      "transform": 5
+    },
+    {
+      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "bounds": [210, 210],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 6
     },
     {
       "name": "LayoutIFrame IFRAME",
-      "bounds": [252, 172],
-      "transform": 10
-    },
-    {
-      "name": "LayoutView #document",
-      "bounds": [250, 170],
-      "backgroundColor": "#C0C0C0",
-      "transform": 12
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
-      "bounds": [210, 210],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 15
-    },
-    {
-      "name": "LayoutIFrame IFRAME",
       "bounds": [284, 204],
-      "transform": 17
+      "transform": 7
     },
     {
       "name": "LayoutView #document",
       "bounds": [280, 200],
-      "transform": 20
+      "transform": 8
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 24
+      "transform": 9
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 26
+      "transform": 10
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 29
+      "transform": 11
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='banner'",
@@ -82,11 +81,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [20, 150, 0, 1]
       ]
     },
     {
@@ -96,16 +96,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 150, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
@@ -115,7 +116,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 150, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
@@ -125,16 +126,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [18, 10, 0, 1]
       ]
     },
     {
       "id": 7,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [20, 374, 0, 1]
       ]
     },
     {
@@ -144,7 +146,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [20, 150, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -154,7 +156,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
@@ -164,189 +166,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
       "id": 11,
-      "parent": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 12,
-      "parent": 11,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "parent": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 15,
-      "parent": 14,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 17,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 374, 0, 1]
-      ]
-    },
-    {
-      "id": 18,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 19,
-      "parent": 18,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 374, 0, 1]
-      ]
-    },
-    {
-      "id": 20,
-      "parent": 19,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 22,
-      "parent": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 374, 0, 1]
-      ]
-    },
-    {
-      "id": 23,
-      "parent": 22,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 24,
-      "parent": 23,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 25,
-      "parent": 23,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 26,
-      "parent": 25,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 27,
-      "parent": 23,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 28,
-      "parent": 27,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 29,
-      "parent": 28,
+      "parent": 10,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt
index 7f06c8d6..cf9a651 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt
@@ -16,27 +16,26 @@
       "name": "Scrolling Contents Layer",
       "bounds": [508, 608],
       "backgroundColor": "#C0C0C0",
-      "scrollPosition": [80, 80],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 4
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 135],
       "bounds": [15, 15],
-      "transform": 7
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
       "bounds": [50, 50],
       "backgroundColor": "#00000033",
-      "transform": 8
+      "transform": 5
     }
   ],
   "transforms": [
@@ -51,11 +50,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -65,7 +65,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
+        [-80, -80, 0, 1]
       ]
     },
     {
@@ -75,40 +75,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [-80, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [108, 100, 0, 1]
       ]
     },
     {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 28, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [15, 15, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
+      "id": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt
index 1a95e47..1cbef7e 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -19,20 +19,20 @@
       "bounds": [250, 50],
       "contentsOpaque": true,
       "backgroundColor": "#C0C0C0",
-      "transform": 5
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='test1 box')",
       "position": [5, 15],
       "bounds": [100, 100],
-      "transform": 8
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 9
+      "transform": 4
     }
   ],
   "transforms": [
@@ -57,64 +57,16 @@
     },
     {
       "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [6, 6, 0, 1]
       ]
     },
     {
       "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt
index bc889f4a..d9e52fe 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 5021],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
index db0cad5..ee1d2b9 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
@@ -14,14 +14,14 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [785, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='yellow fixed'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FFFF00",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -40,15 +40,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 13, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [200, 13, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
index 2d409f0..6f84788 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -17,20 +17,20 @@
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [285, 800],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [286, 286],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 4
+      "transform": 2
     }
   ],
   "transforms": [
@@ -49,24 +49,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 72, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 72, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [10, 100, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
index 2c7ecde..3ab39dc 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -52,7 +52,6 @@
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 10],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
index 0f44b85..adaafdb 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
@@ -6,7 +6,6 @@
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [100, 100],
       "transform": 2
     },
     {
@@ -118,7 +117,6 @@
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [100, 100],
       "transform": 2
     },
     {
@@ -230,7 +228,6 @@
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [100, 100],
       "transform": 2
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt
index f0937590..5d3e9d5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt
@@ -5,14 +5,13 @@
       "bounds": [785, 5021],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "transform": 1
     },
     {
       "name": "LayoutBlockFlow DIV id='transform'",
       "position": [100, 100],
       "bounds": [256, 256],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='overlap'",
@@ -33,16 +32,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -1000, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -51,8 +41,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
index a5b9d4d..02fc149 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -19,7 +19,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#C0C0C0",
-      "transform": 6
+      "transform": 4
     }
   ],
   "transforms": [
@@ -39,21 +39,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 394, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "renderingContext": 1
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -64,8 +50,8 @@
       "renderingContext": 1
     },
     {
-      "id": 6,
-      "parent": 5,
+      "id": 4,
+      "parent": 3,
       "transform": [
         [0.984807753012208, 0, -0.17364817766693, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt
index 8791d848..0974a19 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt
@@ -23,7 +23,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')",
       "position": [0, 155],
       "bounds": [210, 100],
-      "transform": 7
+      "transform": 4
     }
   ],
   "transforms": [
@@ -64,35 +64,6 @@
         [0, 0, 1, 0],
         [23, 58, 0, 1]
       ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 20, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -49, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [23, 58, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt
index 4faaa53..e5c40a4 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt
@@ -25,28 +25,28 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate2' class='box animating2'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
+      "transform": 7
+    },
+    {
+      "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'",
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFF00",
+      "transform": 8
+    },
+    {
+      "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'",
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFF00",
       "transform": 9
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'",
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFF00",
-      "transform": 11
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'",
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFF00",
-      "transform": 12
     }
   ],
   "transforms": [
@@ -80,6 +80,7 @@
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -99,7 +100,7 @@
     },
     {
       "id": 6,
-      "parent": 5,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -109,6 +110,7 @@
     },
     {
       "id": 7,
+      "parent": 6,
       "transform": [
         [...],
         [...],
@@ -118,7 +120,7 @@
     },
     {
       "id": 8,
-      "parent": 7,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -128,35 +130,6 @@
     },
     {
       "id": 9,
-      "parent": 8,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 10,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 11,
-      "parent": 10,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 12,
       "transform": [
         [...],
         [...],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt
index 47a9859..70a3e0a6 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt
@@ -26,13 +26,13 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box yellow')",
       "position": [-51, 451],
       "bounds": [100, 100],
-      "transform": 8
+      "transform": 4
     }
   ],
   "transforms": [
@@ -66,6 +66,7 @@
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -82,35 +83,6 @@
         [...],
         [...]
       ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
     }
   ]
 }
@@ -143,13 +115,13 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='first-green-box' class='box green rotate-45deg')",
       "position": [-51, 87],
       "bounds": [174, 464],
-      "transform": 8
+      "transform": 4
     }
   ],
   "transforms": [
@@ -183,6 +155,7 @@
     },
     {
       "id": 4,
+      "parent": 3,
       "transform": [
         [...],
         [...],
@@ -199,35 +172,6 @@
         [...],
         [...]
       ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt
index 1ff7e99..4cd23d21 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt
@@ -16,14 +16,14 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 6
+      "transform": 4
     }
   ],
   "transforms": [
@@ -38,6 +38,7 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [...],
         [...],
@@ -53,31 +54,12 @@
         [...],
         [...],
         [...]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
       ],
       "origin": [50, 50]
     },
     {
-      "id": 5,
-      "transform": [
-        [...],
-        [...],
-        [...],
-        [...]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "id": 4,
+      "parent": 1,
       "transform": [
         [...],
         [...],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt
index e0097cd..69f7a6fb 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='green')",
       "position": [-400, 0],
       "bounds": [300, 300],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [400, 0, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [400, 0, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt
index a2c11a7e..9b99b9c 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt
@@ -24,7 +24,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='overlap')",
       "position": [400, 0],
       "bounds": [100, 100],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -45,15 +45,6 @@
         [0, 0, 1, 0],
         [50, 200, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 200, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt
index 92b0cbe..d70e370 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt
@@ -58,7 +58,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top left')",
       "position": [-100, -100],
       "bounds": [300, 300],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -81,15 +81,6 @@
         [0, 0, -1, 1]
       ],
       "origin": [50, 50]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 108, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
index 84cb6c1..f498850 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
@@ -16,12 +16,12 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='over')",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -33,15 +33,6 @@
         [0, 0, 1, 0],
         [110, 0, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [110, 0, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
index e7abc34..999add8 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
@@ -23,31 +23,31 @@
       "name": "LayoutBlockFlow (positioned) DIV class='side side-2'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 8
+      "transform": 7
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-3'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 11
+      "transform": 9
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-4'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 14
+      "transform": 11
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-5'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 17
+      "transform": 13
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-6'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 20
+      "transform": 15
     }
   ],
   "transforms": [
@@ -104,26 +104,13 @@
     },
     {
       "id": 6,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
       "id": 7,
       "parent": 6,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
       "transform": [
         [0, 0, -1, 0],
         [0, 1, 0, 0],
@@ -135,27 +122,14 @@
       "renderingContext": 1
     },
     {
+      "id": 8,
+      "parent": 3,
+      "flattenInheritedTransform": false,
+      "renderingContext": 1
+    },
+    {
       "id": 9,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 10,
-      "parent": 9,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 11,
-      "parent": 10,
+      "parent": 8,
       "transform": [
         [-1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -167,27 +141,14 @@
       "renderingContext": 1
     },
     {
-      "id": 12,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 10,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 13,
-      "parent": 12,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 14,
-      "parent": 13,
+      "id": 11,
+      "parent": 10,
       "transform": [
         [0, 0, 1, 0],
         [0, 1, 0, 0],
@@ -199,27 +160,14 @@
       "renderingContext": 1
     },
     {
-      "id": 15,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 12,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 16,
-      "parent": 15,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 17,
-      "parent": 16,
+      "id": 13,
+      "parent": 12,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, 1, 0],
@@ -231,27 +179,14 @@
       "renderingContext": 1
     },
     {
-      "id": 18,
-      "parent": 2,
-      "transform": [
-        [0.353553390593274, 0.25, -0.5, 0],
-        [0, 0.353553390593274, 0.707106781186548, 0],
-        [0.353553390593274, -0.25, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 14,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 19,
-      "parent": 18,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 20,
-      "parent": 19,
+      "id": 15,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, -1, 0],
@@ -284,43 +219,43 @@
       "name": "LayoutBlockFlow (positioned) DIV class='side side-2'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 8
+      "transform": 7
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-3'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 11
+      "transform": 9
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-4'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 14
+      "transform": 11
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-5'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 17
+      "transform": 13
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='side side-6'",
       "bounds": [100, 100],
       "backgroundColor": "#00FF00CC",
-      "transform": 20
+      "transform": 15
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='box top left'",
       "bounds": [100, 150],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 21
+      "transform": 16
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top right')",
       "bounds": [300, 300],
-      "transform": 22
+      "transform": 16
     }
   ],
   "transforms": [
@@ -377,26 +312,13 @@
     },
     {
       "id": 6,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
       "id": 7,
       "parent": 6,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
       "transform": [
         [0, 0, -1, 0],
         [0, 1, 0, 0],
@@ -408,27 +330,14 @@
       "renderingContext": 1
     },
     {
+      "id": 8,
+      "parent": 3,
+      "flattenInheritedTransform": false,
+      "renderingContext": 1
+    },
+    {
       "id": 9,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 10,
-      "parent": 9,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 11,
-      "parent": 10,
+      "parent": 8,
       "transform": [
         [-1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -440,27 +349,14 @@
       "renderingContext": 1
     },
     {
-      "id": 12,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 10,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 13,
-      "parent": 12,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 14,
-      "parent": 13,
+      "id": 11,
+      "parent": 10,
       "transform": [
         [0, 0, 1, 0],
         [0, 1, 0, 0],
@@ -472,27 +368,14 @@
       "renderingContext": 1
     },
     {
-      "id": 15,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 12,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 16,
-      "parent": 15,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 17,
-      "parent": 16,
+      "id": 13,
+      "parent": 12,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, 1, 0],
@@ -504,27 +387,14 @@
       "renderingContext": 1
     },
     {
-      "id": 18,
-      "parent": 2,
-      "transform": [
-        [0.707106781186548, 0.5, -0.5, 0],
-        [0, 0.707106781186548, 0.707106781186548, 0],
-        [0.707106781186548, -0.5, 0.5, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [50, 50],
+      "id": 14,
+      "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
-      "id": 19,
-      "parent": 18,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 20,
-      "parent": 19,
+      "id": 15,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 0, -1, 0],
@@ -536,16 +406,7 @@
       "renderingContext": 1
     },
     {
-      "id": 21,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 22,
+      "id": 16,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt
index 4df263c..cc967ec 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -31,16 +31,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -49,8 +40,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt
index 0444493..bf7309d 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -26,20 +26,20 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')",
       "position": [-5, 115],
       "bounds": [110, 110],
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate45'",
       "position": [-5, -5],
       "bounds": [110, 110],
       "backgroundColor": "#0000FF",
-      "transform": 6
+      "transform": 5
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')",
       "position": [-5, 115],
       "bounds": [110, 110],
-      "transform": 7
+      "transform": 4
     }
   ],
   "transforms": [
@@ -78,21 +78,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [172, 28, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [316, 28, 0, 1]
       ]
     },
     {
-      "id": 6,
-      "parent": 5,
+      "id": 5,
+      "parent": 4,
       "transform": [
         [0.707106781186548, 0.707106781186548, 0, 0],
         [-0.707106781186548, 0.707106781186548, 0, 0],
@@ -100,15 +91,6 @@
         [0, 0, 0, 1]
       ],
       "origin": [50, 50]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [316, 28, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt
index 4d2d52cb..12b80e89 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -14,7 +14,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='output')",
       "bounds": [100, 50],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -26,15 +26,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
index 092b880..d13b85f1 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -16,7 +16,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [8, 58, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 58, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt
index e493af69..19552ad1 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='container')",
       "position": [0, 10],
       "bounds": [142, 142],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt
index e282df8..51cba51 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt
@@ -31,20 +31,20 @@
       "bounds": [100, 150],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 8
+      "transform": 7
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='container'",
       "position": [20, 10],
       "bounds": [60, 70],
-      "transform": 9
+      "transform": 8
     },
     {
       "name": "LayoutBlockFlow DIV class='box'",
       "bounds": [100, 150],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 12
+      "transform": 10
     }
   ],
   "transforms": [
@@ -97,11 +97,12 @@
     },
     {
       "id": 6,
+      "parent": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 220, 0, 1]
+        [22, 22, 0, 1]
       ]
     },
     {
@@ -111,40 +112,21 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [22, 22, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [0, 0, 1, 1]
       ]
     },
     {
+      "id": 8,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [220, 220, 0, 1]
+      ]
+    },
+    {
       "id": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [220, 220, 0, 1]
-      ]
-    },
-    {
-      "id": 10,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [220, 220, 0, 1]
-      ]
-    },
-    {
-      "id": 11,
-      "parent": 10,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -153,8 +135,8 @@
       ]
     },
     {
-      "id": 12,
-      "parent": 11,
+      "id": 10,
+      "parent": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt
index 87ba463..f395ca3 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -38,7 +38,7 @@
         "GraphicsLayerPaintCompositedScroll",
         "GraphicsLayerPaintDecoration"
       ],
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "Scrolling Contents Layer",
@@ -61,7 +61,7 @@
         "GraphicsLayerPaintMask",
         "GraphicsLayerPaintDecoration"
       ],
-      "transform": 4
+      "transform": 1
     }
   ],
   "transforms": [
@@ -83,24 +83,6 @@
         [0, 0, 1, 0],
         [1, 11, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 20, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 20, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
index dc875d5..9ae1786 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -14,12 +14,12 @@
     {
       "name": "LayoutBlockFlow DIV id='scroller'",
       "bounds": [1200, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1200, 10000],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -31,15 +31,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt
index 1a068196..9b6fb5bc 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [400, 400],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 3
     }
   ],
   "transforms": [
@@ -42,27 +42,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [120, 120]
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
index b3615cd..92b63cc 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -40,7 +40,7 @@
       "position": [0, 44],
       "bounds": [60, 128],
       "backfaceVisibility": "hidden",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -71,16 +71,6 @@
         [0, 0, 1, 0],
         [5, 5, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [5, 5, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt
index 65e7e38..2b75c2a 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt
@@ -24,94 +24,94 @@
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='outer B'",
       "position": [-21, -21],
       "bounds": [352, 294],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow DIV class='scroller'",
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 5
+      "transform": 4
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV class='content'",
       "bounds": [196, 212],
       "contentsOpaque": true,
       "backgroundColor": "#DDDDDD",
-      "transform": 7
+      "transform": 5
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='outer C'",
       "position": [-21, -21],
       "bounds": [352, 294],
-      "transform": 8
+      "transform": 6
     },
     {
       "name": "LayoutBlockFlow DIV class='scroller'",
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 9
+      "transform": 7
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 10
+      "transform": 7
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV class='content'",
       "bounds": [196, 212],
       "contentsOpaque": true,
       "backgroundColor": "#DDDDDD",
-      "transform": 11
+      "transform": 8
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='outer D'",
       "position": [-21, -21],
       "bounds": [352, 294],
-      "transform": 12
+      "transform": 9
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV class='clipper'",
       "position": [-7, -7],
       "bounds": [292, 200],
-      "transform": 13
+      "transform": 10
     },
     {
       "name": "LayoutBlockFlow DIV class='scroller'",
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 15
+      "transform": 11
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [5, 5],
       "bounds": [220, 236],
       "backgroundColor": "#FFFFFF",
-      "transform": 17
+      "transform": 11
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV class='content'",
       "bounds": [196, 212],
       "contentsOpaque": true,
       "backgroundColor": "#DDDDDD",
-      "transform": 18
+      "transform": 12
     }
   ],
   "transforms": [
@@ -136,16 +136,6 @@
     },
     {
       "id": 3,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -154,23 +144,32 @@
       ]
     },
     {
+      "id": 4,
+      "parent": 3,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [41, 41, 0, 1]
+      ]
+    },
+    {
       "id": 5,
       "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [41, 41, 0, 1]
+        [17, 17, 0, 1]
       ]
     },
     {
       "id": 6,
-      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [41, 41, 0, 1]
+        [21, 312, 0, 1]
       ]
     },
     {
@@ -180,36 +179,36 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [17, 17, 0, 1]
+        [40, 40, 0, 1]
       ]
     },
     {
       "id": 8,
+      "parent": 7,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [21, 312, 0, 1]
+        [17, 17, 0, 1]
       ]
     },
     {
       "id": 9,
-      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [40, 40, 0, 1]
+        [370, 312, 0, 1]
       ]
     },
     {
       "id": 10,
-      "parent": 8,
+      "parent": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [40, 40, 0, 1]
+        [16, 16, 0, 1]
       ]
     },
     {
@@ -219,71 +218,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [17, 17, 0, 1]
+        [24, 24, 0, 1]
       ]
     },
     {
       "id": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 312, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 15,
-      "parent": 14,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [24, 24, 0, 1]
-      ]
-    },
-    {
-      "id": 16,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 17,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [24, 24, 0, 1]
-      ]
-    },
-    {
-      "id": 18,
-      "parent": 17,
+      "parent": 11,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
index 6d42fdf..508ee8b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
@@ -30,7 +30,7 @@
       "position": [-30, -30],
       "bounds": [290, 230],
       "backgroundColor": "#FFFFFF",
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "Scrolling Contents Layer",
@@ -69,16 +69,6 @@
         [0, 0, 1, 0],
         [17, 17, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
index eaa0c48b..eec7ca7 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -15,67 +15,215 @@
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [85, 144],
-      "scrollPosition": [0, 59],
+      "transform": 2
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 1
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 1
+    },
+    {
+      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'",
+      "bounds": [75, 24],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 3
     },
     {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')",
+      "position": [0, 56],
+      "bounds": [75, 24],
+      "transform": 3
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'",
+      "bounds": [104, 104],
+      "transform": 4
+    },
+    {
+      "name": "Scrolling Contents Layer",
+      "position": [2, 2],
+      "bounds": [105, 144],
+      "transform": 5
+    },
+    {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
       "transform": 4
     },
     {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
+      "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'",
       "bounds": [80, 40],
-      "transform": 5
+      "contentsOpaque": true,
+      "backgroundColor": "#800080",
+      "transform": 6
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'",
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')",
+      "position": [-21, -33],
+      "bounds": [75, 80],
+      "transform": 6
+    },
+    {
+      "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'",
+      "bounds": [104, 104],
+      "transform": 7
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 7
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 7
+    },
+    {
+      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 8
+      "transform": 9
     },
     {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')",
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
+      "transform": 9
+    },
+    {
+      "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'",
+      "bounds": [104, 104],
+      "transform": 10
+    },
+    {
+      "name": "Scrolling Contents Layer",
+      "position": [2, 2],
+      "bounds": [85, 144],
       "transform": 11
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 10
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 10
+    },
+    {
+      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'",
+      "bounds": [75, 24],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 12
     },
     {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')",
+      "position": [0, 56],
+      "bounds": [75, 24],
+      "transform": 12
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'",
+      "bounds": [104, 104],
+      "transform": 13
+    },
+    {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [105, 144],
-      "scrollPosition": [0, 59],
       "transform": 14
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 15
+      "transform": 13
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'",
+      "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
+      "transform": 15
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')",
+      "position": [-21, -33],
+      "bounds": [75, 80],
+      "transform": 15
+    },
+    {
+      "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'",
+      "bounds": [104, 104],
+      "transform": 16
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 16
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')",
+      "position": [25, 65],
+      "bounds": [80, 40],
+      "transform": 16
+    },
+    {
+      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'",
+      "bounds": [75, 24],
+      "contentsOpaque": true,
+      "backgroundColor": "#0000FF",
       "transform": 18
     },
     {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')",
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')",
+      "position": [0, 56],
+      "bounds": [75, 24],
+      "transform": 18
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'",
+      "bounds": [104, 104],
+      "transform": 19
+    },
+    {
+      "name": "Scroll Corner Layer",
+      "position": [87, 87],
+      "bounds": [15, 15],
+      "transform": 19
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'",
+      "bounds": [80, 40],
+      "contentsOpaque": true,
+      "backgroundColor": "#800080",
+      "transform": 21
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')",
       "position": [-21, -33],
       "bounds": [75, 80],
       "transform": 21
     },
     {
-      "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'",
+      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'",
       "bounds": [104, 104],
       "transform": 22
     },
@@ -83,508 +231,354 @@
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 23
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
-      "bounds": [80, 40],
-      "transform": 24
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'",
-      "bounds": [75, 24],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 27
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')",
-      "position": [0, 56],
-      "bounds": [75, 24],
-      "transform": 30
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'",
-      "bounds": [104, 104],
-      "transform": 31
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [2, 2],
-      "bounds": [85, 144],
-      "scrollPosition": [0, 59],
-      "transform": 33
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 34
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
-      "bounds": [80, 40],
-      "transform": 35
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'",
-      "bounds": [75, 24],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 38
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')",
-      "position": [0, 56],
-      "bounds": [75, 24],
-      "transform": 41
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
-      "transform": 42
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [2, 2],
-      "bounds": [105, 144],
-      "scrollPosition": [0, 59],
-      "transform": 44
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 45
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'",
-      "bounds": [80, 40],
-      "contentsOpaque": true,
-      "backgroundColor": "#800080",
-      "transform": 48
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')",
-      "position": [-21, -33],
-      "bounds": [75, 80],
-      "transform": 51
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'",
-      "bounds": [104, 104],
-      "transform": 52
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 53
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')",
-      "position": [25, 65],
-      "bounds": [80, 40],
-      "transform": 54
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'",
-      "bounds": [75, 24],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 57
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')",
-      "position": [0, 56],
-      "bounds": [75, 24],
-      "transform": 60
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
-      "transform": 61
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 62
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'",
-      "bounds": [80, 40],
-      "contentsOpaque": true,
-      "backgroundColor": "#800080",
-      "transform": 65
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')",
-      "position": [-21, -33],
-      "bounds": [75, 80],
-      "transform": 68
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'",
-      "bounds": [104, 104],
-      "transform": 69
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [87, 87],
-      "bounds": [15, 15],
-      "transform": 70
+      "transform": 22
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 73
+      "transform": 24
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')",
       "position": [-21, -33],
       "bounds": [75, 80],
-      "transform": 76
+      "transform": 24
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 77
+      "transform": 25
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [85, 144],
-      "scrollPosition": [0, 59],
-      "transform": 79
+      "transform": 26
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 80
+      "transform": 25
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 81
+      "transform": 27
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 84
+      "transform": 28
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 87
+      "transform": 28
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 88
+      "transform": 29
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 89
+      "transform": 29
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 90
+      "transform": 30
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 93
+      "transform": 32
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 96
+      "transform": 32
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 97
+      "transform": 33
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [85, 144],
-      "scrollPosition": [0, 59],
-      "transform": 99
+      "transform": 34
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 100
+      "transform": 33
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 101
+      "transform": 35
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 104
+      "transform": 36
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 107
+      "transform": 36
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'",
       "bounds": [104, 104],
-      "transform": 108
+      "transform": 37
     },
     {
       "name": "Scroll Corner Layer",
       "position": [87, 87],
       "bounds": [15, 15],
-      "transform": 109
+      "transform": 37
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'",
       "bounds": [80, 40],
       "contentsOpaque": true,
       "backgroundColor": "#800080",
-      "transform": 110
+      "transform": 38
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 113
+      "transform": 40
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')",
       "position": [0, 56],
       "bounds": [75, 24],
-      "transform": 116
+      "transform": 40
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 117
+      "transform": 41
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 118
+      "transform": 42
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-not-contained' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 119
+      "transform": 43
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 120
+      "transform": 44
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling-grandchildren' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 121
+      "transform": 45
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling' class='positionFixed sibling'",
       "bounds": [50, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 122
+      "transform": 46
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 125
+      "transform": 47
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 128
+      "transform": 47
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 131
+      "transform": 48
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 134
+      "transform": 48
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 137
+      "transform": 49
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 140
+      "transform": 49
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 143
+      "transform": 50
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 146
+      "transform": 50
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 149
+      "transform": 51
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 152
+      "transform": 51
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 155
+      "transform": 52
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 158
+      "transform": 52
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 161
+      "transform": 53
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 164
+      "transform": 53
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 167
+      "transform": 54
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 170
+      "transform": 54
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 173
+      "transform": 55
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 176
+      "transform": 55
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 179
+      "transform": 56
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 182
+      "transform": 56
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 185
+      "transform": 57
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 188
+      "transform": 57
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'",
       "bounds": [75, 24],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 191
+      "transform": 58
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')",
       "position": [0, 56],
       "bounds": [75, 80],
-      "transform": 194
+      "transform": 58
     }
   ],
   "transforms": [
@@ -599,11 +593,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [10, 10, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
@@ -613,7 +608,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -59, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
@@ -622,30 +617,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [10, 10, 0, 1]
+        [130, 10, 0, 1]
       ]
     },
     {
       "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -654,32 +631,51 @@
       ]
     },
     {
+      "id": 6,
+      "parent": 5,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [27, 67, 0, 1]
+      ]
+    },
+    {
+      "id": 7,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [250, 10, 0, 1]
+      ]
+    },
+    {
       "id": 8,
       "parent": 7,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [6, 34, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
       "id": 9,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [10, 10, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
       "id": 10,
-      "parent": 9,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -59, 0, 1]
+        [370, 10, 0, 1]
       ]
     },
     {
@@ -689,16 +685,17 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [6, 34, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
       "id": 12,
+      "parent": 11,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
@@ -707,7 +704,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [10, 130, 0, 1]
       ]
     },
     {
@@ -722,11 +719,12 @@
     },
     {
       "id": 15,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [27, 67, 0, 1]
       ]
     },
     {
@@ -735,7 +733,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [130, 130, 0, 1]
       ]
     },
     {
@@ -755,7 +753,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [27, 67, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
@@ -764,7 +762,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [130, 10, 0, 1]
+        [250, 130, 0, 1]
       ]
     },
     {
@@ -793,25 +791,27 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [370, 130, 0, 1]
       ]
     },
     {
       "id": 23,
+      "parent": 22,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [0, -59, 0, 1]
       ]
     },
     {
       "id": 24,
+      "parent": 23,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [27, 67, 0, 1]
       ]
     },
     {
@@ -820,7 +820,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [10, 250, 0, 1]
       ]
     },
     {
@@ -835,6 +835,15 @@
     },
     {
       "id": 27,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [35, 315, 0, 1]
+      ]
+    },
+    {
+      "id": 28,
       "parent": 26,
       "transform": [
         [1, 0, 0, 0],
@@ -844,17 +853,26 @@
       ]
     },
     {
-      "id": 28,
+      "id": 29,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [250, 10, 0, 1]
+        [130, 250, 0, 1]
       ]
     },
     {
-      "id": 29,
-      "parent": 28,
+      "id": 30,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [155, 315, 0, 1]
+      ]
+    },
+    {
+      "id": 31,
+      "parent": 29,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -863,8 +881,8 @@
       ]
     },
     {
-      "id": 30,
-      "parent": 29,
+      "id": 32,
+      "parent": 31,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -873,26 +891,17 @@
       ]
     },
     {
-      "id": 31,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 32,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
       "id": 33,
-      "parent": 32,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [250, 250, 0, 1]
+      ]
+    },
+    {
+      "id": 34,
+      "parent": 33,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -901,45 +910,17 @@
       ]
     },
     {
-      "id": 34,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
       "id": 35,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [370, 10, 0, 1]
+        [275, 315, 0, 1]
       ]
     },
     {
       "id": 36,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 37,
-      "parent": 36,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 38,
-      "parent": 37,
+      "parent": 34,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -948,12 +929,31 @@
       ]
     },
     {
-      "id": 39,
+      "id": 37,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [370, 10, 0, 1]
+        [370, 250, 0, 1]
+      ]
+    },
+    {
+      "id": 38,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [395, 315, 0, 1]
+      ]
+    },
+    {
+      "id": 39,
+      "parent": 37,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [0, -59, 0, 1]
       ]
     },
     {
@@ -963,731 +963,11 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -59, 0, 1]
+        [6, 34, 0, 1]
       ]
     },
     {
       "id": 41,
-      "parent": 40,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 42,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 43,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 44,
-      "parent": 43,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 45,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 46,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 47,
-      "parent": 46,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 48,
-      "parent": 47,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 49,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 50,
-      "parent": 49,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 51,
-      "parent": 50,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 52,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 53,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 54,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 55,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 56,
-      "parent": 55,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 57,
-      "parent": 56,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 58,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 59,
-      "parent": 58,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 60,
-      "parent": 59,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 61,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 62,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 63,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 64,
-      "parent": 63,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 65,
-      "parent": 64,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 66,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 67,
-      "parent": 66,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 68,
-      "parent": 67,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 69,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 70,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 71,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 72,
-      "parent": 71,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 73,
-      "parent": 72,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 74,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 75,
-      "parent": 74,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 76,
-      "parent": 75,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [27, 67, 0, 1]
-      ]
-    },
-    {
-      "id": 77,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 78,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 79,
-      "parent": 78,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 80,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 81,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [35, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 82,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 83,
-      "parent": 82,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 84,
-      "parent": 83,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 85,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 86,
-      "parent": 85,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 87,
-      "parent": 86,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 88,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 89,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 90,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [155, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 91,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 92,
-      "parent": 91,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 93,
-      "parent": 92,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 94,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 95,
-      "parent": 94,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 96,
-      "parent": 95,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 97,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 98,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 99,
-      "parent": 98,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 100,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 101,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [275, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 102,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 103,
-      "parent": 102,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 104,
-      "parent": 103,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 105,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 106,
-      "parent": 105,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 107,
-      "parent": 106,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 108,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 109,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 110,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [395, 315, 0, 1]
-      ]
-    },
-    {
-      "id": 111,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 112,
-      "parent": 111,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 113,
-      "parent": 112,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 114,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 115,
-      "parent": 114,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 116,
-      "parent": 115,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 34, 0, 1]
-      ]
-    },
-    {
-      "id": 117,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1696,7 +976,7 @@
       ]
     },
     {
-      "id": 118,
+      "id": 42,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1705,7 +985,7 @@
       ]
     },
     {
-      "id": 119,
+      "id": 43,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1714,7 +994,7 @@
       ]
     },
     {
-      "id": 120,
+      "id": 44,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1723,7 +1003,7 @@
       ]
     },
     {
-      "id": 121,
+      "id": 45,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1732,7 +1012,7 @@
       ]
     },
     {
-      "id": 122,
+      "id": 46,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1741,27 +1021,8 @@
       ]
     },
     {
-      "id": 123,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 124,
-      "parent": 123,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 125,
-      "parent": 124,
+      "id": 47,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1770,27 +1031,8 @@
       ]
     },
     {
-      "id": 126,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 127,
-      "parent": 126,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 128,
-      "parent": 127,
+      "id": 48,
+      "parent": 5,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1799,27 +1041,8 @@
       ]
     },
     {
-      "id": 129,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 130,
-      "parent": 129,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 131,
-      "parent": 130,
+      "id": 49,
+      "parent": 8,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1828,27 +1051,8 @@
       ]
     },
     {
-      "id": 132,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 133,
-      "parent": 132,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 134,
-      "parent": 133,
+      "id": 50,
+      "parent": 11,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1857,27 +1061,8 @@
       ]
     },
     {
-      "id": 135,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 136,
-      "parent": 135,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 137,
-      "parent": 136,
+      "id": 51,
+      "parent": 14,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1886,27 +1071,8 @@
       ]
     },
     {
-      "id": 138,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 139,
-      "parent": 138,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 140,
-      "parent": 139,
+      "id": 52,
+      "parent": 17,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1915,27 +1081,8 @@
       ]
     },
     {
-      "id": 141,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 142,
-      "parent": 141,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 143,
-      "parent": 142,
+      "id": 53,
+      "parent": 20,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1944,27 +1091,8 @@
       ]
     },
     {
-      "id": 144,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 145,
-      "parent": 144,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 146,
-      "parent": 145,
+      "id": 54,
+      "parent": 23,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -1973,27 +1101,8 @@
       ]
     },
     {
-      "id": 147,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 148,
-      "parent": 147,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 149,
-      "parent": 148,
+      "id": 55,
+      "parent": 26,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -2002,27 +1111,8 @@
       ]
     },
     {
-      "id": 150,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 151,
-      "parent": 150,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 152,
-      "parent": 151,
+      "id": 56,
+      "parent": 31,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -2031,27 +1121,8 @@
       ]
     },
     {
-      "id": 153,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 154,
-      "parent": 153,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 155,
-      "parent": 154,
+      "id": 57,
+      "parent": 34,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -2060,375 +1131,8 @@
       ]
     },
     {
-      "id": 156,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 157,
-      "parent": 156,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 158,
-      "parent": 157,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 159,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 160,
-      "parent": 159,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 161,
-      "parent": 160,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 162,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 163,
-      "parent": 162,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 164,
-      "parent": 163,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 165,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 166,
-      "parent": 165,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 167,
-      "parent": 166,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 168,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 130, 0, 1]
-      ]
-    },
-    {
-      "id": 169,
-      "parent": 168,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 170,
-      "parent": 169,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 171,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 172,
-      "parent": 171,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 173,
-      "parent": 172,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 174,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 175,
-      "parent": 174,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 176,
-      "parent": 175,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 177,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 178,
-      "parent": 177,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 179,
-      "parent": 178,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 180,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 181,
-      "parent": 180,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 182,
-      "parent": 181,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 183,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 184,
-      "parent": 183,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 185,
-      "parent": 184,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 186,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 187,
-      "parent": 186,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 188,
-      "parent": 187,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 189,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 190,
-      "parent": 189,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 191,
-      "parent": 190,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
-    },
-    {
-      "id": 192,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 193,
-      "parent": 192,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -59, 0, 1]
-      ]
-    },
-    {
-      "id": 194,
-      "parent": 193,
+      "id": 58,
+      "parent": 39,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt
index a44c9077..7bb0a18 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt
@@ -18,14 +18,14 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutBlockFlow DIV id='child' class='composited'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 11
+      "transform": 5
     }
   ],
   "transforms": [
@@ -45,59 +45,19 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "parent": 2,
+      "flattenInheritedTransform": false,
+      "renderingContext": 1
     },
     {
       "id": 4,
       "parent": 3,
+      "flattenInheritedTransform": false,
       "renderingContext": 1
     },
     {
       "id": 5,
       "parent": 4,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "renderingContext": 1
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 10,
-      "parent": 9,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 11,
-      "parent": 10,
       "renderingContext": 2
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt
index 04b06d4..f45865a7 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [215, 0],
       "transform": 1
     },
     {
@@ -13,7 +12,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -28,16 +27,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [-215, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
index a3b3d61..7bbcbdb3 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [1, 0],
       "transform": 1
     },
     {
@@ -13,7 +12,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -28,16 +27,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [-1, 0, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt
index 8597c97e..30ce4c0 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [215, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
index 4b508db..d020c6b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "scrollPosition": [1, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
index 1b419af..cd8aaea 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
index 31becff..3f60348 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
index ee03641..77d9bc1 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
index ee03641..77d9bc1 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@
       "position": [15, 0],
       "bounds": [1000, 1000],
       "backgroundColor": "#FF0000",
-      "scrollPosition": [615, 0],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
index 3091d7d..4be6b751 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -15,38 +15,37 @@
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [400, 704],
-      "scrollPosition": [0, 304],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='inner'",
       "bounds": [204, 204],
-      "transform": 6
+      "transform": 3
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [2, 2],
       "bounds": [5000, 9000],
-      "transform": 9
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='grey'",
       "bounds": [100, 800],
       "contentsOpaque": true,
       "backgroundColor": "#808080",
-      "transform": 10
+      "transform": 4
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='spacer')",
       "position": [0, 2000],
       "bounds": [5000, 1000],
-      "transform": 11
+      "transform": 4
     },
     {
       "name": "Scroll Corner Layer",
       "position": [195, 195],
       "bounds": [7, 7],
-      "transform": 14
+      "transform": 3
     }
   ],
   "transforms": [
@@ -61,11 +60,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [0, -304, 0, 1]
       ]
     },
     {
@@ -75,115 +75,18 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -304, 0, 1]
+        [2, 502, 0, 1]
       ]
     },
     {
       "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -304, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 502, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -304, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 502, 0, 1]
-      ]
-    },
-    {
-      "id": 10,
-      "parent": 9,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [2, 2, 0, 1]
       ]
-    },
-    {
-      "id": 11,
-      "parent": 9,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -304, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 13,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 502, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt
index af4575dd..193a8264 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [180, 180],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -72,7 +63,7 @@
           "reason": "chunk appeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -84,15 +75,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -124,7 +106,7 @@
           "reason": "chunk disappeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -136,15 +118,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -181,7 +154,7 @@
           "reason": "paint property change"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -193,15 +166,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -243,7 +207,7 @@
           "reason": "paint property change"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -255,15 +219,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -310,7 +265,7 @@
           "reason": "paint property change"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -322,15 +277,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt
index 8cb719c..79f966d5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt
@@ -23,7 +23,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV)",
       "bounds": [285, 1000],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -44,15 +44,6 @@
         [0, 0, 1, 0],
         [108, 100, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
index 013c63e..0a94427 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -16,7 +16,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box')",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [10, 10, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt
index f4840e8..5c610a81 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt
@@ -26,7 +26,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')",
       "position": [-92, -92],
       "bounds": [100, 100],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -47,15 +47,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt
index 3e467c7..d616b34 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='squashed')",
       "position": [8, -4],
       "bounds": [40, 90],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt
index ab3de66..69933e97 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt
@@ -18,7 +18,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
       "position": [80, 80],
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -30,15 +30,6 @@
         [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
     }
   ]
 }
@@ -70,7 +61,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -82,15 +73,6 @@
         [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt
index 924b729..8079d9a0 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt
@@ -29,7 +29,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan')",
       "position": [0, 100],
       "bounds": [200, 300],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -50,15 +50,6 @@
         [0, 0, 1, 0],
         [0, 100, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -71,7 +62,6 @@
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 80],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'",
@@ -105,7 +95,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')",
@@ -118,7 +108,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -142,35 +132,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 200, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -189,7 +151,6 @@
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 120],
       "transform": 1
     },
     {
@@ -204,13 +165,13 @@
       "bounds": [200, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')",
       "position": [0, 100],
       "bounds": [200, 300],
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -234,35 +195,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -120, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 200, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -120, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -281,7 +214,6 @@
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 170],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'",
@@ -315,7 +247,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan')",
@@ -328,7 +260,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -352,35 +284,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -170, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 300, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -170, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt
index 88f602814..996e3430 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt
@@ -52,7 +52,6 @@
       "bounds": [785, 4050],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 80],
       "transform": 1
     },
     {
@@ -74,7 +73,7 @@
       "bounds": [200, 4000],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -89,16 +88,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -80, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt
index b5be30aa..ae32965 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt
@@ -36,7 +36,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -60,16 +60,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -88,7 +79,6 @@
       "bounds": [785, 4100],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 10],
       "transform": 1
     },
     {
@@ -102,21 +92,21 @@
       "bounds": [100, 4000],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'",
       "bounds": [200, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 7
+      "transform": 4
     }
   ],
   "transforms": [
@@ -131,16 +121,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -10, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -149,7 +130,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -158,27 +139,8 @@
       ]
     },
     {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -10, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
+      "id": 4,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -197,7 +159,6 @@
       "bounds": [785, 4100],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 110],
       "transform": 1
     },
     {
@@ -217,14 +178,14 @@
           "reason": "appeared"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'",
       "bounds": [200, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -239,16 +200,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -110, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -257,7 +209,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt
index a339790c1..cc16ca2 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -72,7 +63,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle2')",
       "position": [80, 80],
       "bounds": [180, 180],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -93,15 +84,6 @@
         [0, 0, 1, 0],
         [180, 180, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [180, 180, 0, 1]
-      ]
     }
   ]
 }
@@ -126,20 +108,20 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='box middle2'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
       "position": [80, 80],
       "bounds": [100, 100],
-      "transform": 4
+      "transform": 2
     }
   ],
   "transforms": [
@@ -158,24 +140,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [260, 260, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [260, 260, 0, 1]
       ]
     }
@@ -202,14 +166,14 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [180, 180],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='box top'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -228,15 +192,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [340, 340, 0, 1]
       ]
     }
@@ -263,7 +218,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -275,15 +230,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt
index a9afc551..0fde92b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [-85, -85],
       "bounds": [180, 190],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [125, 125, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [125, 125, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt
index f8cf3be..6a1f58a 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [-80, -80],
       "bounds": [260, 260],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -40,15 +40,6 @@
         [0, 0, 0, 1]
       ],
       "origin": [50, 50]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt
index 5bad095c..ed8c296 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [-80, -80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt
index 8b8b1d2..a3935bb 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [-60, -60],
       "bounds": [180, 190],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt
index f1cf5ab..e3b77d38 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt
@@ -17,7 +17,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [-101, -101],
       "bounds": [281, 281],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -29,15 +29,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt
index cb5de08..a8c968e 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -18,7 +18,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [-101, -101],
       "bounds": [281, 281],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -30,15 +30,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -70,7 +61,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -82,15 +73,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -127,7 +109,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -139,15 +121,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
index eed5dc91..3ef87fb 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -18,7 +18,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
       "position": [-96, -96],
       "bounds": [276, 276],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -30,15 +30,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -70,7 +61,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -82,15 +73,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
@@ -127,7 +109,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -139,15 +121,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
index 4619668..f84ab15 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt
index 1847d66..71571c75 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt
@@ -20,7 +20,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [260, 260],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,15 +32,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -72,7 +63,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -84,15 +75,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -129,7 +111,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -141,15 +123,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -186,7 +159,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -198,15 +171,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
@@ -243,7 +207,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -255,15 +219,6 @@
         [0, 0, 1, 0],
         [60, 60, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt
index 2a61ab19..a8b4348 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt
@@ -17,20 +17,20 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
       "position": [80, 80],
       "bounds": [10, 10],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
       "bounds": [10, 10],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='C' class='overlap3')",
       "position": [0, 80],
       "bounds": [25, 10],
-      "transform": 4
+      "transform": 2
     }
   ],
   "transforms": [
@@ -49,24 +49,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [60, 60, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [220, 220, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [220, 220, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt
index efc1d22..c6f594b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt
@@ -31,7 +31,7 @@
         "GraphicsLayerPaintOverflowContents",
         "GraphicsLayerPaintCompositedScroll"
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
@@ -43,7 +43,7 @@
         "GraphicsLayerPaintMask",
         "GraphicsLayerPaintDecoration"
       ],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -55,24 +55,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt
index 770d1ff..2b4da3a 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -15,7 +15,7 @@
       "bounds": [10, 10],
       "contentsOpaque": true,
       "backgroundColor": "#FFFF00",
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -27,15 +27,6 @@
         [0, 0, 1, 0],
         [8, 18, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 18, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt
index b118c48d..ab64e55 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -31,16 +31,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -49,8 +40,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
index 24b124c..31c8281 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -15,7 +15,7 @@
       "name": "LayoutBlockFlow DIV id='content'",
       "bounds": [285, 1000],
       "contentsOpaque": true,
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -27,15 +27,6 @@
         [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
index 4047644..b5a8000b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [400, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "scrollPosition": [0, 1600],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutBlockFlow DIV id='container'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
index 4be9d80..b5a8000b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [400, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "scrollPosition": [0, 1600],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutBlockFlow DIV id='container'",
@@ -25,19 +24,19 @@
           "reason": "incremental"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [0, 400],
       "bounds": [400, 0],
-      "transform": 4
+      "transform": 1
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [400, 0],
       "bounds": [0, 400],
-      "transform": 5
+      "transform": 1
     }
   ],
   "transforms": [
@@ -52,40 +51,13 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [0, -1600, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
index 329dc4ba..f2c232a0 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 30020],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
@@ -13,20 +12,20 @@
       "bounds": [500, 500],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='containerOverlapsComposited')",
       "position": [12, 12],
       "bounds": [100, 30000],
-      "transform": 5
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
       "bounds": [50, 50],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -41,44 +40,16 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
       "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
index bbf39de4..1f69818 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
@@ -11,7 +11,7 @@
       "contentsOpaque": true,
       "backfaceVisibility": "hidden",
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow HTML (foreground) Layer",
@@ -23,7 +23,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -38,16 +38,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -200, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -56,7 +47,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
index cc6c397..1ca9937 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
@@ -24,7 +24,7 @@
           "reason": "disappeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='target'",
@@ -38,7 +38,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -57,15 +57,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
index 9e81f13c..172ae11c 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt
index 02659d8..e45da36f 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt
@@ -21,19 +21,19 @@
           "reason": "chunk disappeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [0, 100],
       "bounds": [100, 0],
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [100, 0],
       "bounds": [0, 100],
-      "transform": 4
+      "transform": 1
     },
     {
       "name": "LayoutBlockFlow DIV id='target'",
@@ -47,7 +47,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -59,33 +59,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
index e4a4fc9..b15e18f5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
index c2621813..caf2117 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
index 0139d73..58ea852 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
index e9f82b97..d2631bd 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt
index 889bb44..0345e98 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt
@@ -15,14 +15,13 @@
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [185, 1025],
-      "scrollPosition": [0, 25],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [186, 186],
       "bounds": [15, 15],
-      "transform": 4
+      "transform": 1
     }
   ],
   "transforms": [
@@ -37,31 +36,13 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [0, -25, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
index cc80b47d..9fb8948 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "scrollPosition": [500, 400],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='content'",
@@ -22,13 +21,13 @@
           "reason": "background"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [385, 285],
       "bounds": [15, 15],
-      "transform": 4
+      "transform": 1
     }
   ],
   "transforms": [
@@ -43,31 +42,13 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [-500, -400, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
index 748d2d1f..689f19f6 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2008, 1516],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [900, 700],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='content'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
index db7eb2f..29d7340 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
@@ -15,7 +15,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [3000, 3000],
-      "scrollPosition": [0, 400],
       "transform": 2
     },
     {
@@ -23,12 +22,12 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow DIV id='container' (foreground) Layer",
       "bounds": [3000, 3000],
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
@@ -56,26 +55,6 @@
         [0, 0, 1, 0],
         [0, -400, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
index 38ab911f..ad9e0cce 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
index b21768ac..bd0ecef 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 5
+      "transform": 2
     }
   ],
   "transforms": [
@@ -49,22 +49,6 @@
       "parent": 2,
       "flattenInheritedTransform": false,
       "renderingContext": 1
-    },
-    {
-      "id": 4,
-      "renderingContext": 1
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
index da2b7a44..97f5a96 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
@@ -16,7 +16,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt
index 94e3bda..baa4049 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt
@@ -21,13 +21,13 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [185, 185],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -39,24 +39,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
index b7bb166..0e443de 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -22,7 +22,7 @@
           "reason": "geometry"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -34,15 +34,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
index 37c753a..eb67efc 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [100, 200],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
index 7cd80a19..2db28e78 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2350],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1750],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow HTML",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
index 7cdf7e9a..fa435443 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1016, 585],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [216, 0],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
index 67022869..70e24901 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
@@ -33,13 +33,13 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [195, 195],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -51,24 +51,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt
index eb20064..8419448 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 500],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow HTML",
@@ -34,7 +33,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -58,16 +57,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -500, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt
index 187cf27..aa051a5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 20],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt
index 9e2a3c95..0e30813 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV id='t' class='green translated'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt
index 95229ff..1f47949 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 50],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt
index e018aec1..2227ec3 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt
@@ -955,7 +955,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [4000, 20060],
-      "scrollPosition": [50, 9950],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (relative positioned) DIV id='target4'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
index 298d5b10..0b1ab6c 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
index ef2b843..15d8f890 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
index 7788a86..8d11bfa 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt
index dc4d87b..4725b20 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 20],
       "transform": 1
     },
     {
@@ -19,12 +18,12 @@
           "reason": "background"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='scrollable'",
       "bounds": [302, 302],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow (relative positioned) DIV id='transform'",
@@ -38,19 +37,19 @@
           "reason": "background"
         }
       ],
-      "transform": 7
+      "transform": 6
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [1, 301],
       "bounds": [300, 0],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [301, 1],
       "bounds": [0, 300],
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -65,11 +64,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -20, 0, 1]
+        [40, 50, 0, 1]
       ]
     },
     {
@@ -79,7 +79,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [40, 50, 0, 1]
+        [64, 53, 0, 1]
       ]
     },
     {
@@ -89,7 +89,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [64, 53, 0, 1]
+        [0, -30, 0, 1]
       ]
     },
     {
@@ -99,23 +99,13 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -30, 0, 1]
+        [89, 78, 0, 1]
       ]
     },
     {
       "id": 6,
       "parent": 5,
       "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [89, 78, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
         [3.53553390593274, 3.53553390593274, 0, 0],
         [-3.53553390593274, 3.53553390593274, 0, 0],
         [0, 0, 1, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
index 5625380..d383459 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [205, 1022],
-      "scrollPosition": [0, 922],
       "paintInvalidations": [
         {
           "object": "LayoutTextControl INPUT id='text'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
index 68cf9e1..cd63182 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
@@ -15,25 +15,24 @@
       "name": "Scrolling Contents Layer",
       "bounds": [300, 516],
       "backgroundColor": "#EEEEEE",
-      "scrollPosition": [0, 20],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutBlockFlow BODY",
       "bounds": [284, 500],
-      "transform": 5
+      "transform": 4
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [0, 150],
       "bounds": [300, 0],
-      "transform": 7
+      "transform": 2
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [300, 0],
       "bounds": [0, 150],
-      "transform": 9
+      "transform": 2
     }
   ],
   "transforms": [
@@ -48,11 +47,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -62,7 +62,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [0, -20, 0, 1]
       ]
     },
     {
@@ -72,56 +72,8 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -20, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt
index adad0f8..121555dc 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 500],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
index 7b4df14..da256ca 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 500],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
index 3fdfe84..8e8ccca7 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
index 3fdfe84..8e8ccca7 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
index b548e7a..3e5955f 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
index 3fdfe84..8e8ccca7 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
index 4f33add..15e6b7e 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV class='green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
index ef10b2c2..ca2bc98 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2001],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 400],
       "transform": 1
     },
     {
@@ -14,7 +13,7 @@
       "contentsOpaque": true,
       "backfaceVisibility": "hidden",
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='fixed'",
@@ -42,16 +41,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
index eb1f9d77..eef35cc2 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2001],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 400],
       "transform": 1
     },
     {
@@ -14,7 +13,7 @@
       "contentsOpaque": true,
       "backfaceVisibility": "hidden",
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutBlockFlow (positioned) DIV id='fixed'",
@@ -42,16 +41,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
index 6fe796d..792cce6 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [200, 200],
       "paintInvalidations": [
         {
           "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
index 6efacfc..cbf5035 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [185, 4900],
-      "scrollPosition": [0, 2350],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
index b1c36be..45da238 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 4936],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 2350],
       "paintInvalidations": [
         {
           "object": "InlineTextBox 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
index 9916a80..7cad2ed6 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 400],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
index ca1077c..44fe7b6 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [685, 600],
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
index f45c4941..a39f710 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [285, 900],
-      "scrollPosition": [0, 150],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
index 79f5fa4..9e55ad2a 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [185, 552],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "scrollPosition": [0, 367],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutBlockFlow DIV id='scroller'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
index 5ce7f5df..9d4792f 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 1895],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
index decd7a3..365697b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
index 64c4b228..228b835 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
index 32f5d31..c092287 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
index 4d8b3371..7dadb065 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 5056],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1400],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
index 29673e9..3862a3f 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [200, 1620],
       "contentsOpaque": true,
       "backgroundColor": "#D3D3D3",
-      "scrollPosition": [0, 450],
       "paintInvalidations": [
         {
           "object": "InlineTextBox 'test'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index b3a1c266..7896ecc 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1026, 996],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 411],
       "paintInvalidations": [
         {
           "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
index 6a4985cc..4141e86 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -30,7 +30,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
       "position": [100, 100],
       "bounds": [300, 440],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -42,15 +42,6 @@
         [0, 0, 1, 0],
         [8, 58, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 58, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt
index bfc70a5..09a85d13 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutTableCell TD id='moveMe'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt
index 683375a..a67c8b5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
index 00fe7ae..1d945111 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
index 49592e8a..6ddbea9 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1566, 1781],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [766, 1181],
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
index 07bf197..a34083d1 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [939, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [339, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
@@ -35,7 +34,6 @@
       "bounds": [939, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [539, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt
deleted file mode 100644
index 87ba463..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutBlockFlow HTML",
-      "bounds": [800, 242],
-      "paintingPhases": [
-        "GraphicsLayerPaintBackground",
-        "GraphicsLayerPaintMask",
-        "GraphicsLayerPaintDecoration"
-      ]
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='composited'",
-      "bounds": [80, 10],
-      "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "paintingPhases": [
-        "GraphicsLayerPaintBackground",
-        "GraphicsLayerPaintForeground",
-        "GraphicsLayerPaintMask",
-        "GraphicsLayerPaintDecoration"
-      ],
-      "transform": 2
-    },
-    {
-      "name": "LayoutBlockFlow HTML (foreground) Layer",
-      "bounds": [800, 242],
-      "paintingPhases": [
-        "GraphicsLayerPaintForeground"
-      ]
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='container'",
-      "bounds": [202, 202],
-      "paintingPhases": [
-        "GraphicsLayerPaintBackground",
-        "GraphicsLayerPaintMask",
-        "GraphicsLayerPaintCompositedScroll",
-        "GraphicsLayerPaintDecoration"
-      ],
-      "transform": 3
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [1, 1],
-      "bounds": [185, 715],
-      "paintingPhases": [
-        "GraphicsLayerPaintForeground",
-        "GraphicsLayerPaintOverflowContents",
-        "GraphicsLayerPaintCompositedScroll"
-      ],
-      "transform": 1
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [186, 186],
-      "bounds": [15, 15],
-      "paintingPhases": [
-        "GraphicsLayerPaintBackground",
-        "GraphicsLayerPaintForeground",
-        "GraphicsLayerPaintMask",
-        "GraphicsLayerPaintDecoration"
-      ],
-      "transform": 4
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 20, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 11, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 20, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [28, 20, 0, 1]
-      ]
-    }
-  ]
-}
-
-
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
index 454055cf..6b5354b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 285],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,24 +32,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
index 454055cf..6b5354b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 285],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,24 +32,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
index 454055cf..6b5354b 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 285],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,24 +32,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
deleted file mode 100644
index dc875d5..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [1208, 821],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF"
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='positioned'",
-      "bounds": [1200, 800],
-      "transform": 1
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='scroller'",
-      "bounds": [1200, 1000],
-      "transform": 2
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [1200, 10000],
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/rotate-clip-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/rotate-clip-expected.txt
deleted file mode 100644
index 1a068196..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/rotate-clip-expected.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF"
-    },
-    {
-      "name": "LayoutBlockFlow DIV",
-      "bounds": [240, 240],
-      "transform": 2
-    },
-    {
-      "name": "LayoutBlockFlow DIV",
-      "bounds": [400, 400],
-      "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 5
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [120, 120]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [120, 120]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 20, 0, 1]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt
deleted file mode 100644
index 65e7e38..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt
+++ /dev/null
@@ -1,296 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF"
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='outer A'",
-      "position": [-21, -21],
-      "bounds": [352, 294],
-      "transform": 1
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='scroller'",
-      "position": [-30, -30],
-      "bounds": [290, 230],
-      "backgroundColor": "#FFFFFF",
-      "transform": 2
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [5, 5],
-      "bounds": [220, 236],
-      "backgroundColor": "#FFFFFF",
-      "transform": 3
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='outer B'",
-      "position": [-21, -21],
-      "bounds": [352, 294],
-      "transform": 4
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='scroller'",
-      "position": [-30, -30],
-      "bounds": [290, 230],
-      "backgroundColor": "#FFFFFF",
-      "transform": 5
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [5, 5],
-      "bounds": [220, 236],
-      "backgroundColor": "#FFFFFF",
-      "transform": 6
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='content'",
-      "bounds": [196, 212],
-      "contentsOpaque": true,
-      "backgroundColor": "#DDDDDD",
-      "transform": 7
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='outer C'",
-      "position": [-21, -21],
-      "bounds": [352, 294],
-      "transform": 8
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='scroller'",
-      "position": [-30, -30],
-      "bounds": [290, 230],
-      "backgroundColor": "#FFFFFF",
-      "transform": 9
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [5, 5],
-      "bounds": [220, 236],
-      "backgroundColor": "#FFFFFF",
-      "transform": 10
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='content'",
-      "bounds": [196, 212],
-      "contentsOpaque": true,
-      "backgroundColor": "#DDDDDD",
-      "transform": 11
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='outer D'",
-      "position": [-21, -21],
-      "bounds": [352, 294],
-      "transform": 12
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='clipper'",
-      "position": [-7, -7],
-      "bounds": [292, 200],
-      "transform": 13
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='scroller'",
-      "position": [-30, -30],
-      "bounds": [290, 230],
-      "backgroundColor": "#FFFFFF",
-      "transform": 15
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [5, 5],
-      "bounds": [220, 236],
-      "backgroundColor": "#FFFFFF",
-      "transform": 17
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='content'",
-      "bounds": [196, 212],
-      "contentsOpaque": true,
-      "backgroundColor": "#DDDDDD",
-      "transform": 18
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [21, 21, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 21, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [17, 17, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [21, 312, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [40, 40, 0, 1]
-      ]
-    },
-    {
-      "id": 10,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [40, 40, 0, 1]
-      ]
-    },
-    {
-      "id": 11,
-      "parent": 10,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [17, 17, 0, 1]
-      ]
-    },
-    {
-      "id": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [370, 312, 0, 1]
-      ]
-    },
-    {
-      "id": 13,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 14,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 15,
-      "parent": 14,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [24, 24, 0, 1]
-      ]
-    },
-    {
-      "id": 16,
-      "parent": 12,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 17,
-      "parent": 16,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [24, 24, 0, 1]
-      ]
-    },
-    {
-      "id": 18,
-      "parent": 17,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [17, 17, 0, 1]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
deleted file mode 100644
index 6d42fdf..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF"
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='outer'",
-      "position": [-21, -21],
-      "bounds": [352, 294],
-      "transform": 1
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='content'",
-      "bounds": [196, 212],
-      "contentsOpaque": true,
-      "backgroundColor": "#DDDDDD",
-      "transform": 3
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='outer' (foreground) Layer",
-      "position": [-21, -21],
-      "bounds": [352, 294],
-      "transform": 1
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='scroller'",
-      "position": [-30, -30],
-      "bounds": [290, 230],
-      "backgroundColor": "#FFFFFF",
-      "transform": 4
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "position": [5, 5],
-      "bounds": [220, 236],
-      "backgroundColor": "#FFFFFF",
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [21, 21, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [17, 17, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [41, 41, 0, 1]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
index ebbc6a0..c22a880c 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
@@ -14,19 +14,18 @@
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [400, 602],
-      "scrollPosition": [0, 302],
       "transform": 1
     },
     {
       "name": "LayoutBlockFlow DIV id='inner'",
       "bounds": [102, 102],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [100, 500],
-      "transform": 5
+      "transform": 2
     }
   ],
   "transforms": [
@@ -41,35 +40,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -302, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 501, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -302, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
index ad38d645..22d34d94 100644
--- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -31,16 +31,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -49,8 +40,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test-expected.txt b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test-expected.txt
new file mode 100644
index 0000000..a2064d8
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test-expected.txt
@@ -0,0 +1,6 @@
+Performance panel loaded.
+Loading a performance model.
+Running aXe on the event log pane.
+aXe violations: []
+
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test.js b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test.js
new file mode 100644
index 0000000..af7be99
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test.js
@@ -0,0 +1,25 @@
+// Copyright 2019 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.
+
+(async function() {
+  await TestRunner.loadModule('axe_core_test_runner');
+  await TestRunner.loadModule('performance_test_runner');
+
+  await TestRunner.showPanel('timeline');
+  TestRunner.addResult('Performance panel loaded.');
+
+  const tabbedPane = UI.panels.timeline._flameChart._detailsView._tabbedPane;
+  tabbedPane.selectTab(Timeline.TimelineDetailsView.Tab.EventLog);
+
+  TestRunner.addResult('Loading a performance model.');
+  const view = tabbedPane.visibleView;
+  const model = PerformanceTestRunner.createPerformanceModelWithEvents([{}]);
+  view.setModel(model, PerformanceTestRunner.mainTrack());
+  view.updateContents(Timeline.TimelineSelection.fromRange(
+    model.timelineModel().minimumRecordTime(), model.timelineModel().maximumRecordTime()));
+
+  TestRunner.addResult('Running aXe on the event log pane.');
+  await AxeCoreTestRunner.runValidation(view.contentElement);
+  TestRunner.completeTest();
+})();
diff --git a/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt b/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt
index d4a97f9..cb1fad6 100644
--- a/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt b/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt
index aec4a42..d3f63787 100644
--- a/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 5000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutView #document",
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
index d1718706..db8c4146 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [400, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "scrollPosition": [0, 1600],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutNGBlockFlow DIV id='container'",
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
index a128a84..db8c4146 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [400, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "scrollPosition": [0, 1600],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutNGBlockFlow DIV id='container'",
@@ -25,19 +24,19 @@
           "reason": "incremental"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [0, 400],
       "bounds": [400, 0],
-      "transform": 4
+      "transform": 1
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [400, 0],
       "bounds": [0, 400],
-      "transform": 5
+      "transform": 1
     }
   ],
   "transforms": [
@@ -52,40 +51,13 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [0, -1600, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
index 74d61db..6125265f 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 30020],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
@@ -13,20 +12,20 @@
       "bounds": [500, 500],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='containerOverlapsComposited')",
       "position": [12, 12],
       "bounds": [100, 30000],
-      "transform": 5
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='fixed'",
       "bounds": [50, 50],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 6
+      "transform": 3
     }
   ],
   "transforms": [
@@ -41,44 +40,16 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -100, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
       "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -100, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
index ce27241..4677f96 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
@@ -11,7 +11,7 @@
       "contentsOpaque": true,
       "backfaceVisibility": "hidden",
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow HTML (foreground) Layer",
@@ -23,7 +23,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -38,16 +38,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -200, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -56,7 +47,7 @@
       ]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
index cbdf227..7e4b43b7 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
@@ -24,7 +24,7 @@
           "reason": "disappeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='target'",
@@ -38,7 +38,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -57,15 +57,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [50, 50, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
index de9e9fa3..c405f6c 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt
index 300e926..433a9042 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt
@@ -21,19 +21,19 @@
           "reason": "chunk disappeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [0, 100],
       "bounds": [100, 0],
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [100, 0],
       "bounds": [0, 100],
-      "transform": 4
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow DIV id='target'",
@@ -47,7 +47,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -59,33 +59,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
index 42b3c73..38b201d 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
index 4fbea54..004cbd8 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt
index 72daa84..ed08e35 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
index b943454..5321425a 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
index 396f579..b5504b7 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt
index dc00d2d..b3dc2123 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt
@@ -15,14 +15,13 @@
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [185, 1025],
-      "scrollPosition": [0, 25],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [186, 186],
       "bounds": [15, 15],
-      "transform": 4
+      "transform": 1
     }
   ],
   "transforms": [
@@ -37,31 +36,13 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [0, -25, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
index 13cd5495..d157e13 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "scrollPosition": [500, 400],
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='content'",
@@ -22,13 +21,13 @@
           "reason": "background"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [385, 285],
       "bounds": [15, 15],
-      "transform": 4
+      "transform": 1
     }
   ],
   "transforms": [
@@ -43,31 +42,13 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [-500, -400, 0, 1]
       ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
index 81a1b91..51d462b9 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2008, 1516],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [900, 700],
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='content'",
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
index a01b1b5..a698223 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
@@ -15,7 +15,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [3000, 3000],
-      "scrollPosition": [0, 400],
       "transform": 2
     },
     {
@@ -23,12 +22,12 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow DIV id='container' (foreground) Layer",
       "bounds": [3000, 3000],
-      "transform": 4
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
@@ -56,26 +55,6 @@
         [0, 0, 1, 0],
         [0, -400, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
index 4486267..52b4a19 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -36,15 +36,6 @@
         [0, 0, 1, 0],
         [100, 100, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
index 94770dc..c9767c85 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
@@ -24,7 +24,7 @@
           "reason": "background"
         }
       ],
-      "transform": 5
+      "transform": 2
     }
   ],
   "transforms": [
@@ -49,22 +49,6 @@
       "parent": 2,
       "flattenInheritedTransform": false,
       "renderingContext": 1
-    },
-    {
-      "id": 4,
-      "renderingContext": 1
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
index 20e720a8..34a4581 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
@@ -16,7 +16,7 @@
     {
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)",
       "bounds": [100, 100],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt
index 36692c6f..b7d7dd2 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt
@@ -21,13 +21,13 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [185, 185],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -39,24 +39,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt b/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
index a87b336..c3970f3 100644
--- a/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1016, 585],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [216, 0],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt b/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
index 39ac02bf..970441d 100644
--- a/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
@@ -33,13 +33,13 @@
           "reason": "background"
         }
       ],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [195, 195],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -51,24 +51,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt b/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt
index 239bd1d..653436f 100644
--- a/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 500],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow HTML",
@@ -34,7 +33,7 @@
           "reason": "full layer"
         }
       ],
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -58,16 +57,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -500, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt b/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt
index d55d84a..03da40d 100644
--- a/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV id='t' class='green translated'",
diff --git a/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt b/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt
index 80bbfed..3189fc7b 100644
--- a/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 1000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 50],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt b/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt
index fb44ccda..7cd4593 100644
--- a/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt
@@ -955,7 +955,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [4000, 20060],
-      "scrollPosition": [50, 9950],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (relative positioned) DIV id='target4'",
diff --git a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
index 0b989a9..3ef0134 100644
--- a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV class='absolute red'",
diff --git a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
index 40df891..0a8c544 100644
--- a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
index 7474843..d556bf70 100644
--- a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt b/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt
index c073a92..80ea4e4 100644
--- a/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 20],
       "transform": 1
     },
     {
@@ -19,12 +18,12 @@
           "reason": "background"
         }
       ],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrollable'",
       "bounds": [302, 302],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (relative positioned) DIV id='transform'",
@@ -38,19 +37,19 @@
           "reason": "background"
         }
       ],
-      "transform": 7
+      "transform": 6
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [1, 301],
       "bounds": [300, 0],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [301, 1],
       "bounds": [0, 300],
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -65,11 +64,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -20, 0, 1]
+        [40, 50, 0, 1]
       ]
     },
     {
@@ -79,7 +79,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [40, 50, 0, 1]
+        [64, 53, 0, 1]
       ]
     },
     {
@@ -89,7 +89,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [64, 53, 0, 1]
+        [0, -30, 0, 1]
       ]
     },
     {
@@ -99,23 +99,13 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -30, 0, 1]
+        [89, 78, 0, 1]
       ]
     },
     {
       "id": 6,
       "parent": 5,
       "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [89, 78, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
         [3.53553390593274, 3.53553390593274, 0, 0],
         [-3.53553390593274, 3.53553390593274, 0, 0],
         [0, 0, 1, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
index 58fc1b59..6b1e65d 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
@@ -15,25 +15,24 @@
       "name": "Scrolling Contents Layer",
       "bounds": [300, 516],
       "backgroundColor": "#EEEEEE",
-      "scrollPosition": [0, 20],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow BODY",
       "bounds": [284, 500],
-      "transform": 5
+      "transform": 4
     },
     {
       "name": "Horizontal Scrollbar Layer",
       "position": [0, 150],
       "bounds": [300, 0],
-      "transform": 7
+      "transform": 2
     },
     {
       "name": "Vertical Scrollbar Layer",
       "position": [300, 0],
       "bounds": [0, 150],
-      "transform": 9
+      "transform": 2
     }
   ],
   "transforms": [
@@ -48,11 +47,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [2, 2, 0, 1]
       ]
     },
     {
@@ -62,7 +62,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [2, 2, 0, 1]
+        [0, -20, 0, 1]
       ]
     },
     {
@@ -72,56 +72,8 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -20, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [2, 2, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt
index ee2a56f..dad3158 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 500],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV id='t' class='green absolute'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
index 7bbe584..152c49e 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 500],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
index 251a021..2131405 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
index 251a021..2131405 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
index 958294a5..4707012 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
index 251a021..2131405 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
index e876538..3ad68d29 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV class='green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
index 2fdb9dd6..6a583b86 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2001],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 400],
       "transform": 1
     },
     {
@@ -14,7 +13,7 @@
       "contentsOpaque": true,
       "backfaceVisibility": "hidden",
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='fixed'",
@@ -42,16 +41,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
index da04f4b..36657808 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2001],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 400],
       "transform": 1
     },
     {
@@ -14,7 +13,7 @@
       "contentsOpaque": true,
       "backfaceVisibility": "hidden",
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='fixed'",
@@ -42,16 +41,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -400, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
index fa25cd0..8032319 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [185, 4900],
-      "scrollPosition": [0, 2350],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
index f993c1e..6763d3dd 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 400],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow DIV id='div'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
index aafa1815..fa59184e 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [685, 600],
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
index be56aec..578b034 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [285, 900],
-      "scrollPosition": [0, 150],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
index 4eb5617..bbe122c 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
index b5ca04b..aa700c2 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 180],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
index fbc97f2..ad75c447 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
index d4a97f9..cb1fad6 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
index d4a97f9..cb1fad6 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1000],
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
index 5cc2afe0..6a82996 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [400, 400],
       "paintInvalidations": [
         {
           "object": "LayoutSVGRect rect id='rect'",
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
index c7d6d46..b80817f9 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -30,7 +30,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)",
       "position": [100, 100],
       "bounds": [300, 440],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -42,15 +42,6 @@
         [0, 0, 1, 0],
         [8, 58, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 58, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt
index d15b795..30cc276d 100644
--- a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutNGTableCell TD id='moveMe'",
diff --git a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt
index 9b0567e7..150acfff 100644
--- a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
index c1a01ad..7dbbc3c 100644
--- a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 100],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
index 4b43ce01..36129f0 100644
--- a/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1566, 1781],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [766, 1181],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (relative positioned) DIV class='relative red'",
diff --git a/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt
index 91dc27c4..e8694b60 100644
--- a/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 9
+      "transform": 6
     }
   ],
   "transforms": [
@@ -76,42 +76,7 @@
     },
     {
       "id": 5,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.002],
-        [0, 0, 0, 1]
-      ],
-      "origin": [152, 152]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [12, 12, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [0.766044443118978, -0.556670399226419, -0.32139380484327, 0],
-        [0, 0.5, -0.866025403784439, 0],
-        [0.642787609686539, 0.663413948168938, 0.383022221559489, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [140, 140],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -122,8 +87,8 @@
       "renderingContext": 1
     },
     {
-      "id": 9,
-      "parent": 8,
+      "id": 6,
+      "parent": 5,
       "transform": [
         [0.766044443118978, 0, 0.642787609686539, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
index ebc0d47..7792506a 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -22,7 +22,7 @@
           "reason": "geometry"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -34,15 +34,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
index 394ee36..c3c442e 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [100, 200],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
index 0dbcb4d..efe64ac 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2350],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1750],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow HTML",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
index 9d5334fb..58e78dc 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [200, 200],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
index 19f89d5..a2ccf03 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 4936],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 2350],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
index 2547ef9..a811dac 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [200, 1620],
       "contentsOpaque": true,
       "backgroundColor": "#D3D3D3",
-      "scrollPosition": [0, 450],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'test'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index 7137b61..36cff711f 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1026, 996],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 411],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
index 80e14f8..e6dcac36 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [939, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [339, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
@@ -35,7 +34,6 @@
       "bounds": [939, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [539, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
index 91dc27c4..e8694b60 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 9
+      "transform": 6
     }
   ],
   "transforms": [
@@ -76,42 +76,7 @@
     },
     {
       "id": 5,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.002],
-        [0, 0, 0, 1]
-      ],
-      "origin": [152, 152]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [12, 12, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [0.766044443118978, -0.556670399226419, -0.32139380484327, 0],
-        [0, 0.5, -0.866025403784439, 0],
-        [0.642787609686539, 0.663413948168938, 0.383022221559489, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [140, 140],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -122,8 +87,8 @@
       "renderingContext": 1
     },
     {
-      "id": 9,
-      "parent": 8,
+      "id": 6,
+      "parent": 5,
       "transform": [
         [0.766044443118978, 0, 0.642787609686539, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt
index 2fbf270a..51ade3e 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -15,32 +15,32 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [285, 192],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 9
+      "transform": 5
     },
     {
       "name": "LayoutNGBlockFlow DIV class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 11
+      "transform": 7
     }
   ],
   "transforms": [
@@ -55,11 +55,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -69,7 +70,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
@@ -79,52 +80,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
       "id": 5,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -133,7 +94,7 @@
       ]
     },
     {
-      "id": 10,
+      "id": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -142,8 +103,8 @@
       ]
     },
     {
-      "id": 11,
-      "parent": 10,
+      "id": 7,
+      "parent": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
index e6cf92b..a18de54 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -17,20 +17,20 @@
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [285, 800],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [286, 286],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='fixed lime box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 4
+      "transform": 2
     }
   ],
   "transforms": [
@@ -49,24 +49,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 68, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 68, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [10, 100, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
index 57c0093..9518537f 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -19,7 +19,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#C0C0C0",
-      "transform": 6
+      "transform": 4
     }
   ],
   "transforms": [
@@ -39,21 +39,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 390, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "renderingContext": 1
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -64,8 +50,8 @@
       "renderingContext": 1
     },
     {
-      "id": 6,
-      "parent": 5,
+      "id": 4,
+      "parent": 3,
       "transform": [
         [0.984807753012208, 0, -0.17364817766693, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
index 9b89814..f464bdb 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -19,20 +19,19 @@
       "bounds": [189, 270],
       "contentsOpaque": true,
       "backgroundColor": "#CCCCCC",
-      "scrollPosition": [0, 50],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [190, 110],
       "bounds": [15, 15],
-      "transform": 4
+      "transform": 1
     },
     {
       "name": "LayoutTextControl TEXTAREA",
       "bounds": [206, 126],
       "backgroundColor": "#CCCCCC",
-      "transform": 5
+      "transform": 3
     },
     {
       "name": "Scrolling Contents Layer",
@@ -40,14 +39,13 @@
       "bounds": [189, 270],
       "contentsOpaque": true,
       "backgroundColor": "#CCCCCC",
-      "scrollPosition": [0, 50],
-      "transform": 7
+      "transform": 4
     },
     {
       "name": "Scroll Corner Layer",
       "position": [190, 110],
       "bounds": [15, 15],
-      "transform": 8
+      "transform": 3
     }
   ],
   "transforms": [
@@ -62,68 +60,32 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [18, 18, 0, 1]
+        [0, -50, 0, 1]
       ]
     },
     {
       "id": 3,
-      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -50, 0, 1]
+        [248, 18, 0, 1]
       ]
     },
     {
       "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 18, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [248, 18, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [248, 18, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [0, -50, 0, 1]
       ]
-    },
-    {
-      "id": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [248, 18, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
index 0cb06ca..139d82a 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2036],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 300],
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
index 243f13e..a172d8f 100644
--- a/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -15,7 +15,7 @@
       "bounds": [10, 10],
       "contentsOpaque": true,
       "backgroundColor": "#FFFF00",
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -27,15 +27,6 @@
         [0, 0, 1, 0],
         [8, 18, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 18, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
index 8d2cbc9..af1287ff 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
@@ -34,7 +34,7 @@
           "reason": "chunk appeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -46,15 +46,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
index ebc0d47..7792506a 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -22,7 +22,7 @@
           "reason": "geometry"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -34,15 +34,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
index 394ee36..c3c442e 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [100, 200],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -28,15 +28,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
index c7dcf18a..b236d87f 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2350],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1750],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow HTML",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt
index f93d48ba..570522c9 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 20],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
index bb98a11..e199371 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [205, 1019],
-      "scrollPosition": [0, 919],
       "paintInvalidations": [
         {
           "object": "LayoutTextControl INPUT id='text'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
index f1460e5..1b536f2 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [200, 200],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
index 3c3d0d6..9f231f8 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 4934],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 2350],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
index 2cb468ef..11f3860 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [185, 550],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "scrollPosition": [0, 365],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutNGBlockFlow DIV id='scroller'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
index 1f4b51b..ed1a3e5 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 1893],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (relative positioned) DIV id='ul'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
index 2943c01..3988ea5 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 5054],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1400],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
index 33b5a4a..59948cec 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [200, 1620],
       "contentsOpaque": true,
       "backgroundColor": "#D3D3D3",
-      "scrollPosition": [0, 450],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'test'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index 5f90814..736e21f 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1026, 1016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 431],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
index f03ef16..be97385a 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -30,7 +30,7 @@
       "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)",
       "position": [100, 100],
       "bounds": [300, 440],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -42,15 +42,6 @@
         [0, 0, 1, 0],
         [8, 58, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 58, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
index 9c6da0c..a8b42ed 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [913, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [313, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
@@ -35,7 +34,6 @@
       "bounds": [913, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [513, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
index e1b2aa7..0416f42 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
@@ -14,13 +14,12 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [345, 2018],
-      "scrollPosition": [0, 35],
-      "transform": 5
+      "transform": 3
     },
     {
       "name": "LayoutNGBlockFlow (sticky positioned) DIV id='sticky'",
       "bounds": [345, 18],
-      "transform": 9
+      "transform": 4
     }
   ],
   "transforms": [
@@ -47,13 +46,14 @@
     },
     {
       "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
-        [0, 0, 1, -0.1],
-        [0, 0, 0, 1]
+        [0, 0, 1, 0],
+        [0, -35, 0, 1]
       ],
-      "origin": [188, 328]
+      "flattenInheritedTransform": false
     },
     {
       "id": 4,
@@ -62,60 +62,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -35, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.1],
-        [0, 0, 0, 1]
-      ],
-      "origin": [188, 328]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -35, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [0, 35, 0, 1]
       ],
       "flattenInheritedTransform": false
diff --git a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
deleted file mode 100644
index e55a5b99..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF"
-    },
-    {
-      "name": "LayoutNGBlockFlow DIV class='filtered box'",
-      "bounds": [144, 144],
-      "transform": 1
-    },
-    {
-      "name": "LayoutNGBlockFlow DIV class='compositing box'",
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "backgroundColor": "#FF0000",
-      "transform": 4
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [22, 22, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 1, 1]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
index e54214e2..940d29f 100644
--- a/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
+++ b/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 9
+      "transform": 6
     }
   ],
   "transforms": [
@@ -76,42 +76,7 @@
     },
     {
       "id": 5,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.002],
-        [0, 0, 0, 1]
-      ],
-      "origin": [152, 152]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [12, 12, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [0.766044443118978, -0.556670399226419, -0.32139380484327, 0],
-        [0, 0.5, -0.866025403784439, 0],
-        [0.642787609686539, 0.663413948168938, 0.383022221559489, 0],
-        [0, 0, 0, 1]
-      ],
-      "origin": [140, 140],
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
-    },
-    {
-      "id": 8,
-      "parent": 7,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -122,8 +87,8 @@
       "renderingContext": 1
     },
     {
-      "id": 9,
-      "parent": 8,
+      "id": 6,
+      "parent": 5,
       "transform": [
         [0.766044443118978, 0, 0.642787609686539, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt
index 5a129e6..c7e4761 100644
--- a/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ b/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -15,32 +15,32 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [285, 193],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame IFRAME",
       "bounds": [252, 172],
-      "transform": 4
+      "transform": 3
     },
     {
       "name": "LayoutView #document",
       "bounds": [250, 170],
       "backgroundColor": "#C0C0C0",
-      "transform": 6
+      "transform": 4
     },
     {
       "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 9
+      "transform": 5
     },
     {
       "name": "LayoutNGBlockFlow DIV class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 11
+      "transform": 7
     }
   ],
   "transforms": [
@@ -55,11 +55,12 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [15, 15, 0, 1]
       ]
     },
     {
@@ -69,7 +70,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [15, 15, 0, 1]
+        [8, 8, 0, 1]
       ]
     },
     {
@@ -79,52 +80,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 8, 0, 1]
+        [1, 1, 0, 1]
       ]
     },
     {
       "id": 5,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "parent": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 1, 0, 1]
-      ]
-    },
-    {
-      "id": 9,
-      "parent": 8,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -133,7 +94,7 @@
       ]
     },
     {
-      "id": 10,
+      "id": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -142,8 +103,8 @@
       ]
     },
     {
-      "id": 11,
-      "parent": 10,
+      "id": 7,
+      "parent": 6,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
index 776666d..8ec3dc06 100644
--- a/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
+++ b/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -17,20 +17,20 @@
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [285, 800],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [286, 286],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='fixed lime box'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00",
-      "transform": 4
+      "transform": 2
     }
   ],
   "transforms": [
@@ -49,24 +49,6 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [8, 72, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 72, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [10, 100, 0, 1]
       ]
     }
diff --git a/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
index 6006dee..412f11c 100644
--- a/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
+++ b/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -19,7 +19,7 @@
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#C0C0C0",
-      "transform": 6
+      "transform": 4
     }
   ],
   "transforms": [
@@ -39,21 +39,7 @@
     },
     {
       "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 394, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "renderingContext": 1
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -64,8 +50,8 @@
       "renderingContext": 1
     },
     {
-      "id": 6,
-      "parent": 5,
+      "id": 4,
+      "parent": 3,
       "transform": [
         [0.984807753012208, 0, -0.17364817766693, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
index deab175..335ebfc 100644
--- a/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -19,20 +19,19 @@
       "bounds": [189, 328],
       "contentsOpaque": true,
       "backgroundColor": "#CCCCCC",
-      "scrollPosition": [0, 50],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scroll Corner Layer",
       "position": [190, 110],
       "bounds": [15, 15],
-      "transform": 4
+      "transform": 1
     },
     {
       "name": "LayoutTextControl TEXTAREA",
       "bounds": [206, 126],
       "backgroundColor": "#CCCCCC",
-      "transform": 5
+      "transform": 3
     },
     {
       "name": "Scrolling Contents Layer",
@@ -40,14 +39,13 @@
       "bounds": [189, 328],
       "contentsOpaque": true,
       "backgroundColor": "#CCCCCC",
-      "scrollPosition": [0, 50],
-      "transform": 7
+      "transform": 4
     },
     {
       "name": "Scroll Corner Layer",
       "position": [190, 110],
       "bounds": [15, 15],
-      "transform": 8
+      "transform": 3
     }
   ],
   "transforms": [
@@ -62,68 +60,32 @@
     },
     {
       "id": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [18, 18, 0, 1]
+        [0, -50, 0, 1]
       ]
     },
     {
       "id": 3,
-      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [0, -50, 0, 1]
+        [248, 18, 0, 1]
       ]
     },
     {
       "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 18, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [248, 18, 0, 1]
-      ]
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [248, 18, 0, 1]
-      ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [0, -50, 0, 1]
       ]
-    },
-    {
-      "id": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [248, 18, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
index 8b7ef9a..2be66e4c 100644
--- a/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
+++ b/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -15,7 +15,7 @@
       "bounds": [10, 10],
       "contentsOpaque": true,
       "backgroundColor": "#FFFF00",
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -27,15 +27,6 @@
         [0, 0, 1, 0],
         [8, 18, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 18, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
index 0b084a3..f1ae139 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
@@ -34,7 +34,7 @@
           "reason": "chunk appeared"
         }
       ],
-      "transform": 2
+      "transform": 1
     }
   ],
   "transforms": [
@@ -46,15 +46,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
index 61da017..2a95ff29 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2350],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1750],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow HTML",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt
index 63227dc..018f92e 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 20],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
index 1b9cdab38..5916bdb6 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -14,7 +14,6 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [205, 1022],
-      "scrollPosition": [0, 922],
       "paintInvalidations": [
         {
           "object": "LayoutTextControl INPUT id='text'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
index 72f35f3..42cc3210 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [200, 200],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
index e651b27..f0bfca12 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 4936],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 2350],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
index 2a9edab3..2aac395a 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [185, 552],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "scrollPosition": [0, 367],
       "paintInvalidations": [
         {
           "object": "Scrolling background of LayoutNGBlockFlow DIV id='scroller'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
index 1531206..388a0122 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 1895],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 200],
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow (relative positioned) DIV id='ul'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
index 8a88d53..760e5b6 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [785, 5056],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 1400],
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
index 759e924..13de8a8 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@
       "bounds": [200, 1620],
       "contentsOpaque": true,
       "backgroundColor": "#D3D3D3",
-      "scrollPosition": [0, 450],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'test'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index ca76ab6e..7d486fd 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [1026, 1036],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [0, 451],
       "paintInvalidations": [
         {
           "object": "NGPhysicalTextFragment 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
index e067a48..3d1894b 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@
       "bounds": [939, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [339, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
@@ -35,7 +34,6 @@
       "bounds": [939, 235],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
-      "scrollPosition": [539, 0],
       "paintInvalidations": [
         {
           "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/platform/win/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt b/third_party/blink/web_tests/platform/win/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
new file mode 100644
index 0000000..f59fc24
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
@@ -0,0 +1,71 @@
+{
+  "layers": [
+    {
+      "name": "Scrolling Contents Layer",
+      "bounds": [785, 656],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFFFF"
+    },
+    {
+      "name": "LayoutNGBlockFlow MAT id='scroller'",
+      "bounds": [360, 640],
+      "transform": 2
+    },
+    {
+      "name": "Scrolling Contents Layer",
+      "bounds": [345, 2020],
+      "transform": 3
+    },
+    {
+      "name": "LayoutNGBlockFlow (sticky positioned) DIV id='sticky'",
+      "bounds": [345, 20],
+      "transform": 4
+    }
+  ],
+  "transforms": [
+    {
+      "id": 1,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, -0.1],
+        [0, 0, 0, 1]
+      ],
+      "origin": [188, 328]
+    },
+    {
+      "id": 2,
+      "parent": 1,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [8, 8, 0, 1]
+      ],
+      "flattenInheritedTransform": false
+    },
+    {
+      "id": 3,
+      "parent": 2,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [0, -35, 0, 1]
+      ],
+      "flattenInheritedTransform": false
+    },
+    {
+      "id": 4,
+      "parent": 3,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [0, 35, 0, 1]
+      ],
+      "flattenInheritedTransform": false
+    }
+  ]
+}
+
diff --git a/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
similarity index 83%
rename from third_party/blink/web_tests/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
rename to third_party/blink/web_tests/platform/win/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
index d18fb43..035b16c 100644
--- a/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
+++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 4
+      "transform": 3
     }
   ],
   "transforms": [
@@ -31,16 +31,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -49,8 +40,8 @@
       ]
     },
     {
-      "id": 4,
-      "parent": 3,
+      "id": 3,
+      "parent": 2,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt b/third_party/blink/web_tests/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
deleted file mode 100644
index d9f5c84..0000000
--- a/third_party/blink/web_tests/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [785, 656],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF"
-    },
-    {
-      "name": "LayoutNGBlockFlow MAT id='scroller'",
-      "bounds": [360, 640],
-      "transform": 2
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [345, 2020],
-      "scrollPosition": [0, 35],
-      "transform": 5
-    },
-    {
-      "name": "LayoutNGBlockFlow (sticky positioned) DIV id='sticky'",
-      "bounds": [345, 20],
-      "transform": 9
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.1],
-        [0, 0, 0, 1]
-      ],
-      "origin": [188, 328]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.1],
-        [0, 0, 0, 1]
-      ],
-      "origin": [188, 328]
-    },
-    {
-      "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -35, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, -0.1],
-        [0, 0, 0, 1]
-      ],
-      "origin": [188, 328]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 8,
-      "parent": 7,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -35, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    },
-    {
-      "id": 9,
-      "parent": 8,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 35, 0, 1]
-      ],
-      "flattenInheritedTransform": false
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
index 3274c19..6c30c19a 100644
--- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
+++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 285],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,24 +32,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
index 3274c19..6c30c19a 100644
--- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
+++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 285],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,24 +32,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
index 3274c19..6c30c19a 100644
--- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
+++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -14,13 +14,13 @@
     {
       "name": "Scrolling Contents Layer",
       "bounds": [1000, 1000],
-      "transform": 2
+      "transform": 1
     },
     {
       "name": "Scroll Corner Layer",
       "position": [285, 285],
       "bounds": [15, 15],
-      "transform": 3
+      "transform": 1
     }
   ],
   "transforms": [
@@ -32,24 +32,6 @@
         [0, 0, 1, 0],
         [8, 8, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
index 8140bed..01ed37b 100644
--- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
+++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
@@ -14,19 +14,18 @@
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [400, 602],
-      "scrollPosition": [0, 302],
       "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow DIV id='inner'",
       "bounds": [102, 102],
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "Scrolling Contents Layer",
       "position": [1, 1],
       "bounds": [100, 500],
-      "transform": 5
+      "transform": 2
     }
   ],
   "transforms": [
@@ -41,35 +40,7 @@
     },
     {
       "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -302, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 501, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, -302, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
-      "parent": 4,
+      "parent": 1,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/dav1d/README.chromium b/third_party/dav1d/README.chromium
index b66f0ef8..2bd66f38 100644
--- a/third_party/dav1d/README.chromium
+++ b/third_party/dav1d/README.chromium
@@ -1,7 +1,7 @@
 Name: dav1d is an AV1 decoder :)
 Short Name: dav1d
 URL: https://code.videolan.org/videolan/dav1d
-Version: a91a03b0e143f77bd647b481aff034eb3315ee7b
+Version: 62fcd0cb19d2fe46af7541d8185de86d45d58697
 License: 2-Clause BSD
 License File: LICENSE
 Security Critical: yes
diff --git a/third_party/dav1d/dav1d_generated.gni b/third_party/dav1d/dav1d_generated.gni
index 2599d8b..99b70bc 100644
--- a/third_party/dav1d/dav1d_generated.gni
+++ b/third_party/dav1d/dav1d_generated.gni
@@ -33,6 +33,7 @@
 ]
 
 arm32_asm_sources = [
+  "libdav1d/src/arm/32/cdef.S",
   "libdav1d/src/arm/32/looprestoration.S",
   "libdav1d/src/arm/32/mc.S",
   "libdav1d/src/arm/32/util.S",
@@ -40,6 +41,7 @@
 
 arm64_asm_sources = [
   "libdav1d/src/arm/64/cdef.S",
+  "libdav1d/src/arm/64/ipred.S",
   "libdav1d/src/arm/64/itx.S",
   "libdav1d/src/arm/64/loopfilter.S",
   "libdav1d/src/arm/64/looprestoration.S",
@@ -50,6 +52,7 @@
 
 arm_template_sources = [
   "libdav1d/src/arm/cdef_init_tmpl.c",
+  "libdav1d/src/arm/ipred_init_tmpl.c",
   "libdav1d/src/arm/itx_init_tmpl.c",
   "libdav1d/src/arm/loopfilter_init_tmpl.c",
   "libdav1d/src/arm/looprestoration_init_tmpl.c",
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 0db61b5..258271f 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -10194,6 +10194,7 @@
   <int value="2" label="Activity Not Accessible"/>
   <int value="3" label="Out of Date"/>
   <int value="4" label="Search by Image Unavailable"/>
+  <int value="5" label="OS Below Android O"/>
 </enum>
 
 <enum name="ContextMenuOption">
@@ -20855,6 +20856,8 @@
   <int value="1389" label="AUTOTESTPRIVATE_SETCLIPBOARDTEXTDATA"/>
   <int value="1390" label="AUTOTESTPRIVATE_INITIALIZEEVENTS"/>
   <int value="1391" label="AUTOTESTPRIVATE_WAITFORDISPLAYROTATION"/>
+  <int value="1392" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTART"/>
+  <int value="1393" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -32279,6 +32282,17 @@
   <int value="7" label="Cache write failed"/>
 </enum>
 
+<enum name="InstallDateBackfill">
+  <int value="0"
+      label="Valid install date was already persisted (no backfill)"/>
+  <int value="1"
+      label="Unable to get a valid install date from Android PackageManager
+             (no backfill)"/>
+  <int value="2"
+      label="Backfilled the install date by looking up a value in
+             PackageManager"/>
+</enum>
+
 <enum name="InstallStatus">
   <int value="0" label="FIRST_INSTALL_SUCCESS"/>
   <int value="1" label="INSTALL_REPAIRED"/>
@@ -36003,6 +36017,7 @@
   <int value="-885601782" label="enable-contextual-search"/>
   <int value="-884864731" label="WebPaymentsSingleAppUiSkip:enabled"/>
   <int value="-883694393" label="SyncPseudoUSSSupervisedUsers:disabled"/>
+  <int value="-882434910" label="EnableAggregatedMlSearchRanking:enabled"/>
   <int value="-881447505" label="ash-disable-shelf-model-synchronization"/>
   <int value="-881054479" label="WebAssemblyStreaming:disabled"/>
   <int value="-879055117" label="ClipboardContentSetting:enabled"/>
@@ -36082,6 +36097,7 @@
   <int value="-787238455" label="OmniboxZeroSuggestionsOnSERP:disabled"/>
   <int value="-780798969" label="disable-single-click-autofill"/>
   <int value="-778126349" label="DownloadsLocationChange:enabled"/>
+  <int value="-778098896" label="EnableAggregatedMlSearchRanking:disabled"/>
   <int value="-777126951" label="FontSrcLocalMatching:enabled"/>
   <int value="-776686417" label="SiteExplorationUi:disabled"/>
   <int value="-775321548" label="UseNewDoodleApi:disabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index c8ec672..9b2ed98c 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -4103,6 +4103,17 @@
   </summary>
 </histogram>
 
+<histogram name="Android.WebView.Metrics.BackfillInstallDate"
+    enum="InstallDateBackfill" expires_after="M83">
+  <owner>ntfschr@chromium.org</owner>
+  <owner>src/android_webview/OWNERS</owner>
+  <summary>
+    Records whether WebView needed to backfill the install date pref with
+    Android frameworks APIs. Recorded once during startup (metrics service
+    initializtion).
+  </summary>
+</histogram>
+
 <histogram name="Android.WebView.Mimetype.AppProvided"
     enum="WebViewAppProvidedMimeType" expires_after="2020-05-14">
   <owner>ntfschr@chromium.org</owner>
@@ -10560,6 +10571,19 @@
   </summary>
 </histogram>
 
+<histogram name="Autofill.BetterAuth.CardUnmaskPreflightDuration" units="ms"
+    expires_after="2020-12-15">
+  <owner>jsaul@google.com</owner>
+  <owner>manasverma@google.com</owner>
+  <owner>autofill-auth-team@google.com</owner>
+  <summary>
+    Tracking the latency of a GetDetailsForGetRealPan call to Payments servers.
+    This duration should be comparable to that of Autofill.UnmaskPrompt.Duration
+    and should ideally stay under 500 ms in order for the user to autofill their
+    credit card without experiencing much friction.
+  </summary>
+</histogram>
+
 <histogram name="Autofill.CanLogUKM" enum="BooleanEnabled" expires_after="M78">
   <owner>dlkumar@google.com</owner>
   <owner>chrome-autofill@google.com</owner>
diff --git a/tools/perf/core/shard_maps/timing_data/android_go_webview_story_timing.json b/tools/perf/core/shard_maps/timing_data/android_go_webview_story_timing.json
deleted file mode 100644
index e19e27f..0000000
--- a/tools/perf/core/shard_maps/timing_data/android_go_webview_story_timing.json
+++ /dev/null
@@ -1,678 +0,0 @@
-[
-    {
-        "duration": "24.0",
-        "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "35.0",
-        "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "24.0",
-        "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "30.0",
-        "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "27.0",
-        "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "28.0",
-        "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "27.0",
-        "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "28.0",
-        "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "29.0",
-        "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "28.0",
-        "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "28.0",
-        "name": "memory.top_10_mobile/https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "28.0",
-        "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "33.0",
-        "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "75.0",
-        "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom"
-    },
-    {
-        "duration": "81.0",
-        "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180"
-    },
-    {
-        "duration": "70.0",
-        "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404"
-    },
-    {
-        "duration": "93.0",
-        "name": "power.typical_10_mobile/http://m.facebook.com/barackobama"
-    },
-    {
-        "duration": "75.0",
-        "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486"
-    },
-    {
-        "duration": "77.0",
-        "name": "power.typical_10_mobile/http://m.ynet.co.il"
-    },
-    {
-        "duration": "99.0",
-        "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/"
-    },
-    {
-        "duration": "72.0",
-        "name": "power.typical_10_mobile/http://wapbaike.baidu.com/"
-    },
-    {
-        "duration": "75.0",
-        "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html"
-    },
-    {
-        "duration": "84.0",
-        "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html"
-    },
-    {
-        "duration": "75.0",
-        "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif"
-    },
-    {
-        "duration": "39.0",
-        "name": "start_with_url.cold.startup_pages/about:blank"
-    },
-    {
-        "duration": "42.0",
-        "name": "start_with_url.cold.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "35.0",
-        "name": "start_with_url.warm.startup_pages/about:blank"
-    },
-    {
-        "duration": "36.0",
-        "name": "start_with_url.warm.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.common_mobile/background:media:imgur"
-    },
-    {
-        "duration": "66.0",
-        "name": "system_health.common_mobile/background:news:nytimes"
-    },
-    {
-        "duration": "32.0",
-        "name": "system_health.common_mobile/background:search:google"
-    },
-    {
-        "duration": "55.0",
-        "name": "system_health.common_mobile/background:social:facebook"
-    },
-    {
-        "duration": "48.0",
-        "name": "system_health.common_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "209.0",
-        "name": "system_health.common_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "54.0",
-        "name": "system_health.common_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "149.0",
-        "name": "system_health.common_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "69.0",
-        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "105.0",
-        "name": "system_health.common_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "156.0",
-        "name": "system_health.common_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "247.0",
-        "name": "system_health.common_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "91.0",
-        "name": "system_health.common_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "77.0",
-        "name": "system_health.common_mobile/browse:news:qq"
-    },
-    {
-        "duration": "84.0",
-        "name": "system_health.common_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "307.0",
-        "name": "system_health.common_mobile/browse:news:toi"
-    },
-    {
-        "duration": "75.0",
-        "name": "system_health.common_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "115.0",
-        "name": "system_health.common_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "115.0",
-        "name": "system_health.common_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "57.0",
-        "name": "system_health.common_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "97.0",
-        "name": "system_health.common_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "156.0",
-        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "120.0",
-        "name": "system_health.common_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "126.0",
-        "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "154.0",
-        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "75.0",
-        "name": "system_health.common_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "99.0",
-        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "68.0",
-        "name": "system_health.common_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "26.0",
-        "name": "system_health.common_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "37.0",
-        "name": "system_health.common_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "27.0",
-        "name": "system_health.common_mobile/load:games:lazors"
-    },
-    {
-        "duration": "50.0",
-        "name": "system_health.common_mobile/load:games:spychase"
-    },
-    {
-        "duration": "37.0",
-        "name": "system_health.common_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "32.0",
-        "name": "system_health.common_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.common_mobile/load:media:google_images"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.common_mobile/load:media:imgur"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.common_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.common_mobile/load:media:youtube"
-    },
-    {
-        "duration": "69.0",
-        "name": "system_health.common_mobile/load:news:cnn"
-    },
-    {
-        "duration": "47.0",
-        "name": "system_health.common_mobile/load:news:irctc"
-    },
-    {
-        "duration": "41.0",
-        "name": "system_health.common_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.common_mobile/load:news:qq"
-    },
-    {
-        "duration": "33.0",
-        "name": "system_health.common_mobile/load:news:reddit"
-    },
-    {
-        "duration": "36.0",
-        "name": "system_health.common_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "33.0",
-        "name": "system_health.common_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.common_mobile/load:search:baidu"
-    },
-    {
-        "duration": "55.0",
-        "name": "system_health.common_mobile/load:search:ebay"
-    },
-    {
-        "duration": "29.0",
-        "name": "system_health.common_mobile/load:search:google"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.common_mobile/load:search:taobao"
-    },
-    {
-        "duration": "29.0",
-        "name": "system_health.common_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.common_mobile/load:search:yandex"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.common_mobile/load:social:twitter"
-    },
-    {
-        "duration": "29.0",
-        "name": "system_health.common_mobile/load:tools:docs"
-    },
-    {
-        "duration": "36.0",
-        "name": "system_health.common_mobile/load:tools:drive"
-    },
-    {
-        "duration": "28.0",
-        "name": "system_health.common_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "48.0",
-        "name": "system_health.common_mobile/load:tools:gmail"
-    },
-    {
-        "duration": "32.0",
-        "name": "system_health.common_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "45.0",
-        "name": "system_health.common_mobile/load:tools:weather"
-    },
-    {
-        "duration": "146.0",
-        "name": "system_health.common_mobile/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "145.0",
-        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.memory_mobile/background:media:imgur"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.memory_mobile/background:search:google"
-    },
-    {
-        "duration": "37.0",
-        "name": "system_health.memory_mobile/background:social:facebook"
-    },
-    {
-        "duration": "42.0",
-        "name": "system_health.memory_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "180.0",
-        "name": "system_health.memory_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "52.0",
-        "name": "system_health.memory_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "100.0",
-        "name": "system_health.memory_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "55.0",
-        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "81.0",
-        "name": "system_health.memory_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "106.0",
-        "name": "system_health.memory_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "178.0",
-        "name": "system_health.memory_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "68.0",
-        "name": "system_health.memory_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "61.0",
-        "name": "system_health.memory_mobile/browse:news:qq"
-    },
-    {
-        "duration": "79.0",
-        "name": "system_health.memory_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "184.0",
-        "name": "system_health.memory_mobile/browse:news:toi"
-    },
-    {
-        "duration": "59.0",
-        "name": "system_health.memory_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "78.0",
-        "name": "system_health.memory_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "94.0",
-        "name": "system_health.memory_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "47.0",
-        "name": "system_health.memory_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "75.0",
-        "name": "system_health.memory_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "98.0",
-        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "89.0",
-        "name": "system_health.memory_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "94.0",
-        "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "104.0",
-        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "61.0",
-        "name": "system_health.memory_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "82.0",
-        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "58.0",
-        "name": "system_health.memory_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "27.0",
-        "name": "system_health.memory_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.memory_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "28.0",
-        "name": "system_health.memory_mobile/load:games:lazors"
-    },
-    {
-        "duration": "47.0",
-        "name": "system_health.memory_mobile/load:games:spychase"
-    },
-    {
-        "duration": "36.0",
-        "name": "system_health.memory_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "40.0",
-        "name": "system_health.memory_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "32.0",
-        "name": "system_health.memory_mobile/load:media:google_images"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.memory_mobile/load:media:imgur"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.memory_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "40.0",
-        "name": "system_health.memory_mobile/load:media:youtube"
-    },
-    {
-        "duration": "59.0",
-        "name": "system_health.memory_mobile/load:news:cnn"
-    },
-    {
-        "duration": "37.0",
-        "name": "system_health.memory_mobile/load:news:irctc"
-    },
-    {
-        "duration": "39.0",
-        "name": "system_health.memory_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.memory_mobile/load:news:qq"
-    },
-    {
-        "duration": "34.0",
-        "name": "system_health.memory_mobile/load:news:reddit"
-    },
-    {
-        "duration": "34.0",
-        "name": "system_health.memory_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "33.0",
-        "name": "system_health.memory_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "40.0",
-        "name": "system_health.memory_mobile/load:search:baidu"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.memory_mobile/load:search:ebay"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.memory_mobile/load:search:google"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.memory_mobile/load:search:taobao"
-    },
-    {
-        "duration": "29.0",
-        "name": "system_health.memory_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.memory_mobile/load:search:yandex"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.memory_mobile/load:social:twitter"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.memory_mobile/load:tools:docs"
-    },
-    {
-        "duration": "33.0",
-        "name": "system_health.memory_mobile/load:tools:drive"
-    },
-    {
-        "duration": "29.0",
-        "name": "system_health.memory_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "32.0",
-        "name": "system_health.memory_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "41.0",
-        "name": "system_health.memory_mobile/load:tools:weather"
-    },
-    {
-        "duration": "290.0",
-        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "141.0",
-        "name": "v8.browsing_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "50.0",
-        "name": "v8.browsing_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "146.0",
-        "name": "v8.browsing_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "81.0",
-        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "125.0",
-        "name": "v8.browsing_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "103.0",
-        "name": "v8.browsing_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "84.0",
-        "name": "v8.browsing_mobile/browse:news:qq"
-    },
-    {
-        "duration": "93.0",
-        "name": "v8.browsing_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "423.0",
-        "name": "v8.browsing_mobile/browse:news:toi"
-    },
-    {
-        "duration": "88.0",
-        "name": "v8.browsing_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "167.0",
-        "name": "v8.browsing_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "121.0",
-        "name": "v8.browsing_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "146.0",
-        "name": "v8.browsing_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "82.0",
-        "name": "v8.browsing_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "83.0",
-        "name": "v8.browsing_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "133.0",
-        "name": "speedometer/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "250.0",
-        "name": "speedometer2/Speedometer2"
-    }
-]
diff --git a/tools/perf/core/shard_maps/timing_data/android_one_story_timing.json b/tools/perf/core/shard_maps/timing_data/android_one_story_timing.json
deleted file mode 100644
index 867ec34..0000000
--- a/tools/perf/core/shard_maps/timing_data/android_one_story_timing.json
+++ /dev/null
@@ -1,7766 +0,0 @@
-[
-    {
-        "duration": "46.11588017676768",
-        "name": "blink_perf.bindings/append-child.html"
-    },
-    {
-        "duration": "16.958273373737367",
-        "name": "blink_perf.bindings/create-element.html"
-    },
-    {
-        "duration": "14.5496565",
-        "name": "blink_perf.bindings/document-implementation.html"
-    },
-    {
-        "duration": "16.948656121212125",
-        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
-    },
-    {
-        "duration": "14.822673656565655",
-        "name": "blink_perf.bindings/first-child.html"
-    },
-    {
-        "duration": "33.83953399999999",
-        "name": "blink_perf.bindings/gc-forest.html"
-    },
-    {
-        "duration": "43.957746161616164",
-        "name": "blink_perf.bindings/gc-mini-tree.html"
-    },
-    {
-        "duration": "141.21343432323235",
-        "name": "blink_perf.bindings/gc-tree.html"
-    },
-    {
-        "duration": "15.903650722222219",
-        "name": "blink_perf.bindings/get-attribute-rare.html"
-    },
-    {
-        "duration": "14.907034525252529",
-        "name": "blink_perf.bindings/get-attribute.html"
-    },
-    {
-        "duration": "14.581188954545443",
-        "name": "blink_perf.bindings/get-element-by-id.html"
-    },
-    {
-        "duration": "17.277657515151517",
-        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
-    },
-    {
-        "duration": "14.380509030303024",
-        "name": "blink_perf.bindings/id-getter.html"
-    },
-    {
-        "duration": "15.543626989898987",
-        "name": "blink_perf.bindings/id-setter.html"
-    },
-    {
-        "duration": "22.60305574747475",
-        "name": "blink_perf.bindings/indexed-getter.html"
-    },
-    {
-        "duration": "14.349146757575758",
-        "name": "blink_perf.bindings/insert-before.html"
-    },
-    {
-        "duration": "14.458588505050503",
-        "name": "blink_perf.bindings/named-property-enumerator.html"
-    },
-    {
-        "duration": "137.87292016161615",
-        "name": "blink_perf.bindings/node-list-access.html"
-    },
-    {
-        "duration": "14.885836641414139",
-        "name": "blink_perf.bindings/node-type.html"
-    },
-    {
-        "duration": "8.835963313131312",
-        "name": "blink_perf.bindings/post-message.html"
-    },
-    {
-        "duration": "15.741981792929295",
-        "name": "blink_perf.bindings/sequence-conversion-array.html"
-    },
-    {
-        "duration": "14.268819131313137",
-        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
-    },
-    {
-        "duration": "9.770539151515154",
-        "name": "blink_perf.bindings/serialize-array.html"
-    },
-    {
-        "duration": "7.976985844444439",
-        "name": "blink_perf.bindings/serialize-long-string.html"
-    },
-    {
-        "duration": "19.88010763636364",
-        "name": "blink_perf.bindings/serialize-map.html"
-    },
-    {
-        "duration": "7.711226951515152",
-        "name": "blink_perf.bindings/serialize-nested-array.html"
-    },
-    {
-        "duration": "14.113388747474751",
-        "name": "blink_perf.bindings/set-attribute-rare.html"
-    },
-    {
-        "duration": "14.538455333333333",
-        "name": "blink_perf.bindings/set-attribute.html"
-    },
-    {
-        "duration": "2.4408102000000002E-4",
-        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
-    },
-    {
-        "duration": "6.849169650000001E-4",
-        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
-    },
-    {
-        "duration": "4.0650367625E-4",
-        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
-    },
-    {
-        "duration": "4.3269991875E-4",
-        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
-    },
-    {
-        "duration": "15.192348070707075",
-        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
-    },
-    {
-        "duration": "17.304833262626268",
-        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
-    },
-    {
-        "duration": "14.785067257575758",
-        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
-    },
-    {
-        "duration": "14.01034472727272",
-        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
-    },
-    {
-        "duration": "14.761959520202018",
-        "name": "blink_perf.bindings/undefined-first-child.html"
-    },
-    {
-        "duration": "14.571300479797983",
-        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
-    },
-    {
-        "duration": "14.570636954545458",
-        "name": "blink_perf.bindings/undefined-id-getter.html"
-    },
-    {
-        "duration": "61.69041369696972",
-        "name": "blink_perf.css/AttributeDescendantSelector.html"
-    },
-    {
-        "duration": "19.13635702020202",
-        "name": "blink_perf.css/CSSPropertySetterGetter.html"
-    },
-    {
-        "duration": "19.339181656565653",
-        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
-    },
-    {
-        "duration": "19.191257545454537",
-        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
-    },
-    {
-        "duration": "16.541487671717167",
-        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
-    },
-    {
-        "duration": "13.316393287878789",
-        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
-    },
-    {
-        "duration": "13.463064919191917",
-        "name": "blink_perf.css/ChangeStyleElementSelector.html"
-    },
-    {
-        "duration": "13.185796838383839",
-        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
-    },
-    {
-        "duration": "13.107075353535354",
-        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
-    },
-    {
-        "duration": "13.22913037878788",
-        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
-    },
-    {
-        "duration": "12.920253080808086",
-        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
-    },
-    {
-        "duration": "13.074909363636365",
-        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
-    },
-    {
-        "duration": "17.373338101010102",
-        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
-    },
-    {
-        "duration": "13.185479878787879",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "13.190450914141406",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "15.71650965151515",
-        "name": "blink_perf.css/ChangeStyleShallowTree.html"
-    },
-    {
-        "duration": "13.085204212121216",
-        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
-    },
-    {
-        "duration": "13.269187762626261",
-        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
-    },
-    {
-        "duration": "12.953174176767671",
-        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
-    },
-    {
-        "duration": "13.111936696969694",
-        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
-    },
-    {
-        "duration": "13.34662251515152",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "13.085113540404045",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "27.715978272727277",
-        "name": "blink_perf.css/ClassDescendantSelector.html"
-    },
-    {
-        "duration": "24.381304606060596",
-        "name": "blink_perf.css/ClassInvalidation.html"
-    },
-    {
-        "duration": "17.685935535353536",
-        "name": "blink_perf.css/FocusUpdate.html"
-    },
-    {
-        "duration": "14.598226055555557",
-        "name": "blink_perf.css/LoadBootstrapBlog.html"
-    },
-    {
-        "duration": "15.423096469696976",
-        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
-    },
-    {
-        "duration": "17.16691754545455",
-        "name": "blink_perf.css/LoadSemanticPageExample.html"
-    },
-    {
-        "duration": "18.817650404040403",
-        "name": "blink_perf.css/PseudoClassSelectors.html"
-    },
-    {
-        "duration": "16.922282974747475",
-        "name": "blink_perf.css/SelectorCountScaling.html"
-    },
-    {
-        "duration": "65.69019256565656",
-        "name": "blink_perf.dom/addRange.html"
-    },
-    {
-        "duration": "10.54878385858586",
-        "name": "blink_perf.dom/delete-in-password-field.html"
-    },
-    {
-        "duration": "28.800839848484852",
-        "name": "blink_perf.dom/div-editable.html"
-    },
-    {
-        "duration": "7.753005648484851",
-        "name": "blink_perf.dom/inner_html_with_selection.html"
-    },
-    {
-        "duration": "29.6456075959596",
-        "name": "blink_perf.dom/long-sibling-list.html"
-    },
-    {
-        "duration": "20.321591131313127",
-        "name": "blink_perf.dom/modify-element-classname.html"
-    },
-    {
-        "duration": "15.275251292929296",
-        "name": "blink_perf.dom/modify-element-id.html"
-    },
-    {
-        "duration": "15.726046449494952",
-        "name": "blink_perf.dom/modify-element-title.html"
-    },
-    {
-        "duration": "9.845529904040406",
-        "name": "blink_perf.dom/move-down-with-hidden-elements.html"
-    },
-    {
-        "duration": "9.873290505050502",
-        "name": "blink_perf.dom/move-up-with-hidden-elements.html"
-    },
-    {
-        "duration": "8.13497367474747",
-        "name": "blink_perf.dom/remove_child_with_selection.html"
-    },
-    {
-        "duration": "19.941283414141413",
-        "name": "blink_perf.dom/select-multiple-add.html"
-    },
-    {
-        "duration": "19.91597686868687",
-        "name": "blink_perf.dom/select-single-add.html"
-    },
-    {
-        "duration": "23.339194989898992",
-        "name": "blink_perf.dom/select-single-remove.html"
-    },
-    {
-        "duration": "13.849071040404043",
-        "name": "blink_perf.dom/textarea-dom.html"
-    },
-    {
-        "duration": "37.093740464646466",
-        "name": "blink_perf.dom/textarea-edit.html"
-    },
-    {
-        "duration": "29.98875238888889",
-        "name": "blink_perf.events/EventsDispatching.html"
-    },
-    {
-        "duration": "21.052653161616163",
-        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html"
-    },
-    {
-        "duration": "5.635564945454546E-4",
-        "name": "blink_perf.events/EventsDispatchingInShadowTrees.html"
-    },
-    {
-        "duration": "136.06589464646467",
-        "name": "blink_perf.events/hit-test-lots-of-layers.html"
-    },
-    {
-        "duration": "99.12477192929296",
-        "name": "blink_perf.image_decoder/decode-gif.html"
-    },
-    {
-        "duration": "43.500876888888904",
-        "name": "blink_perf.image_decoder/decode-jpeg.html"
-    },
-    {
-        "duration": "74.2216951313131",
-        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
-    },
-    {
-        "duration": "30.68299281818182",
-        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
-    },
-    {
-        "duration": "47.08008320202019",
-        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
-    },
-    {
-        "duration": "30.539590020202017",
-        "name": "blink_perf.image_decoder/decode-png-palette.html"
-    },
-    {
-        "duration": "66.46277998989896",
-        "name": "blink_perf.image_decoder/decode-png.html"
-    },
-    {
-        "duration": "17.4390527979798",
-        "name": "blink_perf.layout/ArabicLineLayout.html"
-    },
-    {
-        "duration": "9.042170202020204",
-        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
-    },
-    {
-        "duration": "20.984609454545442",
-        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
-    },
-    {
-        "duration": "14.823463853535348",
-        "name": "blink_perf.layout/add-remove-inline-floats.html"
-    },
-    {
-        "duration": "19.89757577777777",
-        "name": "blink_perf.layout/attach-inlines-2.html"
-    },
-    {
-        "duration": "16.10371115656566",
-        "name": "blink_perf.layout/attach-inlines.html"
-    },
-    {
-        "duration": "17.035539474747473",
-        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
-    },
-    {
-        "duration": "15.775934348484842",
-        "name": "blink_perf.layout/chapter-reflow-once-random.html"
-    },
-    {
-        "duration": "16.817956484848487",
-        "name": "blink_perf.layout/chapter-reflow-once.html"
-    },
-    {
-        "duration": "14.153643818181816",
-        "name": "blink_perf.layout/chapter-reflow-thrice.html"
-    },
-    {
-        "duration": "14.37794466161616",
-        "name": "blink_perf.layout/chapter-reflow-twice.html"
-    },
-    {
-        "duration": "14.87248212121212",
-        "name": "blink_perf.layout/chapter-reflow.html"
-    },
-    {
-        "duration": "12.27108771717172",
-        "name": "blink_perf.layout/character_fallback.html"
-    },
-    {
-        "duration": "9.37203184343434",
-        "name": "blink_perf.layout/character_fallback_aat.html"
-    },
-    {
-        "duration": "19.517009080808077",
-        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
-    },
-    {
-        "duration": "19.008170404040403",
-        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
-    },
-    {
-        "duration": "45.59447960606062",
-        "name": "blink_perf.layout/flexbox-column-nowrap.html"
-    },
-    {
-        "duration": "17.46395046464647",
-        "name": "blink_perf.layout/flexbox-column-wrap.html"
-    },
-    {
-        "duration": "19.185982868686867",
-        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
-    },
-    {
-        "duration": "18.651157666666663",
-        "name": "blink_perf.layout/flexbox-lots-of-data.html"
-    },
-    {
-        "duration": "17.18123377272727",
-        "name": "blink_perf.layout/flexbox-row-nowrap.html"
-    },
-    {
-        "duration": "17.274999040404044",
-        "name": "blink_perf.layout/flexbox-row-wrap.html"
-    },
-    {
-        "duration": "15.15245080808081",
-        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
-    },
-    {
-        "duration": "143.9531676262626",
-        "name": "blink_perf.layout/floats_100_100.html"
-    },
-    {
-        "duration": "145.81074535353537",
-        "name": "blink_perf.layout/floats_100_100_nested.html"
-    },
-    {
-        "duration": "64.99751345454547",
-        "name": "blink_perf.layout/floats_10_1000.html"
-    },
-    {
-        "duration": "26.00215734343435",
-        "name": "blink_perf.layout/floats_20_100.html"
-    },
-    {
-        "duration": "30.909975858585863",
-        "name": "blink_perf.layout/floats_20_100_nested.html"
-    },
-    {
-        "duration": "16.5200756010101",
-        "name": "blink_perf.layout/floats_2_100.html"
-    },
-    {
-        "duration": "18.324629828282834",
-        "name": "blink_perf.layout/floats_2_100_nested.html"
-    },
-    {
-        "duration": "43.982632141414136",
-        "name": "blink_perf.layout/floats_50_100.html"
-    },
-    {
-        "duration": "45.676144383838405",
-        "name": "blink_perf.layout/floats_50_100_nested.html"
-    },
-    {
-        "duration": "19.07882637373738",
-        "name": "blink_perf.layout/hindi-line-layout.html"
-    },
-    {
-        "duration": "56.14791616161616",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
-    },
-    {
-        "duration": "55.33814324242425",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
-    },
-    {
-        "duration": "55.16999016161618",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
-    },
-    {
-        "duration": "8.355988558585862",
-        "name": "blink_perf.layout/latin-complex-text.html"
-    },
-    {
-        "duration": "13.816607297979804",
-        "name": "blink_perf.layout/layers_overlap_2d.html"
-    },
-    {
-        "duration": "14.691070934343427",
-        "name": "blink_perf.layout/layers_overlap_3d.html"
-    },
-    {
-        "duration": "61.910897626262624",
-        "name": "blink_perf.layout/line-layout-line-height.html"
-    },
-    {
-        "duration": "17.49636109090909",
-        "name": "blink_perf.layout/line-layout-repeat-append.html"
-    },
-    {
-        "duration": "16.218182060606054",
-        "name": "blink_perf.layout/line-layout.html"
-    },
-    {
-        "duration": "9.823211005050505",
-        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
-    },
-    {
-        "duration": "11.646156136363638",
-        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
-    },
-    {
-        "duration": "26.90012944444445",
-        "name": "blink_perf.layout/long-line-nowrap.html"
-    },
-    {
-        "duration": "18.99501368686869",
-        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
-    },
-    {
-        "duration": "14.022372070707068",
-        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
-    },
-    {
-        "duration": "16.71774947474747",
-        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
-    },
-    {
-        "duration": "16.89946072727272",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
-    },
-    {
-        "duration": "16.88104084848485",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
-    },
-    {
-        "duration": "17.365956883838386",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
-    },
-    {
-        "duration": "19.290936484848476",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
-    },
-    {
-        "duration": "17.691987414141416",
-        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
-    },
-    {
-        "duration": "15.683902126262621",
-        "name": "blink_perf.layout/nested-grid.html"
-    },
-    {
-        "duration": "16.033607530303033",
-        "name": "blink_perf.layout/nested-percent-height-tables.html"
-    },
-    {
-        "duration": "215.13033382828283",
-        "name": "blink_perf.layout/subtree-detaching.html"
-    },
-    {
-        "duration": "17.123495368686868",
-        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
-    },
-    {
-        "duration": "25.958471121212106",
-        "name": "blink_perf.layout/word-break-break-all.html"
-    },
-    {
-        "duration": "24.225948595959597",
-        "name": "blink_perf.layout/word-break-break-word.html"
-    },
-    {
-        "duration": "24.232047171717173",
-        "name": "blink_perf.layout/word-wrap-break-word.html"
-    },
-    {
-        "duration": "46.61487470707067",
-        "name": "blink_perf.owp_storage/blob-perf-files.html"
-    },
-    {
-        "duration": "30.82406958585858",
-        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
-    },
-    {
-        "duration": "28.947062080808085",
-        "name": "blink_perf.owp_storage/blob-perf-shm.html"
-    },
-    {
-        "duration": "29.7789653131313",
-        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
-    },
-    {
-        "duration": "32.96900536363636",
-        "name": "blink_perf.owp_storage/idb-load-docs.html"
-    },
-    {
-        "duration": "33.72758421717172",
-        "name": "blink_perf.parser/css-parser-yui.html"
-    },
-    {
-        "duration": "66.4045916767677",
-        "name": "blink_perf.parser/html-parser-threaded.html"
-    },
-    {
-        "duration": "81.41358826262626",
-        "name": "blink_perf.parser/html-parser.html"
-    },
-    {
-        "duration": "4.0349364125E-4",
-        "name": "blink_perf.parser/html5-full-render.html"
-    },
-    {
-        "duration": "14.808145494949493",
-        "name": "blink_perf.parser/iframe-append-remove.html"
-    },
-    {
-        "duration": "17.203239313131316",
-        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
-    },
-    {
-        "duration": "15.875073202020195",
-        "name": "blink_perf.parser/innerHTML-setter.html"
-    },
-    {
-        "duration": "15.367305939393942",
-        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
-    },
-    {
-        "duration": "15.32187304040404",
-        "name": "blink_perf.parser/query-selector-all-attribute.html"
-    },
-    {
-        "duration": "17.601194106060603",
-        "name": "blink_perf.parser/query-selector-all-class-deep.html"
-    },
-    {
-        "duration": "18.13945328282828",
-        "name": "blink_perf.parser/query-selector-all-class-first.html"
-    },
-    {
-        "duration": "15.904186277777777",
-        "name": "blink_perf.parser/query-selector-all-class-last.html"
-    },
-    {
-        "duration": "14.115226121212123",
-        "name": "blink_perf.parser/query-selector-all-class.html"
-    },
-    {
-        "duration": "16.18732083838383",
-        "name": "blink_perf.parser/query-selector-all-deep.html"
-    },
-    {
-        "duration": "19.091935914141416",
-        "name": "blink_perf.parser/query-selector-all-first.html"
-    },
-    {
-        "duration": "24.55646744444445",
-        "name": "blink_perf.parser/query-selector-all-id-deep.html"
-    },
-    {
-        "duration": "18.086754898989895",
-        "name": "blink_perf.parser/query-selector-all-id-first.html"
-    },
-    {
-        "duration": "26.15980541414142",
-        "name": "blink_perf.parser/query-selector-all-id-last.html"
-    },
-    {
-        "duration": "15.550700924242415",
-        "name": "blink_perf.parser/query-selector-all-last.html"
-    },
-    {
-        "duration": "17.006558944444443",
-        "name": "blink_perf.parser/query-selector-deep.html"
-    },
-    {
-        "duration": "18.03450713131312",
-        "name": "blink_perf.parser/query-selector-first.html"
-    },
-    {
-        "duration": "19.657671040404026",
-        "name": "blink_perf.parser/query-selector-id-deep.html"
-    },
-    {
-        "duration": "22.588081151515148",
-        "name": "blink_perf.parser/query-selector-id-last.html"
-    },
-    {
-        "duration": "15.788842535353535",
-        "name": "blink_perf.parser/query-selector-last.html"
-    },
-    {
-        "duration": "21.046585707070708",
-        "name": "blink_perf.parser/simple-url.html"
-    },
-    {
-        "duration": "18.62458833333334",
-        "name": "blink_perf.parser/textarea-parsing.html"
-    },
-    {
-        "duration": "32.91694304040405",
-        "name": "blink_perf.parser/tiny-innerHTML.html"
-    },
-    {
-        "duration": "16.920294631313137",
-        "name": "blink_perf.parser/url-parser.html"
-    },
-    {
-        "duration": "15.02444823737374",
-        "name": "blink_perf.parser/xml-parser.html"
-    },
-    {
-        "duration": "23.420363333333345",
-        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
-    },
-    {
-        "duration": "12.240019111111105",
-        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
-    },
-    {
-        "duration": "12.256521939393938",
-        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
-    },
-    {
-        "duration": "8.530290705050506",
-        "name": "blink_perf.shadow_dom/shadow-style-share.html"
-    },
-    {
-        "duration": "9.645421439393939",
-        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
-    },
-    {
-        "duration": "10.80601707070707",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html"
-    },
-    {
-        "duration": "18.38711732323233",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html"
-    },
-    {
-        "duration": "35.23128183838385",
-        "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html"
-    },
-    {
-        "duration": "39.11045890909092",
-        "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html"
-    },
-    {
-        "duration": "10.056312080808079",
-        "name": "blink_perf.shadow_dom/v0-content-reprojection.html"
-    },
-    {
-        "duration": "8.673109136363633",
-        "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html"
-    },
-    {
-        "duration": "8.43266895151515",
-        "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html"
-    },
-    {
-        "duration": "10.449778055555555",
-        "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html"
-    },
-    {
-        "duration": "9.106470732323235",
-        "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html"
-    },
-    {
-        "duration": "94.71011717171722",
-        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
-    },
-    {
-        "duration": "8.098405365656566",
-        "name": "blink_perf.shadow_dom/v1-distribution.html"
-    },
-    {
-        "duration": "8.329176944444445",
-        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
-    },
-    {
-        "duration": "87.73995875757576",
-        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
-    },
-    {
-        "duration": "253.66173848484874",
-        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
-    },
-    {
-        "duration": "8.146064798989894",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
-    },
-    {
-        "duration": "8.090373575757576",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
-    },
-    {
-        "duration": "12.385857883838383",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
-    },
-    {
-        "duration": "8.122181270707065",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "8.20882502323232",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "10.111110398989897",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
-    },
-    {
-        "duration": "8.15515672828283",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "14.128646833333342",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "7.719611421212118",
-        "name": "blink_perf.shadow_dom/v1-slot-append.html"
-    },
-    {
-        "duration": "24.600128242424226",
-        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
-    },
-    {
-        "duration": "24.598114505050493",
-        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
-    },
-    {
-        "duration": "7.645644859595962",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
-    },
-    {
-        "duration": "7.745897417171716",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
-    },
-    {
-        "duration": "15.907482181818184",
-        "name": "blink_perf.svg/AzLizardBenjiPark.html"
-    },
-    {
-        "duration": "21.331298101010095",
-        "name": "blink_perf.svg/Bamboo.html"
-    },
-    {
-        "duration": "10.371573535353537",
-        "name": "blink_perf.svg/Cactus.html"
-    },
-    {
-        "duration": "10.643708439393938",
-        "name": "blink_perf.svg/Cowboy.html"
-    },
-    {
-        "duration": "12.554780833333332",
-        "name": "blink_perf.svg/Cowboy_transform.html"
-    },
-    {
-        "duration": "8.705071404040405",
-        "name": "blink_perf.svg/CrawFishGanson.html"
-    },
-    {
-        "duration": "9.582054782828283",
-        "name": "blink_perf.svg/Debian.html"
-    },
-    {
-        "duration": "8.41623482222222",
-        "name": "blink_perf.svg/DropsOnABlade.html"
-    },
-    {
-        "duration": "8.636321712121216",
-        "name": "blink_perf.svg/FlowerFromMyGarden.html"
-    },
-    {
-        "duration": "8.948276621212123",
-        "name": "blink_perf.svg/FoodLeifLodahl.html"
-    },
-    {
-        "duration": "9.347815186868687",
-        "name": "blink_perf.svg/France.html"
-    },
-    {
-        "duration": "8.136593308080808",
-        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
-    },
-    {
-        "duration": "10.356708782828285",
-        "name": "blink_perf.svg/GearFlowers.html"
-    },
-    {
-        "duration": "8.858241535353537",
-        "name": "blink_perf.svg/HarveyRayner.html"
-    },
-    {
-        "duration": "16.043189540404043",
-        "name": "blink_perf.svg/HereGear.html"
-    },
-    {
-        "duration": "22.754950444444447",
-        "name": "blink_perf.svg/MtSaintHelens.html"
-    },
-    {
-        "duration": "7.991205082828283",
-        "name": "blink_perf.svg/Samurai.html"
-    },
-    {
-        "duration": "32.0023292",
-        "name": "blink_perf.svg/SierpinskiCarpet.html"
-    },
-    {
-        "duration": "12.137011707070709",
-        "name": "blink_perf.svg/SvgCubics.html"
-    },
-    {
-        "duration": "12.484785217171718",
-        "name": "blink_perf.svg/SvgHitTesting.html"
-    },
-    {
-        "duration": "15.615543646464646",
-        "name": "blink_perf.svg/SvgNestedUse.html"
-    },
-    {
-        "duration": "9.620697813131315",
-        "name": "blink_perf.svg/UnderTheSee.html"
-    },
-    {
-        "duration": "11.160207944444442",
-        "name": "blink_perf.svg/WorldIso.html"
-    },
-    {
-        "duration": "20.824468656565653",
-        "name": "blink_perf.svg/Worldcup.html"
-    },
-    {
-        "duration": "53.155898777777765",
-        "name": "dromaeo/http://dromaeo.com?dom-attr"
-    },
-    {
-        "duration": "47.9726883939394",
-        "name": "dromaeo/http://dromaeo.com?dom-modify"
-    },
-    {
-        "duration": "56.1269846262626",
-        "name": "dromaeo/http://dromaeo.com?dom-query"
-    },
-    {
-        "duration": "34.765811171717175",
-        "name": "dromaeo/http://dromaeo.com?dom-traverse"
-    },
-    {
-        "duration": "33.62477897979797",
-        "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "18.792705909090913",
-        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "19.725633959595964",
-        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "917.7858718181816",
-        "name": "jetstream/http://browserbench.org/JetStream/"
-    },
-    {
-        "duration": "289.5452808080808",
-        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
-    },
-    {
-        "duration": "31.956614871212114",
-        "name": "loading.mobile/58Pic"
-    },
-    {
-        "duration": "60.59536039473685",
-        "name": "loading.mobile/58Pic_3g"
-    },
-    {
-        "duration": "46.20916877525253",
-        "name": "loading.mobile/Amazon"
-    },
-    {
-        "duration": "99.08260418421052",
-        "name": "loading.mobile/Amazon_3g"
-    },
-    {
-        "duration": "46.1637123510101",
-        "name": "loading.mobile/BOLNoticias"
-    },
-    {
-        "duration": "89.38759730263158",
-        "name": "loading.mobile/BOLNoticias_3g"
-    },
-    {
-        "duration": "37.18312434848485",
-        "name": "loading.mobile/Baidu"
-    },
-    {
-        "duration": "67.70539143421054",
-        "name": "loading.mobile/Baidu_3g"
-    },
-    {
-        "duration": "56.09196488888889",
-        "name": "loading.mobile/Bradesco"
-    },
-    {
-        "duration": "131.17041710526317",
-        "name": "loading.mobile/Bradesco_3g"
-    },
-    {
-        "duration": "43.02147597727272",
-        "name": "loading.mobile/Dailymotion"
-    },
-    {
-        "duration": "83.23533499999999",
-        "name": "loading.mobile/Dailymotion_3g"
-    },
-    {
-        "duration": "47.15194810606061",
-        "name": "loading.mobile/Dawn"
-    },
-    {
-        "duration": "86.90406444736841",
-        "name": "loading.mobile/Dawn_3g"
-    },
-    {
-        "duration": "30.667632087542096",
-        "name": "loading.mobile/DevOpera"
-    },
-    {
-        "duration": "18.991100671052635",
-        "name": "loading.mobile/DevOpera_cold"
-    },
-    {
-        "duration": "61.76827615789473",
-        "name": "loading.mobile/DevOpera_cold_3g"
-    },
-    {
-        "duration": "26.104528171052635",
-        "name": "loading.mobile/DevOpera_hot"
-    },
-    {
-        "duration": "30.33898446052631",
-        "name": "loading.mobile/DevOpera_hot_3g"
-    },
-    {
-        "duration": "22.006514118421048",
-        "name": "loading.mobile/DevOpera_warm"
-    },
-    {
-        "duration": "26.286113671052636",
-        "name": "loading.mobile/DevOpera_warm_3g"
-    },
-    {
-        "duration": "58.01909592676769",
-        "name": "loading.mobile/Dramaq"
-    },
-    {
-        "duration": "121.84758748684212",
-        "name": "loading.mobile/Dramaq_3g"
-    },
-    {
-        "duration": "35.475206929292916",
-        "name": "loading.mobile/EnquiryIndianRail"
-    },
-    {
-        "duration": "73.92523423684213",
-        "name": "loading.mobile/EnquiryIndianRail_3g"
-    },
-    {
-        "duration": "40.78022890151514",
-        "name": "loading.mobile/Facebook"
-    },
-    {
-        "duration": "76.20553767105264",
-        "name": "loading.mobile/Facebook_3g"
-    },
-    {
-        "duration": "42.598053430976435",
-        "name": "loading.mobile/FlipBoard"
-    },
-    {
-        "duration": "23.298914171052637",
-        "name": "loading.mobile/FlipBoard_cold"
-    },
-    {
-        "duration": "79.50976585526318",
-        "name": "loading.mobile/FlipBoard_cold_3g"
-    },
-    {
-        "duration": "36.02893692105263",
-        "name": "loading.mobile/FlipBoard_hot"
-    },
-    {
-        "duration": "46.03850914473685",
-        "name": "loading.mobile/FlipBoard_hot_3g"
-    },
-    {
-        "duration": "30.043965907894734",
-        "name": "loading.mobile/FlipBoard_warm"
-    },
-    {
-        "duration": "42.93046400000001",
-        "name": "loading.mobile/FlipBoard_warm_3g"
-    },
-    {
-        "duration": "50.98594493097643",
-        "name": "loading.mobile/FlipKart"
-    },
-    {
-        "duration": "29.46684753947368",
-        "name": "loading.mobile/FlipKart_cold"
-    },
-    {
-        "duration": "80.45087688157894",
-        "name": "loading.mobile/FlipKart_cold_3g"
-    },
-    {
-        "duration": "53.2245862763158",
-        "name": "loading.mobile/FlipKart_hot"
-    },
-    {
-        "duration": "53.93000388157895",
-        "name": "loading.mobile/FlipKart_hot_3g"
-    },
-    {
-        "duration": "40.59452125000001",
-        "name": "loading.mobile/FlipKart_warm"
-    },
-    {
-        "duration": "42.51365721052632",
-        "name": "loading.mobile/FlipKart_warm_3g"
-    },
-    {
-        "duration": "37.9557026590909",
-        "name": "loading.mobile/FranceTVInfo"
-    },
-    {
-        "duration": "79.0056995",
-        "name": "loading.mobile/FranceTVInfo_3g"
-    },
-    {
-        "duration": "1.8709898E-4",
-        "name": "loading.mobile/G1"
-    },
-    {
-        "duration": "136.92386827631574",
-        "name": "loading.mobile/G1_3g"
-    },
-    {
-        "duration": "85.16835395454547",
-        "name": "loading.mobile/GSShop"
-    },
-    {
-        "duration": "205.10452092105263",
-        "name": "loading.mobile/GSShop_3g"
-    },
-    {
-        "duration": "34.37991998232324",
-        "name": "loading.mobile/GoogleBrazil"
-    },
-    {
-        "duration": "69.98174694736842",
-        "name": "loading.mobile/GoogleBrazil_3g"
-    },
-    {
-        "duration": "33.29722180050504",
-        "name": "loading.mobile/GoogleIndia"
-    },
-    {
-        "duration": "63.63973656578948",
-        "name": "loading.mobile/GoogleIndia_3g"
-    },
-    {
-        "duration": "31.866510209595962",
-        "name": "loading.mobile/GoogleIndonesia"
-    },
-    {
-        "duration": "62.288706447368426",
-        "name": "loading.mobile/GoogleIndonesia_3g"
-    },
-    {
-        "duration": "5.684852624999999E-4",
-        "name": "loading.mobile/GoogleRedirectToGoogleJapan"
-    },
-    {
-        "duration": "98.12175659210527",
-        "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g"
-    },
-    {
-        "duration": "1.9367337250000003E-4",
-        "name": "loading.mobile/HashOcean"
-    },
-    {
-        "duration": "45.4262358409091",
-        "name": "loading.mobile/Hongkiat"
-    },
-    {
-        "duration": "96.30480825",
-        "name": "loading.mobile/Hongkiat_3g"
-    },
-    {
-        "duration": "1.8424987825E-4",
-        "name": "loading.mobile/IBI"
-    },
-    {
-        "duration": "50.74642942929292",
-        "name": "loading.mobile/KapanLagi"
-    },
-    {
-        "duration": "106.50882002631579",
-        "name": "loading.mobile/KapanLagi_3g"
-    },
-    {
-        "duration": "61.659650835858606",
-        "name": "loading.mobile/Kaskus"
-    },
-    {
-        "duration": "128.32314298684213",
-        "name": "loading.mobile/Kaskus_3g"
-    },
-    {
-        "duration": "47.325242303030315",
-        "name": "loading.mobile/LocalMoxie"
-    },
-    {
-        "duration": "101.44414681578948",
-        "name": "loading.mobile/LocalMoxie_3g"
-    },
-    {
-        "duration": "26.88065861616162",
-        "name": "loading.mobile/Locanto"
-    },
-    {
-        "duration": "50.282310671052635",
-        "name": "loading.mobile/Locanto_3g"
-    },
-    {
-        "duration": "48.74100935353533",
-        "name": "loading.mobile/OLX"
-    },
-    {
-        "duration": "107.70253847368421",
-        "name": "loading.mobile/OLX_3g"
-    },
-    {
-        "duration": "34.35447536363637",
-        "name": "loading.mobile/QQNews"
-    },
-    {
-        "duration": "66.28642030263157",
-        "name": "loading.mobile/QQNews_3g"
-    },
-    {
-        "duration": "44.1245688409091",
-        "name": "loading.mobile/SlideShare"
-    },
-    {
-        "duration": "97.80831707894737",
-        "name": "loading.mobile/SlideShare_3g"
-    },
-    {
-        "duration": "25.53933844107744",
-        "name": "loading.mobile/Suumo"
-    },
-    {
-        "duration": "18.337011973684213",
-        "name": "loading.mobile/Suumo_cold"
-    },
-    {
-        "duration": "36.10378865789473",
-        "name": "loading.mobile/Suumo_cold_3g"
-    },
-    {
-        "duration": "22.59527711842105",
-        "name": "loading.mobile/Suumo_hot"
-    },
-    {
-        "duration": "30.8603525131579",
-        "name": "loading.mobile/Suumo_hot_3g"
-    },
-    {
-        "duration": "19.497166092105267",
-        "name": "loading.mobile/Suumo_warm"
-    },
-    {
-        "duration": "27.630094052631577",
-        "name": "loading.mobile/Suumo_warm_3g"
-    },
-    {
-        "duration": "61.42332302020203",
-        "name": "loading.mobile/Thairath"
-    },
-    {
-        "duration": "143.7809572368421",
-        "name": "loading.mobile/Thairath_3g"
-    },
-    {
-        "duration": "59.35385573989898",
-        "name": "loading.mobile/TheStar"
-    },
-    {
-        "duration": "110.82457996052626",
-        "name": "loading.mobile/TheStar_3g"
-    },
-    {
-        "duration": "50.85479362121212",
-        "name": "loading.mobile/TribunNews"
-    },
-    {
-        "duration": "97.30749690789473",
-        "name": "loading.mobile/TribunNews_3g"
-    },
-    {
-        "duration": "38.36837163888888",
-        "name": "loading.mobile/Twitter"
-    },
-    {
-        "duration": "81.63131626315787",
-        "name": "loading.mobile/Twitter_3g"
-    },
-    {
-        "duration": "34.93738085353535",
-        "name": "loading.mobile/VoiceMemos"
-    },
-    {
-        "duration": "20.61404625",
-        "name": "loading.mobile/VoiceMemos_cold"
-    },
-    {
-        "duration": "69.47634473684211",
-        "name": "loading.mobile/VoiceMemos_cold_3g"
-    },
-    {
-        "duration": "29.273142592105263",
-        "name": "loading.mobile/VoiceMemos_hot"
-    },
-    {
-        "duration": "36.053650552631574",
-        "name": "loading.mobile/VoiceMemos_hot_3g"
-    },
-    {
-        "duration": "24.43059014473684",
-        "name": "loading.mobile/VoiceMemos_warm"
-    },
-    {
-        "duration": "30.975171618421058",
-        "name": "loading.mobile/VoiceMemos_warm_3g"
-    },
-    {
-        "duration": "37.00499723737375",
-        "name": "loading.mobile/Wikipedia"
-    },
-    {
-        "duration": "78.14831773684212",
-        "name": "loading.mobile/Wikipedia_3g"
-    },
-    {
-        "duration": "52.026927265151485",
-        "name": "loading.mobile/YahooNews"
-    },
-    {
-        "duration": "92.31386361842108",
-        "name": "loading.mobile/YahooNews_3g"
-    },
-    {
-        "duration": "39.80022844949496",
-        "name": "loading.mobile/Youtube"
-    },
-    {
-        "duration": "82.23618368421053",
-        "name": "loading.mobile/Youtube_3g"
-    },
-    {
-        "duration": "37.548987292929304",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4"
-    },
-    {
-        "duration": "47.52511585858589",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4"
-    },
-    {
-        "duration": "47.83807758585859",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true"
-    },
-    {
-        "duration": "44.83968999999999",
-        "name": "media.mobile/mse.html?media=h264_video.mp4"
-    },
-    {
-        "duration": "54.516439272727254",
-        "name": "media.mobile/video.html?src=crowd.ogg&type=audio"
-    },
-    {
-        "duration": "62.23455444444445",
-        "name": "media.mobile/video.html?src=crowd1080_vp9.webm"
-    },
-    {
-        "duration": "41.76764358585861",
-        "name": "media.mobile/video.html?src=crowd1080_vp9.webm&seek"
-    },
-    {
-        "duration": "47.126835656565675",
-        "name": "media.mobile/video.html?src=crowd720_vp9.webm"
-    },
-    {
-        "duration": "49.41520859595958",
-        "name": "media.mobile/video.html?src=tulip2.m4a&type=audio"
-    },
-    {
-        "duration": "48.11606256565658",
-        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio"
-    },
-    {
-        "duration": "25.79813473737373",
-        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek"
-    },
-    {
-        "duration": "55.052803565656546",
-        "name": "media.mobile/video.html?src=tulip2.mp4"
-    },
-    {
-        "duration": "56.06238214141414",
-        "name": "media.mobile/video.html?src=tulip2.mp4&busyjs"
-    },
-    {
-        "duration": "32.144614121212115",
-        "name": "media.mobile/video.html?src=tulip2.mp4&seek"
-    },
-    {
-        "duration": "49.01505273737373",
-        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio"
-    },
-    {
-        "duration": "27.163253767676775",
-        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek"
-    },
-    {
-        "duration": "72.98946956565658",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm"
-    },
-    {
-        "duration": "44.6877756767677",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm&background"
-    },
-    {
-        "duration": "55.27168175757573",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm&seek"
-    },
-    {
-        "duration": "117.48906454545457",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm_Regular-3G"
-    },
-    {
-        "duration": "49.15951075757575",
-        "name": "media.mobile/video.html?src=tulip2.wav&type=audio"
-    },
-    {
-        "duration": "26.47638853535353",
-        "name": "media.mobile/video.html?src=tulip2.wav&type=audio&seek"
-    },
-    {
-        "duration": "22.527336551515155",
-        "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "21.544606913131307",
-        "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "22.020035440404047",
-        "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "21.823783551515145",
-        "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "22.230730927272727",
-        "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "21.852501339393946",
-        "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "22.072938391919187",
-        "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "22.03361466060606",
-        "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "21.90003983434342",
-        "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "22.39802428484849",
-        "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "28.5357551959596",
-        "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "25.037982616161603",
-        "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "26.87284916161616",
-        "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "25.19328363030302",
-        "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "26.279713860606066",
-        "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "26.690566391919187",
-        "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "26.626705872727282",
-        "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "26.52315601212121",
-        "name": "memory.top_10_mobile/https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "25.82676931515152",
-        "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "28.61734269090909",
-        "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "0.001360738275",
-        "name": "octane/http://chromium.github.io/octane/index.html?auto=1"
-    },
-    {
-        "duration": "31.69687512121211",
-        "name": "oortonline_tbmv2/http://oortonline.gl/#run"
-    },
-    {
-        "duration": "63.57457797979801",
-        "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom"
-    },
-    {
-        "duration": "67.96207150505052",
-        "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180"
-    },
-    {
-        "duration": "58.67883387878788",
-        "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404"
-    },
-    {
-        "duration": "76.84976247474748",
-        "name": "power.typical_10_mobile/http://m.facebook.com/barackobama"
-    },
-    {
-        "duration": "65.65702871717171",
-        "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486"
-    },
-    {
-        "duration": "64.22954689898985",
-        "name": "power.typical_10_mobile/http://m.ynet.co.il"
-    },
-    {
-        "duration": "66.61782502020202",
-        "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/"
-    },
-    {
-        "duration": "59.39086063636365",
-        "name": "power.typical_10_mobile/http://wapbaike.baidu.com/"
-    },
-    {
-        "duration": "61.875478222222235",
-        "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html"
-    },
-    {
-        "duration": "70.08670448484844",
-        "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html"
-    },
-    {
-        "duration": "63.92302949494951",
-        "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif"
-    },
-    {
-        "duration": "30.655771909090916",
-        "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html"
-    },
-    {
-        "duration": "47.64507763636365",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
-    },
-    {
-        "duration": "25.768173898989907",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
-    },
-    {
-        "duration": "46.557966424242416",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
-    },
-    {
-        "duration": "37.83792338383839",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
-    },
-    {
-        "duration": "25.150081313131317",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
-    },
-    {
-        "duration": "78.2400534141414",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
-    },
-    {
-        "duration": "30.64900856565657",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
-    },
-    {
-        "duration": "58.30685618181819",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
-    },
-    {
-        "duration": "52.229418262626254",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
-    },
-    {
-        "duration": "30.209122151515146",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
-    },
-    {
-        "duration": "30.009297999999994",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
-    },
-    {
-        "duration": "64.24319185858586",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
-    },
-    {
-        "duration": "60.81319365656563",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
-    },
-    {
-        "duration": "25.45603733333334",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
-    },
-    {
-        "duration": "13.49614359090909",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
-    },
-    {
-        "duration": "63.34203653535352",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
-    },
-    {
-        "duration": "73.68662352525253",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
-    },
-    {
-        "duration": "30.835506484848498",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
-    },
-    {
-        "duration": "3.7465776571428573E-4",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
-    },
-    {
-        "duration": "25.612182595959595",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
-    },
-    {
-        "duration": "27.452922878787888",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
-    },
-    {
-        "duration": "59.709742585858606",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
-    },
-    {
-        "duration": "9.049177199999998E-4",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
-    },
-    {
-        "duration": "125.35130679797983",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
-    },
-    {
-        "duration": "65.16591459595963",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
-    },
-    {
-        "duration": "4.337628666666667E-4",
-        "name": "rendering.mobile/amazon"
-    },
-    {
-        "duration": "2.1767616E-4",
-        "name": "rendering.mobile/amazon_desktop"
-    },
-    {
-        "duration": "2.319018033333333E-4",
-        "name": "rendering.mobile/amazon_desktop_gpu_raster"
-    },
-    {
-        "duration": "4.076163E-4",
-        "name": "rendering.mobile/amazon_sync_scroll"
-    },
-    {
-        "duration": "35.39871295454544",
-        "name": "rendering.mobile/analog_clock_svg"
-    },
-    {
-        "duration": "35.97307738383836",
-        "name": "rendering.mobile/androidpolice"
-    },
-    {
-        "duration": "44.09456423809524",
-        "name": "rendering.mobile/androidpolice_mobile"
-    },
-    {
-        "duration": "42.41609833333333",
-        "name": "rendering.mobile/androidpolice_mobile_sync_scroll"
-    },
-    {
-        "duration": "37.313202383838366",
-        "name": "rendering.mobile/androidpolice_sync_scroll"
-    },
-    {
-        "duration": "8.266672194444444",
-        "name": "rendering.mobile/animometer_webgl"
-    },
-    {
-        "duration": "7.940843294444444",
-        "name": "rendering.mobile/aquarium"
-    },
-    {
-        "duration": "34.62126822222223",
-        "name": "rendering.mobile/background_color_animation"
-    },
-    {
-        "duration": "35.335315888888886",
-        "name": "rendering.mobile/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "22.586555515151524",
-        "name": "rendering.mobile/baidu"
-    },
-    {
-        "duration": "25.449218842105264",
-        "name": "rendering.mobile/baidu_mobile"
-    },
-    {
-        "duration": "23.871524631578946",
-        "name": "rendering.mobile/baidu_mobile_sync_scroll"
-    },
-    {
-        "duration": "22.811048727272734",
-        "name": "rendering.mobile/baidu_sync_scroll"
-    },
-    {
-        "duration": "39.096217606060605",
-        "name": "rendering.mobile/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "35.31748415151515",
-        "name": "rendering.mobile/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "34.97136248484849",
-        "name": "rendering.mobile/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "34.503684484848485",
-        "name": "rendering.mobile/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "34.75706066666666",
-        "name": "rendering.mobile/balls_javascript_canvas"
-    },
-    {
-        "duration": "34.38402896969697",
-        "name": "rendering.mobile/balls_javascript_css"
-    },
-    {
-        "duration": "61.84612615151515",
-        "name": "rendering.mobile/balls_svg_animations"
-    },
-    {
-        "duration": "41.329573",
-        "name": "rendering.mobile/basic_stream"
-    },
-    {
-        "duration": "20.999014696969702",
-        "name": "rendering.mobile/bing"
-    },
-    {
-        "duration": "23.548457447368413",
-        "name": "rendering.mobile/bing_mobile"
-    },
-    {
-        "duration": "22.53785831578948",
-        "name": "rendering.mobile/bing_mobile_sync_scroll"
-    },
-    {
-        "duration": "21.041294737373747",
-        "name": "rendering.mobile/bing_sync_scroll"
-    },
-    {
-        "duration": "7.711096233333333",
-        "name": "rendering.mobile/blob"
-    },
-    {
-        "duration": "32.413254101010104",
-        "name": "rendering.mobile/blogspot"
-    },
-    {
-        "duration": "42.76526068686869",
-        "name": "rendering.mobile/blogspot_desktop"
-    },
-    {
-        "duration": "43.47625450505053",
-        "name": "rendering.mobile/blogspot_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.340268789473683",
-        "name": "rendering.mobile/blogspot_mobile"
-    },
-    {
-        "duration": "23.17890228947369",
-        "name": "rendering.mobile/blogspot_mobile_sync_scroll"
-    },
-    {
-        "duration": "24.184026626262632",
-        "name": "rendering.mobile/blogspot_sync_scroll"
-    },
-    {
-        "duration": "48.89654309090909",
-        "name": "rendering.mobile/boingboing"
-    },
-    {
-        "duration": "54.25529005263157",
-        "name": "rendering.mobile/boingboing_mobile"
-    },
-    {
-        "duration": "51.073391505050495",
-        "name": "rendering.mobile/boingboing_sync_scroll"
-    },
-    {
-        "duration": "33.65270923232323",
-        "name": "rendering.mobile/booking.com"
-    },
-    {
-        "duration": "31.35980329292927",
-        "name": "rendering.mobile/booking.com_desktop"
-    },
-    {
-        "duration": "32.26860741414143",
-        "name": "rendering.mobile/booking.com_desktop_gpu_raster"
-    },
-    {
-        "duration": "34.433051368421054",
-        "name": "rendering.mobile/booking.com_mobile"
-    },
-    {
-        "duration": "34.19782494736842",
-        "name": "rendering.mobile/booking.com_mobile_sync_scroll"
-    },
-    {
-        "duration": "31.893064383838386",
-        "name": "rendering.mobile/booking.com_sync_scroll"
-    },
-    {
-        "duration": "27.280201805555553",
-        "name": "rendering.mobile/bouncing_balls_15"
-    },
-    {
-        "duration": "55.12635502777778",
-        "name": "rendering.mobile/bouncing_balls_shadow"
-    },
-    {
-        "duration": "38.27855283333333",
-        "name": "rendering.mobile/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "28.83284977777778",
-        "name": "rendering.mobile/bouncing_gradient_circles"
-    },
-    {
-        "duration": "23.347585083333332",
-        "name": "rendering.mobile/bouncing_png_images"
-    },
-    {
-        "duration": "40.31222483333332",
-        "name": "rendering.mobile/bouncing_svg_images"
-    },
-    {
-        "duration": "37.6024215",
-        "name": "rendering.mobile/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "37.928435666666665",
-        "name": "rendering.mobile/canvas_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "37.66598083333334",
-        "name": "rendering.mobile/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "37.50322941666668",
-        "name": "rendering.mobile/canvas_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "38.18788991666667",
-        "name": "rendering.mobile/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "37.6527855",
-        "name": "rendering.mobile/canvas_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "37.85217816666666",
-        "name": "rendering.mobile/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "37.99117941666667",
-        "name": "rendering.mobile/canvas_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.404872583333336",
-        "name": "rendering.mobile/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "37.880488",
-        "name": "rendering.mobile/canvas_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "35.91962075000001",
-        "name": "rendering.mobile/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "38.50510925",
-        "name": "rendering.mobile/canvas_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.048261583333336",
-        "name": "rendering.mobile/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "38.12272216666667",
-        "name": "rendering.mobile/canvas_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "34.178707499999994",
-        "name": "rendering.mobile/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "36.3758965",
-        "name": "rendering.mobile/canvas_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.748871499999996",
-        "name": "rendering.mobile/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "33.01871058333334",
-        "name": "rendering.mobile/canvas_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.242103416666666",
-        "name": "rendering.mobile/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "31.017202749999996",
-        "name": "rendering.mobile/canvas_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.250932222222225",
-        "name": "rendering.mobile/canvas_animation_no_clear"
-    },
-    {
-        "duration": "29.739879166666665",
-        "name": "rendering.mobile/canvas_arcs"
-    },
-    {
-        "duration": "27.603154388888882",
-        "name": "rendering.mobile/canvas_font_cycler"
-    },
-    {
-        "duration": "26.508212722222225",
-        "name": "rendering.mobile/canvas_lines"
-    },
-    {
-        "duration": "33.41188494949495",
-        "name": "rendering.mobile/capitolvolkswagen"
-    },
-    {
-        "duration": "35.18407297368421",
-        "name": "rendering.mobile/capitolvolkswagen_mobile"
-    },
-    {
-        "duration": "34.15187786842106",
-        "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll"
-    },
-    {
-        "duration": "34.26618850505049",
-        "name": "rendering.mobile/capitolvolkswagen_sync_scroll"
-    },
-    {
-        "duration": "31.665265277777777",
-        "name": "rendering.mobile/card_expansion"
-    },
-    {
-        "duration": "33.876778055555555",
-        "name": "rendering.mobile/card_expansion_animated"
-    },
-    {
-        "duration": "31.40029566666666",
-        "name": "rendering.mobile/card_expansion_images_text"
-    },
-    {
-        "duration": "28.839223222222213",
-        "name": "rendering.mobile/card_flying"
-    },
-    {
-        "duration": "22.108635545454547",
-        "name": "rendering.mobile/cats_unscaled"
-    },
-    {
-        "duration": "20.45130990909091",
-        "name": "rendering.mobile/cats_viewport_width"
-    },
-    {
-        "duration": "43.26395176923077",
-        "name": "rendering.mobile/cc_poster_circle"
-    },
-    {
-        "duration": "37.79164453846154",
-        "name": "rendering.mobile/cc_scroll_200_layer_grid"
-    },
-    {
-        "duration": "37.8199263076923",
-        "name": "rendering.mobile/cc_scroll_text_only"
-    },
-    {
-        "duration": "33.366856944444436",
-        "name": "rendering.mobile/chip_tune"
-    },
-    {
-        "duration": "25.29337194949495",
-        "name": "rendering.mobile/cnn"
-    },
-    {
-        "duration": "46.18370373737375",
-        "name": "rendering.mobile/cnn_article"
-    },
-    {
-        "duration": "51.00842660526316",
-        "name": "rendering.mobile/cnn_article_mobile"
-    },
-    {
-        "duration": "49.316013973684214",
-        "name": "rendering.mobile/cnn_article_mobile_sync_scroll"
-    },
-    {
-        "duration": "46.746491252525246",
-        "name": "rendering.mobile/cnn_article_sync_scroll"
-    },
-    {
-        "duration": "3.6470095666666665E-4",
-        "name": "rendering.mobile/cnn_desktop"
-    },
-    {
-        "duration": "3.7121773E-4",
-        "name": "rendering.mobile/cnn_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.524577394736838",
-        "name": "rendering.mobile/cnn_mobile"
-    },
-    {
-        "duration": "27.592984578947373",
-        "name": "rendering.mobile/cnn_mobile_sync_scroll"
-    },
-    {
-        "duration": "53.57425483333333",
-        "name": "rendering.mobile/cnn_pathological"
-    },
-    {
-        "duration": "25.910561909090898",
-        "name": "rendering.mobile/cnn_sync_scroll"
-    },
-    {
-        "duration": "34.435065939393944",
-        "name": "rendering.mobile/compositor_heavy_animation"
-    },
-    {
-        "duration": "30.496426722222225",
-        "name": "rendering.mobile/coordinated_animation"
-    },
-    {
-        "duration": "31.05778805555555",
-        "name": "rendering.mobile/crafty_mind"
-    },
-    {
-        "duration": "36.451371090909085",
-        "name": "rendering.mobile/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "38.00563027272727",
-        "name": "rendering.mobile/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "37.41922842424243",
-        "name": "rendering.mobile/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "36.60167642424243",
-        "name": "rendering.mobile/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "34.45237312121213",
-        "name": "rendering.mobile/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "39.06576066666668",
-        "name": "rendering.mobile/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "40.88604378787879",
-        "name": "rendering.mobile/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "43.06298954545454",
-        "name": "rendering.mobile/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "39.07916251515152",
-        "name": "rendering.mobile/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "39.04849912121212",
-        "name": "rendering.mobile/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "40.80891684848484",
-        "name": "rendering.mobile/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "38.37790045454545",
-        "name": "rendering.mobile/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "38.98916760606061",
-        "name": "rendering.mobile/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "36.638410575757575",
-        "name": "rendering.mobile/css_transitions_inline_style"
-    },
-    {
-        "duration": "37.000023969696976",
-        "name": "rendering.mobile/css_transitions_new_element"
-    },
-    {
-        "duration": "36.4328464375",
-        "name": "rendering.mobile/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "36.9672348125",
-        "name": "rendering.mobile/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "36.64924334375001",
-        "name": "rendering.mobile/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "36.294529562499996",
-        "name": "rendering.mobile/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "36.176571343750005",
-        "name": "rendering.mobile/css_transitions_style_element"
-    },
-    {
-        "duration": "39.0401765625",
-        "name": "rendering.mobile/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "39.13640731249998",
-        "name": "rendering.mobile/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "38.253141",
-        "name": "rendering.mobile/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "39.09597578125001",
-        "name": "rendering.mobile/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "36.42590843749999",
-        "name": "rendering.mobile/css_transitions_updating_class"
-    },
-    {
-        "duration": "35.36247528125",
-        "name": "rendering.mobile/css_value_type_color"
-    },
-    {
-        "duration": "54.24329671875",
-        "name": "rendering.mobile/css_value_type_filter"
-    },
-    {
-        "duration": "32.3959206875",
-        "name": "rendering.mobile/css_value_type_length"
-    },
-    {
-        "duration": "34.581876625",
-        "name": "rendering.mobile/css_value_type_length_complex"
-    },
-    {
-        "duration": "34.56671921875",
-        "name": "rendering.mobile/css_value_type_length_simple"
-    },
-    {
-        "duration": "34.531383031249995",
-        "name": "rendering.mobile/css_value_type_path"
-    },
-    {
-        "duration": "32.88059140625",
-        "name": "rendering.mobile/css_value_type_shadow"
-    },
-    {
-        "duration": "32.075394406250005",
-        "name": "rendering.mobile/css_value_type_transform_complex"
-    },
-    {
-        "duration": "32.39152978125",
-        "name": "rendering.mobile/css_value_type_transform_simple"
-    },
-    {
-        "duration": "46.27993419191918",
-        "name": "rendering.mobile/cuteoverload"
-    },
-    {
-        "duration": "53.187605",
-        "name": "rendering.mobile/cuteoverload_mobile"
-    },
-    {
-        "duration": "46.886530030303035",
-        "name": "rendering.mobile/cuteoverload_sync_scroll"
-    },
-    {
-        "duration": "35.756458242424245",
-        "name": "rendering.mobile/deviantart"
-    },
-    {
-        "duration": "38.60981481081081",
-        "name": "rendering.mobile/deviantart_mobile"
-    },
-    {
-        "duration": "38.51229256756758",
-        "name": "rendering.mobile/deviantart_mobile_sync_scroll"
-    },
-    {
-        "duration": "36.18037501010102",
-        "name": "rendering.mobile/deviantart_sync_scroll"
-    },
-    {
-        "duration": "4.700024966666667E-4",
-        "name": "rendering.mobile/digg"
-    },
-    {
-        "duration": "5.4065388E-4",
-        "name": "rendering.mobile/digg_sync_scroll"
-    },
-    {
-        "duration": "7.882320044444443",
-        "name": "rendering.mobile/dynamic_cube_map"
-    },
-    {
-        "duration": "7.781714144444444",
-        "name": "rendering.mobile/earth"
-    },
-    {
-        "duration": "27.34517723232323",
-        "name": "rendering.mobile/ebay"
-    },
-    {
-        "duration": "22.867309282828284",
-        "name": "rendering.mobile/ebay_desktop"
-    },
-    {
-        "duration": "23.235712767676773",
-        "name": "rendering.mobile/ebay_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.485739000000002",
-        "name": "rendering.mobile/ebay_mobile"
-    },
-    {
-        "duration": "29.591313837837845",
-        "name": "rendering.mobile/ebay_mobile_sync_scroll"
-    },
-    {
-        "duration": "49.03729620833332",
-        "name": "rendering.mobile/ebay_scroll"
-    },
-    {
-        "duration": "27.752080878787858",
-        "name": "rendering.mobile/ebay_sync_scroll"
-    },
-    {
-        "duration": "34.74236657142857",
-        "name": "rendering.mobile/effect_games"
-    },
-    {
-        "duration": "20.999017521572",
-        "name": "rendering.mobile/espn"
-    },
-    {
-        "duration": "22.779988797979797",
-        "name": "rendering.mobile/espn_desktop"
-    },
-    {
-        "duration": "21.068421545454544",
-        "name": "rendering.mobile/espn_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.57674822222222",
-        "name": "rendering.mobile/espn_pathological"
-    },
-    {
-        "duration": "4.565715866666667E-4",
-        "name": "rendering.mobile/espn_sync_scroll"
-    },
-    {
-        "duration": "28.44678446464648",
-        "name": "rendering.mobile/facebook"
-    },
-    {
-        "duration": "28.53038582828282",
-        "name": "rendering.mobile/facebook_desktop"
-    },
-    {
-        "duration": "29.640729060606052",
-        "name": "rendering.mobile/facebook_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.313337324324326",
-        "name": "rendering.mobile/facebook_mobile"
-    },
-    {
-        "duration": "28.375590810810813",
-        "name": "rendering.mobile/facebook_mobile_sync_scroll"
-    },
-    {
-        "duration": "26.571307919191938",
-        "name": "rendering.mobile/facebook_sync_scroll"
-    },
-    {
-        "duration": "27.684024571428576",
-        "name": "rendering.mobile/fill_shapes"
-    },
-    {
-        "duration": "32.49371343243243",
-        "name": "rendering.mobile/filter_terrain_svg"
-    },
-    {
-        "duration": "50.79486858333333",
-        "name": "rendering.mobile/flickr_scroll"
-    },
-    {
-        "duration": "27.931289277777775",
-        "name": "rendering.mobile/font_wipe"
-    },
-    {
-        "duration": "3.0501683333333335E-4",
-        "name": "rendering.mobile/forecast.io"
-    },
-    {
-        "duration": "2.8602282E-4",
-        "name": "rendering.mobile/forecast.io_sync_scroll"
-    },
-    {
-        "duration": "26.21336245714286",
-        "name": "rendering.mobile/geo_apis"
-    },
-    {
-        "duration": "78.54779841666667",
-        "name": "rendering.mobile/gmail"
-    },
-    {
-        "duration": "89.05450701010102",
-        "name": "rendering.mobile/gmail_desktop"
-    },
-    {
-        "duration": "72.63809818181815",
-        "name": "rendering.mobile/gmail_desktop_gpu_raster"
-    },
-    {
-        "duration": "46.71759494594596",
-        "name": "rendering.mobile/google_calendar"
-    },
-    {
-        "duration": "43.41749959595962",
-        "name": "rendering.mobile/google_calendar_desktop"
-    },
-    {
-        "duration": "43.77559930303032",
-        "name": "rendering.mobile/google_calendar_desktop_gpu_raster"
-    },
-    {
-        "duration": "68.40075640540542",
-        "name": "rendering.mobile/google_docs"
-    },
-    {
-        "duration": "65.18858199999998",
-        "name": "rendering.mobile/google_docs_desktop"
-    },
-    {
-        "duration": "65.86450270707073",
-        "name": "rendering.mobile/google_docs_desktop_gpu_raster"
-    },
-    {
-        "duration": "54.05500567567568",
-        "name": "rendering.mobile/google_image_search"
-    },
-    {
-        "duration": "48.91295613131312",
-        "name": "rendering.mobile/google_image_search_desktop"
-    },
-    {
-        "duration": "49.90162940404041",
-        "name": "rendering.mobile/google_image_search_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.93361308080807",
-        "name": "rendering.mobile/google_news"
-    },
-    {
-        "duration": "31.34656516666667",
-        "name": "rendering.mobile/google_news_ios"
-    },
-    {
-        "duration": "35.005452405405414",
-        "name": "rendering.mobile/google_news_mobile"
-    },
-    {
-        "duration": "34.6767187027027",
-        "name": "rendering.mobile/google_news_mobile_sync_scroll"
-    },
-    {
-        "duration": "33.00895723232325",
-        "name": "rendering.mobile/google_news_sync_scroll"
-    },
-    {
-        "duration": "40.29566136363636",
-        "name": "rendering.mobile/google_plus"
-    },
-    {
-        "duration": "56.670607111111096",
-        "name": "rendering.mobile/google_plus_desktop"
-    },
-    {
-        "duration": "58.809142787878805",
-        "name": "rendering.mobile/google_plus_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.284590702702705",
-        "name": "rendering.mobile/google_plus_mobile"
-    },
-    {
-        "duration": "29.679848756756755",
-        "name": "rendering.mobile/google_plus_mobile_sync_scroll"
-    },
-    {
-        "duration": "27.88362377777778",
-        "name": "rendering.mobile/google_plus_sync_scroll"
-    },
-    {
-        "duration": "24.51298148484848",
-        "name": "rendering.mobile/google_web_search"
-    },
-    {
-        "duration": "24.45211887878787",
-        "name": "rendering.mobile/google_web_search_desktop"
-    },
-    {
-        "duration": "24.18363208080808",
-        "name": "rendering.mobile/google_web_search_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.789909540540535",
-        "name": "rendering.mobile/google_web_search_mobile"
-    },
-    {
-        "duration": "24.54920497297297",
-        "name": "rendering.mobile/google_web_search_mobile_sync_scroll"
-    },
-    {
-        "duration": "22.986898303030305",
-        "name": "rendering.mobile/google_web_search_sync_scroll"
-    },
-    {
-        "duration": "24.99796433333333",
-        "name": "rendering.mobile/gsp.ro"
-    },
-    {
-        "duration": "29.11688643243243",
-        "name": "rendering.mobile/gsp.ro_mobile"
-    },
-    {
-        "duration": "26.937432594594593",
-        "name": "rendering.mobile/gsp.ro_mobile_sync_scroll"
-    },
-    {
-        "duration": "25.355329353535357",
-        "name": "rendering.mobile/gsp.ro_sync_scroll"
-    },
-    {
-        "duration": "32.06949577777779",
-        "name": "rendering.mobile/guardian_pathological"
-    },
-    {
-        "duration": "36.48172244444444",
-        "name": "rendering.mobile/guimark_vector_chart"
-    },
-    {
-        "duration": "28.506140666666663",
-        "name": "rendering.mobile/gws_boogie_expansion"
-    },
-    {
-        "duration": "28.93029377777778",
-        "name": "rendering.mobile/gws_google_expansion"
-    },
-    {
-        "duration": "33.372783714285724",
-        "name": "rendering.mobile/hakim"
-    },
-    {
-        "duration": "31.4403655",
-        "name": "rendering.mobile/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "49.42328474999999",
-        "name": "rendering.mobile/idle_power_animated_gif"
-    },
-    {
-        "duration": "40.98025799999999",
-        "name": "rendering.mobile/idle_power_blank"
-    },
-    {
-        "duration": "49.621745000000004",
-        "name": "rendering.mobile/idle_power_css_animation"
-    },
-    {
-        "duration": "50.12000928571428",
-        "name": "rendering.mobile/idle_power_request_animation_frame"
-    },
-    {
-        "duration": "119.95181342857144",
-        "name": "rendering.mobile/idle_power_set_timeout_long"
-    },
-    {
-        "duration": "50.017973142857144",
-        "name": "rendering.mobile/idle_power_set_timetout"
-    },
-    {
-        "duration": "45.866291135135135",
-        "name": "rendering.mobile/ie_chalkboard"
-    },
-    {
-        "duration": "44.36908693548387",
-        "name": "rendering.mobile/ie_pirate_mark"
-    },
-    {
-        "duration": "36.50973033333334",
-        "name": "rendering.mobile/infinite_scrolling"
-    },
-    {
-        "duration": "34.322999685714294",
-        "name": "rendering.mobile/jarro_doverson"
-    },
-    {
-        "duration": "41.222864923076926",
-        "name": "rendering.mobile/js_full_screen_invalidation"
-    },
-    {
-        "duration": "44.99794730769231",
-        "name": "rendering.mobile/js_poster_circle"
-    },
-    {
-        "duration": "38.50755376923077",
-        "name": "rendering.mobile/js_scroll_200_layer_grid"
-    },
-    {
-        "duration": "38.533712692307695",
-        "name": "rendering.mobile/js_scroll_text_only"
-    },
-    {
-        "duration": "30.533221514285717",
-        "name": "rendering.mobile/kevs_3d"
-    },
-    {
-        "duration": "34.84360609375",
-        "name": "rendering.mobile/keyframed_animations"
-    },
-    {
-        "duration": "34.38325133333333",
-        "name": "rendering.mobile/large_texture_uploads"
-    },
-    {
-        "duration": "42.863621555555554",
-        "name": "rendering.mobile/latimes_pathological"
-    },
-    {
-        "duration": "29.390332313131314",
-        "name": "rendering.mobile/linkedin"
-    },
-    {
-        "duration": "26.1224958989899",
-        "name": "rendering.mobile/linkedin_desktop"
-    },
-    {
-        "duration": "25.82760635353535",
-        "name": "rendering.mobile/linkedin_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.924824594594604",
-        "name": "rendering.mobile/linkedin_mobile"
-    },
-    {
-        "duration": "32.86017456756756",
-        "name": "rendering.mobile/linkedin_mobile_sync_scroll"
-    },
-    {
-        "duration": "37.42680688888888",
-        "name": "rendering.mobile/linkedin_pathological"
-    },
-    {
-        "duration": "30.61263517171717",
-        "name": "rendering.mobile/linkedin_sync_scroll"
-    },
-    {
-        "duration": "27.310765555555555",
-        "name": "rendering.mobile/list_animation_simple"
-    },
-    {
-        "duration": "37.8000232777778",
-        "name": "rendering.mobile/list_recycle_transform"
-    },
-    {
-        "duration": "30.461491742857145",
-        "name": "rendering.mobile/man_in_blue"
-    },
-    {
-        "duration": "43.686506542857124",
-        "name": "rendering.mobile/many_images"
-    },
-    {
-        "duration": "7.9188583277777775",
-        "name": "rendering.mobile/many_planets_deep"
-    },
-    {
-        "duration": "6.81544076111111",
-        "name": "rendering.mobile/maps_perf_test"
-    },
-    {
-        "duration": "30.44675672222222",
-        "name": "rendering.mobile/mask_transition_animation"
-    },
-    {
-        "duration": "38.83947266666667",
-        "name": "rendering.mobile/masonry"
-    },
-    {
-        "duration": "36.37639361111111",
-        "name": "rendering.mobile/medium_texture_uploads"
-    },
-    {
-        "duration": "30.24419322857143",
-        "name": "rendering.mobile/megi_dish"
-    },
-    {
-        "duration": "32.94488782857142",
-        "name": "rendering.mobile/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "32.994521057142855",
-        "name": "rendering.mobile/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "30.520276428571425",
-        "name": "rendering.mobile/microsoft_snow"
-    },
-    {
-        "duration": "27.48887985714285",
-        "name": "rendering.mobile/microsoft_speed_reading"
-    },
-    {
-        "duration": "34.1955662",
-        "name": "rendering.mobile/microsoft_tweet_map"
-    },
-    {
-        "duration": "50.260263200000004",
-        "name": "rendering.mobile/microsoft_video_city"
-    },
-    {
-        "duration": "30.683122485714296",
-        "name": "rendering.mobile/microsoft_worker_fountains"
-    },
-    {
-        "duration": "30.538962942857143",
-        "name": "rendering.mobile/mix_10k"
-    },
-    {
-        "duration": "33.70752434375",
-        "name": "rendering.mobile/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "33.33487868750001",
-        "name": "rendering.mobile/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "36.206019624999996",
-        "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "32.7595441875",
-        "name": "rendering.mobile/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "21.358749858585853",
-        "name": "rendering.mobile/mlb"
-    },
-    {
-        "duration": "23.04875189189189",
-        "name": "rendering.mobile/mlb_mobile"
-    },
-    {
-        "duration": "22.780446432432438",
-        "name": "rendering.mobile/mlb_mobile_sync_scroll"
-    },
-    {
-        "duration": "21.72573238383838",
-        "name": "rendering.mobile/mlb_sync_scroll"
-    },
-    {
-        "duration": "26.597183888888893",
-        "name": "rendering.mobile/mobile_news_sandbox"
-    },
-    {
-        "duration": "33.19333455555555",
-        "name": "rendering.mobile/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "34.70225730555556",
-        "name": "rendering.mobile/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "33.846292000000005",
-        "name": "rendering.mobile/motion_mark_focus"
-    },
-    {
-        "duration": "38.15792038461539",
-        "name": "rendering.mobile/new_tilings"
-    },
-    {
-        "duration": "31.33066353846154",
-        "name": "rendering.mobile/no_op_raf"
-    },
-    {
-        "duration": "28.464045615384617",
-        "name": "rendering.mobile/no_op_scroll"
-    },
-    {
-        "duration": "26.229834538461542",
-        "name": "rendering.mobile/no_op_settimeout"
-    },
-    {
-        "duration": "30.879116307692307",
-        "name": "rendering.mobile/no_op_touch_handler"
-    },
-    {
-        "duration": "7.875687661111112",
-        "name": "rendering.mobile/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "43.774574083333334",
-        "name": "rendering.mobile/nyc_gov_scroll"
-    },
-    {
-        "duration": "28.86468767676767",
-        "name": "rendering.mobile/nytimes"
-    },
-    {
-        "duration": "32.76511418918919",
-        "name": "rendering.mobile/nytimes_mobile"
-    },
-    {
-        "duration": "39.432520833333335",
-        "name": "rendering.mobile/nytimes_scroll"
-    },
-    {
-        "duration": "29.183294626262615",
-        "name": "rendering.mobile/nytimes_sync_scroll"
-    },
-    {
-        "duration": "32.504210031250004",
-        "name": "rendering.mobile/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "34.04863288888889",
-        "name": "rendering.mobile/parallax_effect"
-    },
-    {
-        "duration": "7.813179183333332",
-        "name": "rendering.mobile/particles"
-    },
-    {
-        "duration": "45.96363108333333",
-        "name": "rendering.mobile/pbs_pathological"
-    },
-    {
-        "duration": "25.04024716666667",
-        "name": "rendering.mobile/physical_simulation"
-    },
-    {
-        "duration": "36.569341757575735",
-        "name": "rendering.mobile/pinterest"
-    },
-    {
-        "duration": "33.83937996969696",
-        "name": "rendering.mobile/pinterest_desktop"
-    },
-    {
-        "duration": "4.684130433333334E-4",
-        "name": "rendering.mobile/pinterest_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.12505300000001",
-        "name": "rendering.mobile/pinterest_mobile"
-    },
-    {
-        "duration": "37.077444774193545",
-        "name": "rendering.mobile/pinterest_mobile_sync_scroll"
-    },
-    {
-        "duration": "37.4551306969697",
-        "name": "rendering.mobile/pinterest_sync_scroll"
-    },
-    {
-        "duration": "36.53341268965517",
-        "name": "rendering.mobile/put_get_image_data"
-    },
-    {
-        "duration": "38.50905749999999",
-        "name": "rendering.mobile/raf"
-    },
-    {
-        "duration": "38.67078766666667",
-        "name": "rendering.mobile/raf_animation"
-    },
-    {
-        "duration": "37.2684805",
-        "name": "rendering.mobile/raf_canvas"
-    },
-    {
-        "duration": "38.098928750000006",
-        "name": "rendering.mobile/raf_touch_animation"
-    },
-    {
-        "duration": "46.909655750000006",
-        "name": "rendering.mobile/recode_pathological"
-    },
-    {
-        "duration": "34.3923935959596",
-        "name": "rendering.mobile/reddit"
-    },
-    {
-        "duration": "36.2144181935484",
-        "name": "rendering.mobile/reddit_mobile"
-    },
-    {
-        "duration": "34.69525439393939",
-        "name": "rendering.mobile/reddit_sync_scroll"
-    },
-    {
-        "duration": "29.735817586206895",
-        "name": "rendering.mobile/runway"
-    },
-    {
-        "duration": "7.787277725000002",
-        "name": "rendering.mobile/san_angeles"
-    },
-    {
-        "duration": "25.775926818181816",
-        "name": "rendering.mobile/second_batch_js_heavy"
-    },
-    {
-        "duration": "22.76499309090909",
-        "name": "rendering.mobile/second_batch_js_light"
-    },
-    {
-        "duration": "23.42182654545455",
-        "name": "rendering.mobile/second_batch_js_medium"
-    },
-    {
-        "duration": "29.718893808080804",
-        "name": "rendering.mobile/sfgate"
-    },
-    {
-        "duration": "31.647625580645165",
-        "name": "rendering.mobile/sfgate_mobile"
-    },
-    {
-        "duration": "29.759017548387096",
-        "name": "rendering.mobile/sfgate_mobile_sync_scroll"
-    },
-    {
-        "duration": "30.50298864646465",
-        "name": "rendering.mobile/sfgate_sync_scroll"
-    },
-    {
-        "duration": "45.62634536363637",
-        "name": "rendering.mobile/silk_finance"
-    },
-    {
-        "duration": "32.46547154545455",
-        "name": "rendering.mobile/simple_text_page"
-    },
-    {
-        "duration": "25.242651545454546",
-        "name": "rendering.mobile/simple_touch_drag"
-    },
-    {
-        "duration": "35.90821318181819",
-        "name": "rendering.mobile/slashdot"
-    },
-    {
-        "duration": "39.57330063333334",
-        "name": "rendering.mobile/slashdot_mobile"
-    },
-    {
-        "duration": "36.595483676767685",
-        "name": "rendering.mobile/slashdot_sync_scroll"
-    },
-    {
-        "duration": "26.930350833333335",
-        "name": "rendering.mobile/slide_drawer"
-    },
-    {
-        "duration": "41.22190490909091",
-        "name": "rendering.mobile/small_texture_uploads"
-    },
-    {
-        "duration": "32.60261253571428",
-        "name": "rendering.mobile/smash_cat"
-    },
-    {
-        "duration": "26.818944821428577",
-        "name": "rendering.mobile/spielzeugz"
-    },
-    {
-        "duration": "26.866785833333335",
-        "name": "rendering.mobile/sticky_using_webkit"
-    },
-    {
-        "duration": "49.57458855555555",
-        "name": "rendering.mobile/stress_hidey_bars"
-    },
-    {
-        "duration": "30.882680321428577",
-        "name": "rendering.mobile/stroke_shapes"
-    },
-    {
-        "duration": "39.312634916666674",
-        "name": "rendering.mobile/svg_icon_raster"
-    },
-    {
-        "duration": "23.176137666666666",
-        "name": "rendering.mobile/swipe_action"
-    },
-    {
-        "duration": "32.950011999999994",
-        "name": "rendering.mobile/swipe_to_dismiss"
-    },
-    {
-        "duration": "31.503866090909092",
-        "name": "rendering.mobile/sync_scroll_offset"
-    },
-    {
-        "duration": "33.509823313131314",
-        "name": "rendering.mobile/techcrunch"
-    },
-    {
-        "duration": "50.292553303030274",
-        "name": "rendering.mobile/techcrunch_desktop"
-    },
-    {
-        "duration": "49.67322014141415",
-        "name": "rendering.mobile/techcrunch_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.91998453333333",
-        "name": "rendering.mobile/techcrunch_mobile"
-    },
-    {
-        "duration": "27.62510973333333",
-        "name": "rendering.mobile/techcrunch_mobile_sync_scroll"
-    },
-    {
-        "duration": "26.284325979797973",
-        "name": "rendering.mobile/techcrunch_sync_scroll"
-    },
-    {
-        "duration": "33.28635116666667",
-        "name": "rendering.mobile/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "33.24592141666667",
-        "name": "rendering.mobile/text_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.23506375",
-        "name": "rendering.mobile/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "33.65843983333334",
-        "name": "rendering.mobile/text_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.71515991666666",
-        "name": "rendering.mobile/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "33.308868249999996",
-        "name": "rendering.mobile/text_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.58453108333333",
-        "name": "rendering.mobile/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "33.62460083333333",
-        "name": "rendering.mobile/text_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.714577166666665",
-        "name": "rendering.mobile/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "33.95342899999999",
-        "name": "rendering.mobile/text_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.307273083333335",
-        "name": "rendering.mobile/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "33.97050300000001",
-        "name": "rendering.mobile/text_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.31555533333333",
-        "name": "rendering.mobile/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "33.9795155",
-        "name": "rendering.mobile/text_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.87122258333333",
-        "name": "rendering.mobile/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "32.761403916666666",
-        "name": "rendering.mobile/text_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.243908833333336",
-        "name": "rendering.mobile/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "30.499830749999997",
-        "name": "rendering.mobile/text_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.718970333333335",
-        "name": "rendering.mobile/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "28.457602250000004",
-        "name": "rendering.mobile/text_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.65942066666667",
-        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "36.075867666666674",
-        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.68798900000001",
-        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "36.121883583333336",
-        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.47503849999999",
-        "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "36.095752",
-        "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.44350408333333",
-        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "35.94542333333334",
-        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "35.81002766666666",
-        "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "35.67144091666666",
-        "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.041362",
-        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "35.22242858333333",
-        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "35.95787116666667",
-        "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "35.536637916666656",
-        "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "35.663002750000004",
-        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "35.38024191666667",
-        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.303427666666664",
-        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "32.709211833333335",
-        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.754921166666673",
-        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "31.33767908333333",
-        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.596240750000003",
-        "name": "rendering.mobile/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "27.39456008333333",
-        "name": "rendering.mobile/text_hover_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.663599333333337",
-        "name": "rendering.mobile/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "27.392570500000005",
-        "name": "rendering.mobile/text_hover_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.6263265",
-        "name": "rendering.mobile/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "27.614711833333335",
-        "name": "rendering.mobile/text_hover_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.464461666666665",
-        "name": "rendering.mobile/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "27.604368499999996",
-        "name": "rendering.mobile/text_hover_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.33223575",
-        "name": "rendering.mobile/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "27.437518166666667",
-        "name": "rendering.mobile/text_hover_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.7177155",
-        "name": "rendering.mobile/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "27.578977750000007",
-        "name": "rendering.mobile/text_hover_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.215596500000004",
-        "name": "rendering.mobile/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "27.799287000000003",
-        "name": "rendering.mobile/text_hover_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.80280466666667",
-        "name": "rendering.mobile/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "26.47293883333333",
-        "name": "rendering.mobile/text_hover_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.155040666666668",
-        "name": "rendering.mobile/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "25.299698000000003",
-        "name": "rendering.mobile/text_hover_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.391812916666666",
-        "name": "rendering.mobile/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "24.28089466666667",
-        "name": "rendering.mobile/text_hover_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.139227191919183",
-        "name": "rendering.mobile/theverge"
-    },
-    {
-        "duration": "43.21710407070708",
-        "name": "rendering.mobile/theverge_article"
-    },
-    {
-        "duration": "47.70657356666667",
-        "name": "rendering.mobile/theverge_article_mobile"
-    },
-    {
-        "duration": "45.53697906666667",
-        "name": "rendering.mobile/theverge_article_mobile_sync_scroll"
-    },
-    {
-        "duration": "43.606548282828285",
-        "name": "rendering.mobile/theverge_article_sync_scroll"
-    },
-    {
-        "duration": "28.63334783333334",
-        "name": "rendering.mobile/theverge_mobile"
-    },
-    {
-        "duration": "28.7403767",
-        "name": "rendering.mobile/theverge_mobile_sync_scroll"
-    },
-    {
-        "duration": "27.246897626262637",
-        "name": "rendering.mobile/theverge_sync_scroll"
-    },
-    {
-        "duration": "33.13184422222222",
-        "name": "rendering.mobile/toggle_drawer"
-    },
-    {
-        "duration": "32.523740636363634",
-        "name": "rendering.mobile/touch_handler_scrolling"
-    },
-    {
-        "duration": "35.78960972",
-        "name": "rendering.mobile/transform_transitions"
-    },
-    {
-        "duration": "32.844299480000004",
-        "name": "rendering.mobile/transform_transitions_js_block"
-    },
-    {
-        "duration": "29.845363548706068",
-        "name": "rendering.mobile/twitter"
-    },
-    {
-        "duration": "31.29805238383835",
-        "name": "rendering.mobile/twitter_desktop"
-    },
-    {
-        "duration": "31.078204282828278",
-        "name": "rendering.mobile/twitter_desktop_gpu_raster"
-    },
-    {
-        "duration": "5.059242166666667E-4",
-        "name": "rendering.mobile/twitter_sync_scroll"
-    },
-    {
-        "duration": "33.84536236363636",
-        "name": "rendering.mobile/update_history_state"
-    },
-    {
-        "duration": "47.00696899999999",
-        "name": "rendering.mobile/usatoday"
-    },
-    {
-        "duration": "49.30340286666668",
-        "name": "rendering.mobile/usatoday_mobile"
-    },
-    {
-        "duration": "52.472119233333345",
-        "name": "rendering.mobile/usatoday_mobile_sync_scroll"
-    },
-    {
-        "duration": "50.88761351515151",
-        "name": "rendering.mobile/usatoday_sync_scroll"
-    },
-    {
-        "duration": "33.80640922222223",
-        "name": "rendering.mobile/vertical_expansion"
-    },
-    {
-        "duration": "45.39143570000001",
-        "name": "rendering.mobile/weather.com"
-    },
-    {
-        "duration": "39.09800921212121",
-        "name": "rendering.mobile/weather.com_desktop"
-    },
-    {
-        "duration": "39.95905835353533",
-        "name": "rendering.mobile/weather.com_desktop_gpu_raster"
-    },
-    {
-        "duration": "35.352943880000005",
-        "name": "rendering.mobile/web_animation_value_type_color"
-    },
-    {
-        "duration": "32.30285848",
-        "name": "rendering.mobile/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "34.39382648",
-        "name": "rendering.mobile/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "34.544754680000004",
-        "name": "rendering.mobile/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "34.00419764000001",
-        "name": "rendering.mobile/web_animation_value_type_path"
-    },
-    {
-        "duration": "32.536015240000005",
-        "name": "rendering.mobile/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "32.11594348",
-        "name": "rendering.mobile/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "32.56784408",
-        "name": "rendering.mobile/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "32.6319746",
-        "name": "rendering.mobile/web_animations_set_current_time"
-    },
-    {
-        "duration": "35.11787304",
-        "name": "rendering.mobile/web_animations_simultaneous"
-    },
-    {
-        "duration": "37.42823036000001",
-        "name": "rendering.mobile/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "34.14275544",
-        "name": "rendering.mobile/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "38.34377239999999",
-        "name": "rendering.mobile/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "35.67560036363636",
-        "name": "rendering.mobile/wikipedia"
-    },
-    {
-        "duration": "32.60568937373736",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "32.86753380808079",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll"
-    },
-    {
-        "duration": "42.10797105050505",
-        "name": "rendering.mobile/wikipedia_desktop"
-    },
-    {
-        "duration": "42.580562151515146",
-        "name": "rendering.mobile/wikipedia_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.297657466666664",
-        "name": "rendering.mobile/wikipedia_mobile"
-    },
-    {
-        "duration": "33.526991133333325",
-        "name": "rendering.mobile/wikipedia_mobile_sync_scroll"
-    },
-    {
-        "duration": "32.078904878787895",
-        "name": "rendering.mobile/wikipedia_sync_scroll"
-    },
-    {
-        "duration": "38.33933103030304",
-        "name": "rendering.mobile/wordpress"
-    },
-    {
-        "duration": "38.23012577777778",
-        "name": "rendering.mobile/wordpress_desktop"
-    },
-    {
-        "duration": "38.77219565656566",
-        "name": "rendering.mobile/wordpress_desktop_gpu_raster"
-    },
-    {
-        "duration": "40.36543213333333",
-        "name": "rendering.mobile/wordpress_mobile"
-    },
-    {
-        "duration": "38.61311013333333",
-        "name": "rendering.mobile/wordpress_mobile_sync_scroll"
-    },
-    {
-        "duration": "36.91970569696969",
-        "name": "rendering.mobile/wordpress_sync_scroll"
-    },
-    {
-        "duration": "74.64666655555557",
-        "name": "rendering.mobile/worldjournal"
-    },
-    {
-        "duration": "79.36514751851853",
-        "name": "rendering.mobile/worldjournal_mobile"
-    },
-    {
-        "duration": "77.35482244444445",
-        "name": "rendering.mobile/worldjournal_mobile_sync_scroll"
-    },
-    {
-        "duration": "73.98109298989897",
-        "name": "rendering.mobile/worldjournal_sync_scroll"
-    },
-    {
-        "duration": "48.15227918181818",
-        "name": "rendering.mobile/wow_wiki_pathological"
-    },
-    {
-        "duration": "56.979442505050514",
-        "name": "rendering.mobile/wowwiki"
-    },
-    {
-        "duration": "59.124259466666665",
-        "name": "rendering.mobile/wowwiki_mobile"
-    },
-    {
-        "duration": "58.001735566666675",
-        "name": "rendering.mobile/wowwiki_mobile_sync_scroll"
-    },
-    {
-        "duration": "56.487392737373746",
-        "name": "rendering.mobile/wowwiki_sync_scroll"
-    },
-    {
-        "duration": "26.536885080808084",
-        "name": "rendering.mobile/wsj"
-    },
-    {
-        "duration": "29.543995899999995",
-        "name": "rendering.mobile/wsj_mobile"
-    },
-    {
-        "duration": "27.26475646666667",
-        "name": "rendering.mobile/wsj_mobile_sync_scroll"
-    },
-    {
-        "duration": "26.661519222222225",
-        "name": "rendering.mobile/wsj_sync_scroll"
-    },
-    {
-        "duration": "32.16896739393939",
-        "name": "rendering.mobile/yahoo_answers"
-    },
-    {
-        "duration": "30.52977131313131",
-        "name": "rendering.mobile/yahoo_answers_desktop"
-    },
-    {
-        "duration": "31.109628252525244",
-        "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.424225033333336",
-        "name": "rendering.mobile/yahoo_answers_mobile"
-    },
-    {
-        "duration": "33.10580843333334",
-        "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll"
-    },
-    {
-        "duration": "31.22894634343434",
-        "name": "rendering.mobile/yahoo_answers_sync_scroll"
-    },
-    {
-        "duration": "49.676530633333336",
-        "name": "rendering.mobile/yahoo_games"
-    },
-    {
-        "duration": "47.60486273737375",
-        "name": "rendering.mobile/yahoo_games_desktop"
-    },
-    {
-        "duration": "47.72283676767677",
-        "name": "rendering.mobile/yahoo_games_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.199312272727262",
-        "name": "rendering.mobile/yahoo_news"
-    },
-    {
-        "duration": "34.97376979797981",
-        "name": "rendering.mobile/yahoo_news_desktop"
-    },
-    {
-        "duration": "35.84221124242424",
-        "name": "rendering.mobile/yahoo_news_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.731216300000007",
-        "name": "rendering.mobile/yahoo_news_mobile"
-    },
-    {
-        "duration": "30.03508683333333",
-        "name": "rendering.mobile/yahoo_news_mobile_sync_scroll"
-    },
-    {
-        "duration": "28.16396992929292",
-        "name": "rendering.mobile/yahoo_news_sync_scroll"
-    },
-    {
-        "duration": "35.0764927",
-        "name": "rendering.mobile/yahoo_sports"
-    },
-    {
-        "duration": "32.611100202020204",
-        "name": "rendering.mobile/yahoo_sports_desktop"
-    },
-    {
-        "duration": "33.844070393939404",
-        "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster"
-    },
-    {
-        "duration": "42.40594936363637",
-        "name": "rendering.mobile/yahoo_sports_pathological"
-    },
-    {
-        "duration": "31.89040891919191",
-        "name": "rendering.mobile/youtube"
-    },
-    {
-        "duration": "47.828775868686876",
-        "name": "rendering.mobile/youtube_desktop"
-    },
-    {
-        "duration": "49.124170888888884",
-        "name": "rendering.mobile/youtube_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.972468499999994",
-        "name": "rendering.mobile/youtube_mobile"
-    },
-    {
-        "duration": "22.659193833333337",
-        "name": "rendering.mobile/youtube_mobile_sync_scroll"
-    },
-    {
-        "duration": "23.514629414141417",
-        "name": "rendering.mobile/youtube_sync_scroll"
-    },
-    {
-        "duration": "62.272023",
-        "name": "rendering.mobile/yuv_decoding"
-    },
-    {
-        "duration": "63.67977336363636",
-        "name": "rendering.mobile/yuv_decoding_gpu_rasterization_and_decoding"
-    },
-    {
-        "duration": "40.498921363636356",
-        "name": "rendering.mobile/zdnet_pathological"
-    },
-    {
-        "duration": "31.203441500000004",
-        "name": "rendering.mobile/zoom_in_animation"
-    },
-    {
-        "duration": "24.053189222222226",
-        "name": "scheduler.tough_scheduling_cases/raf"
-    },
-    {
-        "duration": "24.58054449494949",
-        "name": "scheduler.tough_scheduling_cases/raf.html"
-    },
-    {
-        "duration": "24.044186777777774",
-        "name": "scheduler.tough_scheduling_cases/raf_animation"
-    },
-    {
-        "duration": "24.471227101010093",
-        "name": "scheduler.tough_scheduling_cases/raf_animation.html"
-    },
-    {
-        "duration": "23.486193444444442",
-        "name": "scheduler.tough_scheduling_cases/raf_canvas"
-    },
-    {
-        "duration": "23.929469979797975",
-        "name": "scheduler.tough_scheduling_cases/raf_canvas.html"
-    },
-    {
-        "duration": "23.554633250000002",
-        "name": "scheduler.tough_scheduling_cases/raf_touch_animation"
-    },
-    {
-        "duration": "24.31968610101009",
-        "name": "scheduler.tough_scheduling_cases/raf_touch_animation.html"
-    },
-    {
-        "duration": "17.567614737373738",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js.html?heavy"
-    },
-    {
-        "duration": "15.933300161616154",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js.html?light"
-    },
-    {
-        "duration": "16.273091873737375",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js.html?medium"
-    },
-    {
-        "duration": "17.58495697222222",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy"
-    },
-    {
-        "duration": "16.057615138888885",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_light"
-    },
-    {
-        "duration": "16.546214680555554",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_medium"
-    },
-    {
-        "duration": "34.21874991666666",
-        "name": "scheduler.tough_scheduling_cases/simple_text_page"
-    },
-    {
-        "duration": "40.989694050505044",
-        "name": "scheduler.tough_scheduling_cases/simple_text_page.html"
-    },
-    {
-        "duration": "17.09494802777778",
-        "name": "scheduler.tough_scheduling_cases/simple_touch_drag"
-    },
-    {
-        "duration": "17.1179281111111",
-        "name": "scheduler.tough_scheduling_cases/simple_touch_drag.html"
-    },
-    {
-        "duration": "20.764502999999994",
-        "name": "scheduler.tough_scheduling_cases/sync_scroll_offset"
-    },
-    {
-        "duration": "20.64756057575758",
-        "name": "scheduler.tough_scheduling_cases/sync_scroll_offset.html"
-    },
-    {
-        "duration": "23.065795361111114",
-        "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling"
-    },
-    {
-        "duration": "23.356961343434342",
-        "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling.html"
-    },
-    {
-        "duration": "2.63786316E-4",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/amazon"
-    },
-    {
-        "duration": "33.80300638383836",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "25.423665797979808",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "4.48703769E-4",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/cnn"
-    },
-    {
-        "duration": "18.872902828282832",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/ebay"
-    },
-    {
-        "duration": "24.43893978787879",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/espn"
-    },
-    {
-        "duration": "24.309108555555557",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/facebook"
-    },
-    {
-        "duration": "67.25047055555555",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/gmail"
-    },
-    {
-        "duration": "36.09170495959597",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "50.770853787878785",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "39.792553565656554",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "46.37658148484849",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "19.910990656565655",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "22.536726232323225",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "4.2290687300000006E-4",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/pinterest"
-    },
-    {
-        "duration": "33.30375853535352",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "26.528168030303032",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/twitter"
-    },
-    {
-        "duration": "29.678327292929293",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "35.29338848484849",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "30.487788070707058",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "24.569967909090913",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "38.78400107070706",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "28.73660282828283",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "27.182221686868683",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "40.08568662626261",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/youtube"
-    },
-    {
-        "duration": "28.04500614141415",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG"
-    },
-    {
-        "duration": "28.373820262626253",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG"
-    },
-    {
-        "duration": "32.77393743434344",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark"
-    },
-    {
-        "duration": "46.07326119191917",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus"
-    },
-    {
-        "duration": "26.678037637499994",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "27.440452687499988",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "31.865303850000004",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "39.4857084",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "40.55353654545455",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test"
-    },
-    {
-        "duration": "38.9083806969697",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard"
-    },
-    {
-        "duration": "28.20216505050505",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes"
-    },
-    {
-        "duration": "28.874584434343422",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes"
-    },
-    {
-        "duration": "38.476966371428574",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "37.56535682857143",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "26.380737800000002",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "26.042319285714292",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "29.444780151515147",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Blogger"
-    },
-    {
-        "duration": "37.42526526262627",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ESPN"
-    },
-    {
-        "duration": "26.660416666666666",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Facebook"
-    },
-    {
-        "duration": "21.762691454545454",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/LinkedIn"
-    },
-    {
-        "duration": "26.73234650505051",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Twitter"
-    },
-    {
-        "duration": "34.41139099999999",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Weather.com"
-    },
-    {
-        "duration": "21.646575666666664",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/amazon_pinch"
-    },
-    {
-        "duration": "29.812685085365857",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/blogspot_pinch"
-    },
-    {
-        "duration": "26.382042565656544",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/booking_pinch"
-    },
-    {
-        "duration": "33.57973538383839",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/cnn_pinch"
-    },
-    {
-        "duration": "31.877053939393935",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ebay_pinch"
-    },
-    {
-        "duration": "37.63646426262626",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/espn_pinch"
-    },
-    {
-        "duration": "27.284374818181824",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/facebook_pinch"
-    },
-    {
-        "duration": "48.42330762626264",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/gmail_pinch"
-    },
-    {
-        "duration": "26.44414957575757",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_calendar_pinch"
-    },
-    {
-        "duration": "26.662883414141422",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_image_pinch"
-    },
-    {
-        "duration": "39.45358327272728",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_search_pinch"
-    },
-    {
-        "duration": "25.302832191919197",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://booking.com"
-    },
-    {
-        "duration": "32.30846929292929",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com"
-    },
-    {
-        "duration": "32.39707833333334",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://news.yahoo.com"
-    },
-    {
-        "duration": "39.596718101010104",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://sports.yahoo.com/"
-    },
-    {
-        "duration": "22.70268291919193",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.amazon.com"
-    },
-    {
-        "duration": "32.38882310101009",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.cnn.com"
-    },
-    {
-        "duration": "31.055875343434323",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.ebay.com"
-    },
-    {
-        "duration": "29.678338939393928",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.youtube.com"
-    },
-    {
-        "duration": "46.5214357979798",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "39.188725919191924",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "26.154076626262615",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "26.069677424242432",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch"
-    },
-    {
-        "duration": "21.91335145454546",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/linkedin_pinch"
-    },
-    {
-        "duration": "27.072448222222224",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/twitter_pinch"
-    },
-    {
-        "duration": "35.392396151515165",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/weather_pinch"
-    },
-    {
-        "duration": "33.14390188888889",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_games_pinch"
-    },
-    {
-        "duration": "33.2079732929293",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_news_pinch"
-    },
-    {
-        "duration": "40.718619484848496",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_sports_pinch"
-    },
-    {
-        "duration": "30.502430939393932",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/youtube_pinch"
-    },
-    {
-        "duration": "24.20282247474749",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "24.074684161616158",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "24.049989434343445",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "23.964118606060598",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "24.10839572727273",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "24.144700292929286",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "24.108367444444458",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "23.035316363636355",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "21.360100656565656",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "20.327223505050508",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "35.87636223232324",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "24.314069515151516",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "23.500598757575755",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "23.08250453535355",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "23.016791575757576",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "22.88297080808082",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "22.756930898989907",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "21.884604585858582",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "20.579518989898997",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "19.34737316161615",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "24.890596424242414",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "25.082001282828276",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "24.95338900000001",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "24.907247656565655",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "25.02299748484849",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "24.904818010101",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "25.03035413131313",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "24.85935277777778",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "23.203315292929286",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "22.233629797979795",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "21.77956238383838",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "21.91810305050505",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "21.81251712121212",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "21.863682010101005",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "21.874503525252532",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "21.803491171717187",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "21.86322654545455",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "21.03221536363637",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "19.58269121212121",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "18.757427595959594",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "65.17557407462685",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "81.26968327272728",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding.html"
-    },
-    {
-        "duration": "65.88610394117649",
-        "name": "smoothness.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "81.95422245454547",
-        "name": "smoothness.image_decoding_cases/yuv_decoding.html"
-    },
-    {
-        "duration": "2.2113323199999998E-4",
-        "name": "smoothness.key_mobile_sites_smooth/amazon"
-    },
-    {
-        "duration": "25.350318747474752",
-        "name": "smoothness.key_mobile_sites_smooth/androidpolice"
-    },
-    {
-        "duration": "17.37672144444444",
-        "name": "smoothness.key_mobile_sites_smooth/baidu"
-    },
-    {
-        "duration": "16.179497883838376",
-        "name": "smoothness.key_mobile_sites_smooth/bing"
-    },
-    {
-        "duration": "18.526853101010104",
-        "name": "smoothness.key_mobile_sites_smooth/blogspot"
-    },
-    {
-        "duration": "32.882800282828285",
-        "name": "smoothness.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "23.379700454545446",
-        "name": "smoothness.key_mobile_sites_smooth/booking.com"
-    },
-    {
-        "duration": "37.40040888888888",
-        "name": "smoothness.key_mobile_sites_smooth/capitolvolkswagen"
-    },
-    {
-        "duration": "19.327488434343433",
-        "name": "smoothness.key_mobile_sites_smooth/cnn"
-    },
-    {
-        "duration": "34.58224128282829",
-        "name": "smoothness.key_mobile_sites_smooth/cnn_article"
-    },
-    {
-        "duration": "33.7675455959596",
-        "name": "smoothness.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "25.878067404040408",
-        "name": "smoothness.key_mobile_sites_smooth/deviantart"
-    },
-    {
-        "duration": "2.31146814E-4",
-        "name": "smoothness.key_mobile_sites_smooth/digg"
-    },
-    {
-        "duration": "20.810490585858584",
-        "name": "smoothness.key_mobile_sites_smooth/ebay"
-    },
-    {
-        "duration": "2.67910958E-4",
-        "name": "smoothness.key_mobile_sites_smooth/espn"
-    },
-    {
-        "duration": "21.125003333333336",
-        "name": "smoothness.key_mobile_sites_smooth/facebook"
-    },
-    {
-        "duration": "1.5575885799999997E-4",
-        "name": "smoothness.key_mobile_sites_smooth/forecast.io"
-    },
-    {
-        "duration": "24.759135292929294",
-        "name": "smoothness.key_mobile_sites_smooth/google_news"
-    },
-    {
-        "duration": "20.813705878787893",
-        "name": "smoothness.key_mobile_sites_smooth/google_plus"
-    },
-    {
-        "duration": "17.656018777777778",
-        "name": "smoothness.key_mobile_sites_smooth/google_web_search"
-    },
-    {
-        "duration": "19.115871373737374",
-        "name": "smoothness.key_mobile_sites_smooth/gsp.ro"
-    },
-    {
-        "duration": "23.511869555555563",
-        "name": "smoothness.key_mobile_sites_smooth/linkedin"
-    },
-    {
-        "duration": "16.619878656565657",
-        "name": "smoothness.key_mobile_sites_smooth/mlb"
-    },
-    {
-        "duration": "22.76545967676768",
-        "name": "smoothness.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "25.436306333333327",
-        "name": "smoothness.key_mobile_sites_smooth/pinterest"
-    },
-    {
-        "duration": "26.495792494949477",
-        "name": "smoothness.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "22.050099656565664",
-        "name": "smoothness.key_mobile_sites_smooth/sfgate"
-    },
-    {
-        "duration": "27.34706691919192",
-        "name": "smoothness.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "19.079180939393932",
-        "name": "smoothness.key_mobile_sites_smooth/techcrunch"
-    },
-    {
-        "duration": "20.530508848484857",
-        "name": "smoothness.key_mobile_sites_smooth/theverge"
-    },
-    {
-        "duration": "34.88967134343432",
-        "name": "smoothness.key_mobile_sites_smooth/theverge_article"
-    },
-    {
-        "duration": "2.5146007500000003E-4",
-        "name": "smoothness.key_mobile_sites_smooth/twitter"
-    },
-    {
-        "duration": "33.12766106060606",
-        "name": "smoothness.key_mobile_sites_smooth/usatoday"
-    },
-    {
-        "duration": "24.658401010101006",
-        "name": "smoothness.key_mobile_sites_smooth/wikipedia"
-    },
-    {
-        "duration": "24.759809292929305",
-        "name": "smoothness.key_mobile_sites_smooth/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "26.102780191919187",
-        "name": "smoothness.key_mobile_sites_smooth/wordpress"
-    },
-    {
-        "duration": "45.747915040404045",
-        "name": "smoothness.key_mobile_sites_smooth/worldjournal"
-    },
-    {
-        "duration": "38.3109349090909",
-        "name": "smoothness.key_mobile_sites_smooth/wowwiki"
-    },
-    {
-        "duration": "20.553884939393935",
-        "name": "smoothness.key_mobile_sites_smooth/wsj"
-    },
-    {
-        "duration": "22.914639050505055",
-        "name": "smoothness.key_mobile_sites_smooth/yahoo_answers"
-    },
-    {
-        "duration": "20.57174221212122",
-        "name": "smoothness.key_mobile_sites_smooth/yahoo_news"
-    },
-    {
-        "duration": "18.28048497979798",
-        "name": "smoothness.key_mobile_sites_smooth/youtube"
-    },
-    {
-        "duration": "32.86817991549297",
-        "name": "smoothness.key_silk_cases/basic_stream"
-    },
-    {
-        "duration": "23.917829056338025",
-        "name": "smoothness.key_silk_cases/card_expansion"
-    },
-    {
-        "duration": "24.915508323943666",
-        "name": "smoothness.key_silk_cases/card_expansion_animated"
-    },
-    {
-        "duration": "24.78264873239437",
-        "name": "smoothness.key_silk_cases/card_expansion_images_text"
-    },
-    {
-        "duration": "22.766404563380274",
-        "name": "smoothness.key_silk_cases/card_flying"
-    },
-    {
-        "duration": "24.35833745070423",
-        "name": "smoothness.key_silk_cases/coordinated_animation"
-    },
-    {
-        "duration": "23.635138661971826",
-        "name": "smoothness.key_silk_cases/font_wipe"
-    },
-    {
-        "duration": "23.884862888888886",
-        "name": "smoothness.key_silk_cases/font_wipe.html"
-    },
-    {
-        "duration": "25.469248816901402",
-        "name": "smoothness.key_silk_cases/google_news_ios"
-    },
-    {
-        "duration": "25.097229154929586",
-        "name": "smoothness.key_silk_cases/gws_boogie_expansion"
-    },
-    {
-        "duration": "25.630131309859152",
-        "name": "smoothness.key_silk_cases/gws_google_expansion"
-    },
-    {
-        "duration": "24.349334577464784",
-        "name": "smoothness.key_silk_cases/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "44.74819373737374",
-        "name": "smoothness.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html"
-    },
-    {
-        "duration": "22.53722283838384",
-        "name": "smoothness.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html"
-    },
-    {
-        "duration": "20.942114262626262",
-        "name": "smoothness.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet"
-    },
-    {
-        "duration": "23.89759618181818",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/"
-    },
-    {
-        "duration": "22.916086161616153",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/"
-    },
-    {
-        "duration": "23.583914242424257",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/"
-    },
-    {
-        "duration": "24.398455010101017",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/"
-    },
-    {
-        "duration": "24.785331222222215",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/"
-    },
-    {
-        "duration": "24.899397262626263",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/"
-    },
-    {
-        "duration": "24.99145357575758",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/jx5De/14/show/"
-    },
-    {
-        "duration": "24.300316999999986",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/"
-    },
-    {
-        "duration": "24.444861626262625",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/"
-    },
-    {
-        "duration": "25.84705335353534",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/"
-    },
-    {
-        "duration": "24.108530383838385",
-        "name": "smoothness.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/"
-    },
-    {
-        "duration": "25.503412858585857",
-        "name": "smoothness.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll"
-    },
-    {
-        "duration": "22.324821616161618",
-        "name": "smoothness.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe"
-    },
-    {
-        "duration": "32.989315151515136",
-        "name": "smoothness.key_silk_cases/http://plus.google.com/app/basic/stream"
-    },
-    {
-        "duration": "4.1248798699999997E-4",
-        "name": "smoothness.key_silk_cases/http://s.codepen.io/befamous/fullpage/pFsqb?scroll"
-    },
-    {
-        "duration": "31.519428505050502",
-        "name": "smoothness.key_silk_cases/http://wiltzius.github.io/shape-shifter/"
-    },
-    {
-        "duration": "25.45949865656566",
-        "name": "smoothness.key_silk_cases/http://www.google.com/#q=google"
-    },
-    {
-        "duration": "3.9782524599999997E-4",
-        "name": "smoothness.key_silk_cases/https://polymer-topeka.appspot.com/"
-    },
-    {
-        "duration": "25.05358677777778",
-        "name": "smoothness.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie"
-    },
-    {
-        "duration": "3.45396995E-4",
-        "name": "smoothness.key_silk_cases/inbox_app.html?slide_drawer"
-    },
-    {
-        "duration": "36.95740016161615",
-        "name": "smoothness.key_silk_cases/inbox_app.html?stress_hidey_bars"
-    },
-    {
-        "duration": "19.84401333333333",
-        "name": "smoothness.key_silk_cases/inbox_app.html?swipe_to_dismiss"
-    },
-    {
-        "duration": "27.310471545454547",
-        "name": "smoothness.key_silk_cases/inbox_app.html?toggle_drawer"
-    },
-    {
-        "duration": "28.01744130985915",
-        "name": "smoothness.key_silk_cases/infinite_scrolling"
-    },
-    {
-        "duration": "27.902532181818174",
-        "name": "smoothness.key_silk_cases/infinite_scrolling.html"
-    },
-    {
-        "duration": "23.043557704225357",
-        "name": "smoothness.key_silk_cases/list_animation_simple"
-    },
-    {
-        "duration": "23.490137303030316",
-        "name": "smoothness.key_silk_cases/list_animation_simple.html"
-    },
-    {
-        "duration": "44.635895859154914",
-        "name": "smoothness.key_silk_cases/list_recycle_transform"
-    },
-    {
-        "duration": "23.96564752112676",
-        "name": "smoothness.key_silk_cases/mask_transition_animation"
-    },
-    {
-        "duration": "30.194846971830987",
-        "name": "smoothness.key_silk_cases/masonry"
-    },
-    {
-        "duration": "30.44507414141415",
-        "name": "smoothness.key_silk_cases/masonry.html"
-    },
-    {
-        "duration": "22.368048704225338",
-        "name": "smoothness.key_silk_cases/mobile_news_sandbox"
-    },
-    {
-        "duration": "25.370649887323946",
-        "name": "smoothness.key_silk_cases/parallax_effect"
-    },
-    {
-        "duration": "20.768867746478875",
-        "name": "smoothness.key_silk_cases/physical_simulation"
-    },
-    {
-        "duration": "25.79041352525253",
-        "name": "smoothness.key_silk_cases/pushState.html"
-    },
-    {
-        "duration": "31.571342830985916",
-        "name": "smoothness.key_silk_cases/silk_finance"
-    },
-    {
-        "duration": "31.79460555555556",
-        "name": "smoothness.key_silk_cases/silk_finance.html"
-    },
-    {
-        "duration": "22.02238238028169",
-        "name": "smoothness.key_silk_cases/sticky_using_webkit"
-    },
-    {
-        "duration": "36.56567185915493",
-        "name": "smoothness.key_silk_cases/stress_hidey_bars"
-    },
-    {
-        "duration": "31.33300081690141",
-        "name": "smoothness.key_silk_cases/svg_icon_raster"
-    },
-    {
-        "duration": "19.788641154929582",
-        "name": "smoothness.key_silk_cases/swipe_action"
-    },
-    {
-        "duration": "24.055146915492955",
-        "name": "smoothness.key_silk_cases/swipe_to_dismiss"
-    },
-    {
-        "duration": "27.128876760563386",
-        "name": "smoothness.key_silk_cases/toggle_drawer"
-    },
-    {
-        "duration": "25.646606971830984",
-        "name": "smoothness.key_silk_cases/update_history_state"
-    },
-    {
-        "duration": "24.695754788732398",
-        "name": "smoothness.key_silk_cases/vertical_expansion"
-    },
-    {
-        "duration": "23.39727194366197",
-        "name": "smoothness.key_silk_cases/zoom_in_animation"
-    },
-    {
-        "duration": "18.504768979797976",
-        "name": "smoothness.maps/maps_perf_test"
-    },
-    {
-        "duration": "50.391305527777774",
-        "name": "smoothness.pathological_mobile_sites/cnn_pathological"
-    },
-    {
-        "duration": "25.602937416666673",
-        "name": "smoothness.pathological_mobile_sites/espn_pathological"
-    },
-    {
-        "duration": "22.882058861111105",
-        "name": "smoothness.pathological_mobile_sites/guardian_pathological"
-    },
-    {
-        "duration": "48.03833860606059",
-        "name": "smoothness.pathological_mobile_sites/http://edition.cnn.com"
-    },
-    {
-        "duration": "27.226097323232324",
-        "name": "smoothness.pathological_mobile_sites/http://m.espn.go.com/nhl/rankings"
-    },
-    {
-        "duration": "33.165713525252514",
-        "name": "smoothness.pathological_mobile_sites/http://recode.net"
-    },
-    {
-        "duration": "31.984742111111114",
-        "name": "smoothness.pathological_mobile_sites/http://sports.yahoo.com/"
-    },
-    {
-        "duration": "30.807061515151517",
-        "name": "smoothness.pathological_mobile_sites/http://www.latimes.com"
-    },
-    {
-        "duration": "31.642167949494958",
-        "name": "smoothness.pathological_mobile_sites/http://www.pbs.org/newshour/bb/much-really-cost-live-city-like-seattle/#the-rundown"
-    },
-    {
-        "duration": "23.16318249494949",
-        "name": "smoothness.pathological_mobile_sites/http://www.theguardian.com/politics/2015/mar/09/ed-balls-tory-spending-plans-nhs-charging"
-    },
-    {
-        "duration": "34.0523654040404",
-        "name": "smoothness.pathological_mobile_sites/http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria"
-    },
-    {
-        "duration": "27.60075993939393",
-        "name": "smoothness.pathological_mobile_sites/http://www.zdnet.com"
-    },
-    {
-        "duration": "25.821269292929287",
-        "name": "smoothness.pathological_mobile_sites/https://www.linkedin.com/in/linustorvalds"
-    },
-    {
-        "duration": "28.85288380555555",
-        "name": "smoothness.pathological_mobile_sites/latimes_pathological"
-    },
-    {
-        "duration": "25.334024194444453",
-        "name": "smoothness.pathological_mobile_sites/linkedin_pathological"
-    },
-    {
-        "duration": "29.939105777777783",
-        "name": "smoothness.pathological_mobile_sites/pbs_pathological"
-    },
-    {
-        "duration": "31.406162583333337",
-        "name": "smoothness.pathological_mobile_sites/recode_pathological"
-    },
-    {
-        "duration": "31.4263263888889",
-        "name": "smoothness.pathological_mobile_sites/wow_wiki_pathological"
-    },
-    {
-        "duration": "29.70441333333334",
-        "name": "smoothness.pathological_mobile_sites/yahoo_sports_pathological"
-    },
-    {
-        "duration": "26.614090805555563",
-        "name": "smoothness.pathological_mobile_sites/zdnet_pathological"
-    },
-    {
-        "duration": "54.0676506025641",
-        "name": "smoothness.simple_mobile_sites/ebay_scroll"
-    },
-    {
-        "duration": "37.37320398717949",
-        "name": "smoothness.simple_mobile_sites/flickr_scroll"
-    },
-    {
-        "duration": "33.250007737373735",
-        "name": "smoothness.simple_mobile_sites/http://m.nytimes.com/"
-    },
-    {
-        "duration": "55.51566208080808",
-        "name": "smoothness.simple_mobile_sites/http://www.ebay.co.uk/"
-    },
-    {
-        "duration": "36.568286686868696",
-        "name": "smoothness.simple_mobile_sites/http://www.nyc.gov"
-    },
-    {
-        "duration": "38.74863145454546",
-        "name": "smoothness.simple_mobile_sites/https://www.flickr.com/"
-    },
-    {
-        "duration": "35.91706291025642",
-        "name": "smoothness.simple_mobile_sites/nyc_gov_scroll"
-    },
-    {
-        "duration": "32.78830960256409",
-        "name": "smoothness.simple_mobile_sites/nytimes_scroll"
-    },
-    {
-        "duration": "20.02431441414142",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/amazon"
-    },
-    {
-        "duration": "27.194729747474746",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/androidpolice"
-    },
-    {
-        "duration": "17.916139323232322",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/baidu"
-    },
-    {
-        "duration": "16.609013969696967",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/bing"
-    },
-    {
-        "duration": "19.121365272727264",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/blogspot"
-    },
-    {
-        "duration": "34.87631877777777",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "23.667364616161617",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/booking.com"
-    },
-    {
-        "duration": "39.39716465656565",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/capitolvolkswagen"
-    },
-    {
-        "duration": "19.88321476767677",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn"
-    },
-    {
-        "duration": "36.41210400000001",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn_article"
-    },
-    {
-        "duration": "35.11860633333333",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "26.50883206060606",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/deviantart"
-    },
-    {
-        "duration": "2.371753935714286E-4",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/digg"
-    },
-    {
-        "duration": "21.094613070707073",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/ebay"
-    },
-    {
-        "duration": "31.591526737373737",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/espn"
-    },
-    {
-        "duration": "22.03810724242424",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/facebook"
-    },
-    {
-        "duration": "23.30045149494949",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/forecast.io"
-    },
-    {
-        "duration": "24.675606505050503",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_news"
-    },
-    {
-        "duration": "23.219749858585864",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_plus"
-    },
-    {
-        "duration": "18.529846747474746",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_web_search"
-    },
-    {
-        "duration": "19.8416407070707",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/gsp.ro"
-    },
-    {
-        "duration": "24.20681980808082",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/linkedin"
-    },
-    {
-        "duration": "17.088844414141413",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/mlb"
-    },
-    {
-        "duration": "22.781490313131304",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "27.362588282828284",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/pinterest"
-    },
-    {
-        "duration": "26.921663646464637",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "22.7163132020202",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/sfgate"
-    },
-    {
-        "duration": "28.14428008080808",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "19.763601696969705",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/techcrunch"
-    },
-    {
-        "duration": "21.248669545454547",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge"
-    },
-    {
-        "duration": "36.41737158585858",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge_article"
-    },
-    {
-        "duration": "20.318543545454546",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/twitter"
-    },
-    {
-        "duration": "35.64409949494951",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/usatoday"
-    },
-    {
-        "duration": "25.323874696969696",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia"
-    },
-    {
-        "duration": "25.605219515151518",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "26.935462525252518",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wordpress"
-    },
-    {
-        "duration": "47.22534857575757",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/worldjournal"
-    },
-    {
-        "duration": "39.37278781818182",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wowwiki"
-    },
-    {
-        "duration": "20.95110911111111",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wsj"
-    },
-    {
-        "duration": "23.778150777777782",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_answers"
-    },
-    {
-        "duration": "21.15945578787878",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_news"
-    },
-    {
-        "duration": "19.455767737373744",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/youtube"
-    },
-    {
-        "duration": "1.354217539E-4",
-        "name": "smoothness.top_25_smooth/amazon"
-    },
-    {
-        "duration": "30.53252716161616",
-        "name": "smoothness.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "23.124127575757576",
-        "name": "smoothness.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "2.5498866900000003E-4",
-        "name": "smoothness.top_25_smooth/cnn"
-    },
-    {
-        "duration": "17.435840070707073",
-        "name": "smoothness.top_25_smooth/ebay"
-    },
-    {
-        "duration": "23.638452080808083",
-        "name": "smoothness.top_25_smooth/espn"
-    },
-    {
-        "duration": "22.165393595959596",
-        "name": "smoothness.top_25_smooth/facebook"
-    },
-    {
-        "duration": "67.67521139393938",
-        "name": "smoothness.top_25_smooth/gmail"
-    },
-    {
-        "duration": "33.69550159595961",
-        "name": "smoothness.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "47.573370565656546",
-        "name": "smoothness.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "36.18511610101011",
-        "name": "smoothness.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "42.148479171717156",
-        "name": "smoothness.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "18.65928963636364",
-        "name": "smoothness.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "20.241625222222225",
-        "name": "smoothness.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "24.089806262626254",
-        "name": "smoothness.top_25_smooth/pinterest"
-    },
-    {
-        "duration": "30.10980199999999",
-        "name": "smoothness.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "24.257961424242424",
-        "name": "smoothness.top_25_smooth/twitter"
-    },
-    {
-        "duration": "26.5012102929293",
-        "name": "smoothness.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "32.86209546464648",
-        "name": "smoothness.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "27.75279394949495",
-        "name": "smoothness.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "23.058210141414147",
-        "name": "smoothness.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "36.03707145454545",
-        "name": "smoothness.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "26.54153418181817",
-        "name": "smoothness.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "24.45705438383838",
-        "name": "smoothness.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "36.48508357575758",
-        "name": "smoothness.top_25_smooth/youtube"
-    },
-    {
-        "duration": "32.93722462025316",
-        "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "38.04891934343433",
-        "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html"
-    },
-    {
-        "duration": "3.9864910666666665E-4",
-        "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations_composited_transform.html"
-    },
-    {
-        "duration": "29.382368949367102",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "30.957883616161606",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html"
-    },
-    {
-        "duration": "29.411285936708865",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "30.33104121212123",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html"
-    },
-    {
-        "duration": "29.426281481012666",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "29.317628909090896",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html"
-    },
-    {
-        "duration": "29.795815873417716",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas"
-    },
-    {
-        "duration": "31.22580295959595",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html"
-    },
-    {
-        "duration": "29.959145835443042",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css"
-    },
-    {
-        "duration": "34.64029882828283",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css.html"
-    },
-    {
-        "duration": "53.63490156962027",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations"
-    },
-    {
-        "duration": "55.502977121212105",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations.html"
-    },
-    {
-        "duration": "28.156190000000002",
-        "name": "smoothness.tough_animation_cases/compositor_heavy_animation"
-    },
-    {
-        "duration": "28.135392676767673",
-        "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200"
-    },
-    {
-        "duration": "142.59641583333334",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "30.73311575757575",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "29.878954232323235",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "29.90885762626262",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "29.876234515151527",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "29.733342354430373",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "30.66545055696203",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "29.616757607594938",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "29.558853202531655",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "32.550295909090906",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "33.768087727272736",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "31.503526575757572",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "31.56739598989899",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "28.128811898734178",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "28.29114780808081",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "31.468445481012658",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "32.185666443037974",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "33.70422744303796",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "32.58730623232323",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "30.869567060606073",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "31.60407201010101",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "31.824163424242414",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "31.60885650632911",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "31.545026367088614",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "32.766090924050644",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "30.670539911392407",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "31.424053202531642",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "29.945014962025326",
-        "name": "smoothness.tough_animation_cases/css_transitions_inline_style"
-    },
-    {
-        "duration": "30.360848227848116",
-        "name": "smoothness.tough_animation_cases/css_transitions_new_element"
-    },
-    {
-        "duration": "30.526550646464642",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "30.09856731313132",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "30.06788649494948",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "30.217358606060596",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "30.35700803030304",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "30.33360631313132",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "30.383120535353534",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "30.39241971717171",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "30.23581458227848",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "30.079201708860758",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "30.031308582278477",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "31.459235969696973",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "30.68627027272727",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "31.04699124242425",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "31.226871252525253",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "30.250562075949357",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "30.009415443037977",
-        "name": "smoothness.tough_animation_cases/css_transitions_style_element"
-    },
-    {
-        "duration": "30.990381240506327",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "31.18896429113924",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "30.36422558227846",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "30.902391708860762",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "30.01165607594937",
-        "name": "smoothness.tough_animation_cases/css_transitions_updating_class"
-    },
-    {
-        "duration": "28.072727632911384",
-        "name": "smoothness.tough_animation_cases/css_value_type_color"
-    },
-    {
-        "duration": "28.079098313131308",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "28.147146707070704",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "28.65298730379746",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter"
-    },
-    {
-        "duration": "28.678620090909092",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "27.723168924050643",
-        "name": "smoothness.tough_animation_cases/css_value_type_length"
-    },
-    {
-        "duration": "27.773647636363645",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "28.033301212121213",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "28.067816556962015",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex"
-    },
-    {
-        "duration": "28.10041787878788",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "28.259131313131316",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "28.058593696202532",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple"
-    },
-    {
-        "duration": "28.051657676767675",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "28.24260953535355",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "28.68689516455698",
-        "name": "smoothness.tough_animation_cases/css_value_type_path"
-    },
-    {
-        "duration": "28.66930103030303",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "28.477298262626263",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "28.131010367088606",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow"
-    },
-    {
-        "duration": "28.1409104848485",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "28.192713222222224",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "27.75073567088608",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex"
-    },
-    {
-        "duration": "27.79762033333332",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "27.79831377777778",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "27.54941921518988",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple"
-    },
-    {
-        "duration": "27.92336455555555",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "27.753073131313137",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "27.540967886075947",
-        "name": "smoothness.tough_animation_cases/keyframed_animations"
-    },
-    {
-        "duration": "27.624362919191928",
-        "name": "smoothness.tough_animation_cases/keyframed_animations.html"
-    },
-    {
-        "duration": "28.660494949367084",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "28.561820414141405",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html"
-    },
-    {
-        "duration": "28.760740303797466",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "28.536286555555552",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html"
-    },
-    {
-        "duration": "28.320164202531643",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "28.065941405063292",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "27.95620525252525",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html"
-    },
-    {
-        "duration": "28.38815881818182",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html"
-    },
-    {
-        "duration": "28.094482282828288",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html"
-    },
-    {
-        "duration": "28.100236822784797",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "3.882015476470588E-4",
-        "name": "smoothness.tough_animation_cases/robohornetpro"
-    },
-    {
-        "duration": "27.395186686868673",
-        "name": "smoothness.tough_animation_cases/transform_transition_js_block.html"
-    },
-    {
-        "duration": "28.10205679746835",
-        "name": "smoothness.tough_animation_cases/transform_transitions"
-    },
-    {
-        "duration": "28.334037717171714",
-        "name": "smoothness.tough_animation_cases/transform_transitions.html"
-    },
-    {
-        "duration": "27.289361354430373",
-        "name": "smoothness.tough_animation_cases/transform_transitions_js_block"
-    },
-    {
-        "duration": "28.196671139240504",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_color"
-    },
-    {
-        "duration": "27.88747105063291",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "28.109415164556957",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "28.171017670886073",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "28.446795430379748",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_path"
-    },
-    {
-        "duration": "28.18946606329114",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "27.733102493670888",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "27.76254259493671",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "156.9857204705882",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "27.843329253164566",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time"
-    },
-    {
-        "duration": "27.85949974747475",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316"
-    },
-    {
-        "duration": "29.557070139240516",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous"
-    },
-    {
-        "duration": "29.654945040404037",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316"
-    },
-    {
-        "duration": "30.77703607594936",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "31.121465161616154",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316"
-    },
-    {
-        "duration": "28.00174732911393",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "28.105338787878797",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "31.584008555555545",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316"
-    },
-    {
-        "duration": "31.41249265822785",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "30.54752977777779",
-        "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html"
-    },
-    {
-        "duration": "19.080685909090903",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_15"
-    },
-    {
-        "duration": "45.170696090909104",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow"
-    },
-    {
-        "duration": "30.730245025974018",
-        "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "20.949370025974027",
-        "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles"
-    },
-    {
-        "duration": "18.35745779220779",
-        "name": "smoothness.tough_canvas_cases/bouncing_png_images"
-    },
-    {
-        "duration": "29.780429467532475",
-        "name": "smoothness.tough_canvas_cases/bouncing_svg_images"
-    },
-    {
-        "duration": "19.302947753246755",
-        "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear"
-    },
-    {
-        "duration": "21.20933919480519",
-        "name": "smoothness.tough_canvas_cases/canvas_arcs"
-    },
-    {
-        "duration": "21.16278798701299",
-        "name": "smoothness.tough_canvas_cases/canvas_font_cycler"
-    },
-    {
-        "duration": "19.6703722987013",
-        "name": "smoothness.tough_canvas_cases/canvas_lines"
-    },
-    {
-        "duration": "20.101712670886073",
-        "name": "smoothness.tough_canvas_cases/chip_tune"
-    },
-    {
-        "duration": "19.503441860759494",
-        "name": "smoothness.tough_canvas_cases/crafty_mind"
-    },
-    {
-        "duration": "22.02179524358974",
-        "name": "smoothness.tough_canvas_cases/effect_games"
-    },
-    {
-        "duration": "20.63281672727273",
-        "name": "smoothness.tough_canvas_cases/fill_shapes"
-    },
-    {
-        "duration": "33.34810815189873",
-        "name": "smoothness.tough_canvas_cases/geo_apis"
-    },
-    {
-        "duration": "20.374479538461536",
-        "name": "smoothness.tough_canvas_cases/hakim"
-    },
-    {
-        "duration": "39.257565020202016",
-        "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM"
-    },
-    {
-        "duration": "20.52611616161617",
-        "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/"
-    },
-    {
-        "duration": "21.294099898989895",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html"
-    },
-    {
-        "duration": "39.82182797979799",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html"
-    },
-    {
-        "duration": "20.000473404040406",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html"
-    },
-    {
-        "duration": "24.320186040404046",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html"
-    },
-    {
-        "duration": "22.61543681818182",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html"
-    },
-    {
-        "duration": "21.034462393939393",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/"
-    },
-    {
-        "duration": "22.698438343434347",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html"
-    },
-    {
-        "duration": "25.157146090909087",
-        "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/"
-    },
-    {
-        "duration": "20.715205414141412",
-        "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169"
-    },
-    {
-        "duration": "21.299530606060607",
-        "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html"
-    },
-    {
-        "duration": "19.389636050505047",
-        "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html"
-    },
-    {
-        "duration": "20.74405278787878",
-        "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/"
-    },
-    {
-        "duration": "20.300277686868696",
-        "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html"
-    },
-    {
-        "duration": "19.6746681919192",
-        "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html"
-    },
-    {
-        "duration": "22.4397556060606",
-        "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/"
-    },
-    {
-        "duration": "22.59910464646464",
-        "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html"
-    },
-    {
-        "duration": "23.25767676767677",
-        "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/"
-    },
-    {
-        "duration": "20.798426353535355",
-        "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/"
-    },
-    {
-        "duration": "24.113697769230768",
-        "name": "smoothness.tough_canvas_cases/jarro_doverson"
-    },
-    {
-        "duration": "21.937401354430378",
-        "name": "smoothness.tough_canvas_cases/kevs_3d"
-    },
-    {
-        "duration": "20.702875556962027",
-        "name": "smoothness.tough_canvas_cases/man_in_blue"
-    },
-    {
-        "duration": "29.654976",
-        "name": "smoothness.tough_canvas_cases/many_images"
-    },
-    {
-        "duration": "22.569982594936707",
-        "name": "smoothness.tough_canvas_cases/megi_dish"
-    },
-    {
-        "duration": "24.377868220779227",
-        "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "21.45255720253165",
-        "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "20.677777461538454",
-        "name": "smoothness.tough_canvas_cases/microsoft_snow"
-    },
-    {
-        "duration": "22.212061303797466",
-        "name": "smoothness.tough_canvas_cases/microsoft_speed_reading"
-    },
-    {
-        "duration": "21.289256948717938",
-        "name": "smoothness.tough_canvas_cases/microsoft_tweet_map"
-    },
-    {
-        "duration": "47.04659653846155",
-        "name": "smoothness.tough_canvas_cases/microsoft_video_city"
-    },
-    {
-        "duration": "19.930058653846157",
-        "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains"
-    },
-    {
-        "duration": "20.64460326582279",
-        "name": "smoothness.tough_canvas_cases/mix_10k"
-    },
-    {
-        "duration": "20.603773831168823",
-        "name": "smoothness.tough_canvas_cases/put_get_image_data"
-    },
-    {
-        "duration": "20.202671531645564",
-        "name": "smoothness.tough_canvas_cases/runway"
-    },
-    {
-        "duration": "20.596650636363627",
-        "name": "smoothness.tough_canvas_cases/smash_cat"
-    },
-    {
-        "duration": "19.451934679487184",
-        "name": "smoothness.tough_canvas_cases/spielzeugz"
-    },
-    {
-        "duration": "22.607667402597404",
-        "name": "smoothness.tough_canvas_cases/stroke_shapes"
-    },
-    {
-        "duration": "20.187603919191915",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html"
-    },
-    {
-        "duration": "21.1028815050505",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html"
-    },
-    {
-        "duration": "45.35835580808083",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image"
-    },
-    {
-        "duration": "19.683793606060604",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15"
-    },
-    {
-        "duration": "5.06711E-4",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html"
-    },
-    {
-        "duration": "23.966289848484838",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html"
-    },
-    {
-        "duration": "20.852733171717162",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html"
-    },
-    {
-        "duration": "18.386774636363633",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html"
-    },
-    {
-        "duration": "32.17657043434344",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html"
-    },
-    {
-        "duration": "21.254412171717174",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html"
-    },
-    {
-        "duration": "19.67092844444444",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html"
-    },
-    {
-        "duration": "20.435415080808088",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html"
-    },
-    {
-        "duration": "31.403039555555555",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html"
-    },
-    {
-        "duration": "22.995322868686873",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html"
-    },
-    {
-        "duration": "27.792222080808088",
-        "name": "smoothness.tough_filters_cases/Analog_Clock_SVG"
-    },
-    {
-        "duration": "28.821003898989897",
-        "name": "smoothness.tough_filters_cases/Filter_Terrain_SVG"
-    },
-    {
-        "duration": "32.777650414141405",
-        "name": "smoothness.tough_filters_cases/IE_PirateMark"
-    },
-    {
-        "duration": "46.94865966666667",
-        "name": "smoothness.tough_filters_cases/MotionMark_Focus"
-    },
-    {
-        "duration": "25.229982175000007",
-        "name": "smoothness.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "26.002865787500003",
-        "name": "smoothness.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "30.60252652499999",
-        "name": "smoothness.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "39.120848225",
-        "name": "smoothness.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "27.795290030303025",
-        "name": "smoothness.tough_image_decode_cases/cats_unscaled"
-    },
-    {
-        "duration": "15.419358946969696",
-        "name": "smoothness.tough_image_decode_cases/cats_viewport_width"
-    },
-    {
-        "duration": "27.758225555555562",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html"
-    },
-    {
-        "duration": "15.4114132020202",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html"
-    },
-    {
-        "duration": "44.263682646464645",
-        "name": "smoothness.tough_path_rendering_cases/GUIMark_Vector_Chart_Test"
-    },
-    {
-        "duration": "38.494215868686865",
-        "name": "smoothness.tough_path_rendering_cases/IE_Chalkboard"
-    },
-    {
-        "duration": "28.581301080808082",
-        "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes"
-    },
-    {
-        "duration": "28.798777373737394",
-        "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes"
-    },
-    {
-        "duration": "40.926306337499994",
-        "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "36.661938037499986",
-        "name": "smoothness.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "26.936737400000005",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "27.151556375000002",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "30.800633202020204",
-        "name": "smoothness.tough_pinch_zoom_cases/Blogger"
-    },
-    {
-        "duration": "35.77718787878788",
-        "name": "smoothness.tough_pinch_zoom_cases/ESPN"
-    },
-    {
-        "duration": "26.733205363636362",
-        "name": "smoothness.tough_pinch_zoom_cases/Facebook"
-    },
-    {
-        "duration": "21.84861522222223",
-        "name": "smoothness.tough_pinch_zoom_cases/LinkedIn"
-    },
-    {
-        "duration": "26.2707691919192",
-        "name": "smoothness.tough_pinch_zoom_cases/Twitter"
-    },
-    {
-        "duration": "33.754365020202016",
-        "name": "smoothness.tough_pinch_zoom_cases/Weather.com"
-    },
-    {
-        "duration": "22.544678183673472",
-        "name": "smoothness.tough_pinch_zoom_cases/amazon_pinch"
-    },
-    {
-        "duration": "30.143703244897964",
-        "name": "smoothness.tough_pinch_zoom_cases/blogspot_pinch"
-    },
-    {
-        "duration": "25.85749467346939",
-        "name": "smoothness.tough_pinch_zoom_cases/booking_pinch"
-    },
-    {
-        "duration": "33.79667585416666",
-        "name": "smoothness.tough_pinch_zoom_cases/cnn_pinch"
-    },
-    {
-        "duration": "31.572076816326522",
-        "name": "smoothness.tough_pinch_zoom_cases/ebay_pinch"
-    },
-    {
-        "duration": "37.94760051020408",
-        "name": "smoothness.tough_pinch_zoom_cases/espn_pinch"
-    },
-    {
-        "duration": "28.08947820408163",
-        "name": "smoothness.tough_pinch_zoom_cases/facebook_pinch"
-    },
-    {
-        "duration": "53.52299646938776",
-        "name": "smoothness.tough_pinch_zoom_cases/gmail_pinch"
-    },
-    {
-        "duration": "25.939297020408166",
-        "name": "smoothness.tough_pinch_zoom_cases/google_calendar_pinch"
-    },
-    {
-        "duration": "26.891234734693878",
-        "name": "smoothness.tough_pinch_zoom_cases/google_image_pinch"
-    },
-    {
-        "duration": "39.3597532244898",
-        "name": "smoothness.tough_pinch_zoom_cases/google_search_pinch"
-    },
-    {
-        "duration": "25.26153025252526",
-        "name": "smoothness.tough_pinch_zoom_cases/http://booking.com"
-    },
-    {
-        "duration": "32.91005675757576",
-        "name": "smoothness.tough_pinch_zoom_cases/http://games.yahoo.com"
-    },
-    {
-        "duration": "32.16623657575758",
-        "name": "smoothness.tough_pinch_zoom_cases/http://news.yahoo.com"
-    },
-    {
-        "duration": "38.012918141414154",
-        "name": "smoothness.tough_pinch_zoom_cases/http://sports.yahoo.com/"
-    },
-    {
-        "duration": "22.356300727272735",
-        "name": "smoothness.tough_pinch_zoom_cases/http://www.amazon.com"
-    },
-    {
-        "duration": "31.83677420202021",
-        "name": "smoothness.tough_pinch_zoom_cases/http://www.cnn.com"
-    },
-    {
-        "duration": "31.15818551515153",
-        "name": "smoothness.tough_pinch_zoom_cases/http://www.ebay.com"
-    },
-    {
-        "duration": "29.57042976767677",
-        "name": "smoothness.tough_pinch_zoom_cases/http://www.youtube.com"
-    },
-    {
-        "duration": "41.39919131313131",
-        "name": "smoothness.tough_pinch_zoom_cases/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "38.07974644444444",
-        "name": "smoothness.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "26.21586877777778",
-        "name": "smoothness.tough_pinch_zoom_cases/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "27.164185626262615",
-        "name": "smoothness.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch"
-    },
-    {
-        "duration": "21.756811081632655",
-        "name": "smoothness.tough_pinch_zoom_cases/linkedin_pinch"
-    },
-    {
-        "duration": "27.52438779166666",
-        "name": "smoothness.tough_pinch_zoom_cases/twitter_pinch"
-    },
-    {
-        "duration": "39.840795816326526",
-        "name": "smoothness.tough_pinch_zoom_cases/weather_pinch"
-    },
-    {
-        "duration": "33.791566857142854",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_games_pinch"
-    },
-    {
-        "duration": "33.86926775510203",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_news_pinch"
-    },
-    {
-        "duration": "42.70190397959184",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_sports_pinch"
-    },
-    {
-        "duration": "33.930994489795914",
-        "name": "smoothness.tough_pinch_zoom_cases/youtube_pinch"
-    },
-    {
-        "duration": "24.13108227272728",
-        "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "23.94836456565657",
-        "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "23.862978989898988",
-        "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "23.742746070707067",
-        "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "23.407207363636363",
-        "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "23.426364505050497",
-        "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "23.521491949494948",
-        "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "22.432938313131313",
-        "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "20.96914249494949",
-        "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "19.93218999999999",
-        "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "35.07560601010102",
-        "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "23.06239716161617",
-        "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "22.35666229292929",
-        "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "22.40207157575757",
-        "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "22.09419401010101",
-        "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "21.878260545454538",
-        "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "21.823401494949493",
-        "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "20.98283712121212",
-        "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "19.7684117070707",
-        "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "18.984960101010103",
-        "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "24.856765303030322",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "24.898161424242435",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "24.734197606060604",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "24.76906805050504",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "24.89300415151514",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "24.713755777777774",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "24.56758952525253",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "24.398333050505055",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "23.001992525252525",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "22.03596396969696",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "21.491442232323227",
-        "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "21.42128835353535",
-        "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "21.47238290909091",
-        "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "21.641690636363645",
-        "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "21.603251090909094",
-        "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "21.471453616161618",
-        "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "21.45357283838384",
-        "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "20.922658777777777",
-        "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "19.419393868686875",
-        "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "18.60041250505051",
-        "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "37.1593949852941",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation"
-    },
-    {
-        "duration": "37.316043010101",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation.html"
-    },
-    {
-        "duration": "27.141407441176465",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "27.130495919191926",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient.html"
-    },
-    {
-        "duration": "9.790934015384617E-4",
-        "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads.html"
-    },
-    {
-        "duration": "27.191593264705887",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads"
-    },
-    {
-        "duration": "27.141429262626275",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads.html"
-    },
-    {
-        "duration": "25.56651914705883",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads"
-    },
-    {
-        "duration": "25.83860575757576",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads.html"
-    },
-    {
-        "duration": "25.98651282352941",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads"
-    },
-    {
-        "duration": "26.291956888888887",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads.html"
-    },
-    {
-        "duration": "6.2599812",
-        "name": "smoothness.tough_webgl_cases/animometer_webgl"
-    },
-    {
-        "duration": "6.410708411111111",
-        "name": "smoothness.tough_webgl_cases/aquarium"
-    },
-    {
-        "duration": "6.408661697979797",
-        "name": "smoothness.tough_webgl_cases/aquarium_20k"
-    },
-    {
-        "duration": "6.296394094444443",
-        "name": "smoothness.tough_webgl_cases/blob"
-    },
-    {
-        "duration": "6.29071058611111",
-        "name": "smoothness.tough_webgl_cases/dynamic_cube_map"
-    },
-    {
-        "duration": "6.284061972222222",
-        "name": "smoothness.tough_webgl_cases/earth"
-    },
-    {
-        "duration": "6.491773628282826",
-        "name": "smoothness.tough_webgl_cases/http://kenrussell.github.io/webgl-animometer/Animometer/tests/3d/webgl.html"
-    },
-    {
-        "duration": "11.855262998989897",
-        "name": "smoothness.tough_webgl_cases/http://webglsamples.org/aquarium/aquarium.html"
-    },
-    {
-        "duration": "6.4514991383838405",
-        "name": "smoothness.tough_webgl_cases/http://webglsamples.org/blob/blob.html"
-    },
-    {
-        "duration": "6.5239576030303",
-        "name": "smoothness.tough_webgl_cases/http://webglsamples.org/dynamic-cubemap/dynamic-cubemap.html"
-    },
-    {
-        "duration": "22.426197949494945",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/nvidia-vertex-buffer-object/index.html"
-    },
-    {
-        "duration": "11.814221277777781",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/particles/index.html"
-    },
-    {
-        "duration": "12.222427406060604",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/san-angeles/index.html"
-    },
-    {
-        "duration": "13.075231064646461",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/Earth.html"
-    },
-    {
-        "duration": "11.905891209090905",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/ManyPlanetsDeep.html"
-    },
-    {
-        "duration": "6.211767508333333",
-        "name": "smoothness.tough_webgl_cases/many_planets_deep"
-    },
-    {
-        "duration": "19.345400416666667",
-        "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "6.965218008333334",
-        "name": "smoothness.tough_webgl_cases/particles"
-    },
-    {
-        "duration": "7.575802086111112",
-        "name": "smoothness.tough_webgl_cases/san_angeles"
-    },
-    {
-        "duration": "147.17874989898988",
-        "name": "speedometer-future/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "141.51412323232327",
-        "name": "speedometer/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "259.4743301010102",
-        "name": "speedometer2-future/Speedometer2"
-    },
-    {
-        "duration": "254.07946151515154",
-        "name": "speedometer2/Speedometer2"
-    },
-    {
-        "duration": "35.292414670707075",
-        "name": "start_with_url.cold.startup_pages/about:blank"
-    },
-    {
-        "duration": "35.710181262626264",
-        "name": "start_with_url.cold.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "32.594106345270895",
-        "name": "start_with_url.warm.startup_pages/about:blank"
-    },
-    {
-        "duration": "34.49074906703397",
-        "name": "start_with_url.warm.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "30.523201151515153",
-        "name": "system_health.common_mobile/background:media:imgur"
-    },
-    {
-        "duration": "4.997412306666666E-4",
-        "name": "system_health.common_mobile/background:news:nytimes"
-    },
-    {
-        "duration": "32.607920555555566",
-        "name": "system_health.common_mobile/background:search:google"
-    },
-    {
-        "duration": "45.91138055555555",
-        "name": "system_health.common_mobile/background:social:facebook"
-    },
-    {
-        "duration": "54.127892333333364",
-        "name": "system_health.common_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "129.10833219191923",
-        "name": "system_health.common_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "44.26154185858585",
-        "name": "system_health.common_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "124.92000149494949",
-        "name": "system_health.common_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "69.29237593939395",
-        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "104.34221198989903",
-        "name": "system_health.common_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "165.7748712121212",
-        "name": "system_health.common_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "263.25035606060607",
-        "name": "system_health.common_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "91.07696409090904",
-        "name": "system_health.common_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "2.5241191615384617E-4",
-        "name": "system_health.common_mobile/browse:news:globo"
-    },
-    {
-        "duration": "73.3268954646465",
-        "name": "system_health.common_mobile/browse:news:qq"
-    },
-    {
-        "duration": "86.70862684848481",
-        "name": "system_health.common_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "4.328214192307692E-4",
-        "name": "system_health.common_mobile/browse:news:toi"
-    },
-    {
-        "duration": "73.85789543434342",
-        "name": "system_health.common_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "118.68553493939392",
-        "name": "system_health.common_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "122.05129403030305",
-        "name": "system_health.common_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "4.1521512538461537E-4",
-        "name": "system_health.common_mobile/browse:shopping:flipkart"
-    },
-    {
-        "duration": "57.02305162626266",
-        "name": "system_health.common_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "100.90330792929294",
-        "name": "system_health.common_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "167.08639454545457",
-        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "128.90585100000004",
-        "name": "system_health.common_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "136.0685866666667",
-        "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "9.252108084615384E-4",
-        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "73.87800973737373",
-        "name": "system_health.common_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "100.64880898989897",
-        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "69.43588652525254",
-        "name": "system_health.common_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "25.36347053535353",
-        "name": "system_health.common_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "35.65053584848485",
-        "name": "system_health.common_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "26.172971959595962",
-        "name": "system_health.common_mobile/load:games:lazors"
-    },
-    {
-        "duration": "4.368928761538461E-4",
-        "name": "system_health.common_mobile/load:games:spychase"
-    },
-    {
-        "duration": "35.18797272727273",
-        "name": "system_health.common_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "30.601108666666658",
-        "name": "system_health.common_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "30.22379213131314",
-        "name": "system_health.common_mobile/load:media:google_images"
-    },
-    {
-        "duration": "30.756693828282838",
-        "name": "system_health.common_mobile/load:media:imgur"
-    },
-    {
-        "duration": "29.093388303030306",
-        "name": "system_health.common_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "29.98097957575759",
-        "name": "system_health.common_mobile/load:media:youtube"
-    },
-    {
-        "duration": "66.80765163636366",
-        "name": "system_health.common_mobile/load:news:cnn"
-    },
-    {
-        "duration": "56.37527630303031",
-        "name": "system_health.common_mobile/load:news:irctc"
-    },
-    {
-        "duration": "39.18603206060606",
-        "name": "system_health.common_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "29.06739854545455",
-        "name": "system_health.common_mobile/load:news:qq"
-    },
-    {
-        "duration": "31.76050677777777",
-        "name": "system_health.common_mobile/load:news:reddit"
-    },
-    {
-        "duration": "35.09394305050506",
-        "name": "system_health.common_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "31.739422747474748",
-        "name": "system_health.common_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "30.05324744444445",
-        "name": "system_health.common_mobile/load:search:baidu"
-    },
-    {
-        "duration": "30.206667050505057",
-        "name": "system_health.common_mobile/load:search:ebay"
-    },
-    {
-        "duration": "27.70260753535353",
-        "name": "system_health.common_mobile/load:search:google"
-    },
-    {
-        "duration": "29.483762777777773",
-        "name": "system_health.common_mobile/load:search:taobao"
-    },
-    {
-        "duration": "27.373684999999995",
-        "name": "system_health.common_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "28.899427909090907",
-        "name": "system_health.common_mobile/load:search:yandex"
-    },
-    {
-        "duration": "28.57572242424243",
-        "name": "system_health.common_mobile/load:social:twitter"
-    },
-    {
-        "duration": "28.179340717171712",
-        "name": "system_health.common_mobile/load:tools:docs"
-    },
-    {
-        "duration": "42.73104664646467",
-        "name": "system_health.common_mobile/load:tools:drive"
-    },
-    {
-        "duration": "33.71655949494951",
-        "name": "system_health.common_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "4.542057315384615E-4",
-        "name": "system_health.common_mobile/load:tools:gmail"
-    },
-    {
-        "duration": "30.491091030303025",
-        "name": "system_health.common_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "45.300949686868705",
-        "name": "system_health.common_mobile/load:tools:weather"
-    },
-    {
-        "duration": "147.23335838383838",
-        "name": "system_health.common_mobile/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "146.1766026262626",
-        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "31.621897760942765",
-        "name": "system_health.memory_mobile/background:media:imgur"
-    },
-    {
-        "duration": "53.86591886531987",
-        "name": "system_health.memory_mobile/background:news:nytimes"
-    },
-    {
-        "duration": "33.145711148148145",
-        "name": "system_health.memory_mobile/background:search:google"
-    },
-    {
-        "duration": "38.12781888215488",
-        "name": "system_health.memory_mobile/background:social:facebook"
-    },
-    {
-        "duration": "45.3187475016835",
-        "name": "system_health.memory_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "114.03136267340074",
-        "name": "system_health.memory_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "44.309386181818184",
-        "name": "system_health.memory_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "102.94231690235692",
-        "name": "system_health.memory_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "56.407467835016824",
-        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "82.88522897979794",
-        "name": "system_health.memory_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "105.1720869057239",
-        "name": "system_health.memory_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "180.6079983838383",
-        "name": "system_health.memory_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "69.59971872390571",
-        "name": "system_health.memory_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "3.2931234958333326E-4",
-        "name": "system_health.memory_mobile/browse:news:globo"
-    },
-    {
-        "duration": "61.27877745791247",
-        "name": "system_health.memory_mobile/browse:news:qq"
-    },
-    {
-        "duration": "73.69309203030303",
-        "name": "system_health.memory_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "4.845129126388888E-4",
-        "name": "system_health.memory_mobile/browse:news:toi"
-    },
-    {
-        "duration": "60.8097763535354",
-        "name": "system_health.memory_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "82.40707234680136",
-        "name": "system_health.memory_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "89.57884268686865",
-        "name": "system_health.memory_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "5.035036133333332E-4",
-        "name": "system_health.memory_mobile/browse:shopping:flipkart"
-    },
-    {
-        "duration": "49.062225909090934",
-        "name": "system_health.memory_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "80.10532982828282",
-        "name": "system_health.memory_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "102.98890005050504",
-        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "96.68784291582486",
-        "name": "system_health.memory_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "98.06801944444445",
-        "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "110.20222482491579",
-        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "62.92624894276095",
-        "name": "system_health.memory_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "77.72081903367",
-        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "61.98962920538719",
-        "name": "system_health.memory_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "28.2482947003367",
-        "name": "system_health.memory_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "31.84797350168351",
-        "name": "system_health.memory_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "29.11291212457914",
-        "name": "system_health.memory_mobile/load:games:lazors"
-    },
-    {
-        "duration": "38.73746326936027",
-        "name": "system_health.memory_mobile/load:games:spychase"
-    },
-    {
-        "duration": "36.78424268013467",
-        "name": "system_health.memory_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "32.57984762626263",
-        "name": "system_health.memory_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "32.48646622558922",
-        "name": "system_health.memory_mobile/load:media:google_images"
-    },
-    {
-        "duration": "32.403381171717164",
-        "name": "system_health.memory_mobile/load:media:imgur"
-    },
-    {
-        "duration": "31.170994821548835",
-        "name": "system_health.memory_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "32.34003139730641",
-        "name": "system_health.memory_mobile/load:media:youtube"
-    },
-    {
-        "duration": "60.88662639057237",
-        "name": "system_health.memory_mobile/load:news:cnn"
-    },
-    {
-        "duration": "44.873896622895614",
-        "name": "system_health.memory_mobile/load:news:irctc"
-    },
-    {
-        "duration": "39.01714937373736",
-        "name": "system_health.memory_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "30.845649148148148",
-        "name": "system_health.memory_mobile/load:news:qq"
-    },
-    {
-        "duration": "34.32440148148148",
-        "name": "system_health.memory_mobile/load:news:reddit"
-    },
-    {
-        "duration": "35.14253416835017",
-        "name": "system_health.memory_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "34.09335648484849",
-        "name": "system_health.memory_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "31.72862553535353",
-        "name": "system_health.memory_mobile/load:search:baidu"
-    },
-    {
-        "duration": "31.046157959595956",
-        "name": "system_health.memory_mobile/load:search:ebay"
-    },
-    {
-        "duration": "30.443287969696957",
-        "name": "system_health.memory_mobile/load:search:google"
-    },
-    {
-        "duration": "31.4326678047138",
-        "name": "system_health.memory_mobile/load:search:taobao"
-    },
-    {
-        "duration": "30.222465400673393",
-        "name": "system_health.memory_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "31.155886313131305",
-        "name": "system_health.memory_mobile/load:search:yandex"
-    },
-    {
-        "duration": "30.877675053872064",
-        "name": "system_health.memory_mobile/load:social:twitter"
-    },
-    {
-        "duration": "30.76361068013468",
-        "name": "system_health.memory_mobile/load:tools:docs"
-    },
-    {
-        "duration": "39.80516326262627",
-        "name": "system_health.memory_mobile/load:tools:drive"
-    },
-    {
-        "duration": "34.836199090909105",
-        "name": "system_health.memory_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "4.7509537736111114E-4",
-        "name": "system_health.memory_mobile/load:tools:gmail"
-    },
-    {
-        "duration": "32.650360363636345",
-        "name": "system_health.memory_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "42.68365425589225",
-        "name": "system_health.memory_mobile/load:tools:weather"
-    },
-    {
-        "duration": "0.0014847914416666668",
-        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "221.29104303030297",
-        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "42.16013333333334",
-        "name": "thread_times.key_idle_power_cases/animated-gif.html"
-    },
-    {
-        "duration": "46.59906654545455",
-        "name": "thread_times.key_idle_power_cases/blank.html"
-    },
-    {
-        "duration": "43.07981933333334",
-        "name": "thread_times.key_idle_power_cases/css-animation.html"
-    },
-    {
-        "duration": "44.422924333333334",
-        "name": "thread_times.key_idle_power_cases/idle_power_animated_gif"
-    },
-    {
-        "duration": "47.25709283333333",
-        "name": "thread_times.key_idle_power_cases/idle_power_blank"
-    },
-    {
-        "duration": "46.92146866666667",
-        "name": "thread_times.key_idle_power_cases/idle_power_css_animation"
-    },
-    {
-        "duration": "50.05928216666666",
-        "name": "thread_times.key_idle_power_cases/idle_power_request_animation_frame"
-    },
-    {
-        "duration": "120.83141666666667",
-        "name": "thread_times.key_idle_power_cases/idle_power_set_timeout_long"
-    },
-    {
-        "duration": "49.886341666666674",
-        "name": "thread_times.key_idle_power_cases/idle_power_set_timetout"
-    },
-    {
-        "duration": "43.01773242424242",
-        "name": "thread_times.key_idle_power_cases/request-animation-frame.html"
-    },
-    {
-        "duration": "43.111070909090905",
-        "name": "thread_times.key_idle_power_cases/set-timeout.html"
-    },
-    {
-        "duration": "113.29154936363632",
-        "name": "thread_times.key_idle_power_cases/set-timeout.html (Long Idle)"
-    },
-    {
-        "duration": "50.290036898989904",
-        "name": "thread_times.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "49.124489767676764",
-        "name": "thread_times.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "44.61949068686869",
-        "name": "thread_times.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "34.96725150505053",
-        "name": "thread_times.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "37.14393296969697",
-        "name": "thread_times.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "42.227324333333335",
-        "name": "thread_times.key_noop_cases/no_op_raf"
-    },
-    {
-        "duration": "38.80171424242424",
-        "name": "thread_times.key_noop_cases/no_op_raf.html"
-    },
-    {
-        "duration": "23.259573833333334",
-        "name": "thread_times.key_noop_cases/no_op_scroll"
-    },
-    {
-        "duration": "21.498834838383843",
-        "name": "thread_times.key_noop_cases/no_op_scroll.html"
-    },
-    {
-        "duration": "21.956787666666667",
-        "name": "thread_times.key_noop_cases/no_op_settimeout"
-    },
-    {
-        "duration": "19.948883484848484",
-        "name": "thread_times.key_noop_cases/no_op_settimeout.html"
-    },
-    {
-        "duration": "28.211118",
-        "name": "thread_times.key_noop_cases/no_op_touch_handler"
-    },
-    {
-        "duration": "23.8483464949495",
-        "name": "thread_times.key_noop_cases/no_op_touch_handler.html"
-    },
-    {
-        "duration": "24.421865956521735",
-        "name": "thread_times.key_silk_cases/card_expansion"
-    },
-    {
-        "duration": "27.36437055072464",
-        "name": "thread_times.key_silk_cases/card_expansion_animated"
-    },
-    {
-        "duration": "24.397751507246383",
-        "name": "thread_times.key_silk_cases/card_expansion_images_text"
-    },
-    {
-        "duration": "21.406990463768114",
-        "name": "thread_times.key_silk_cases/card_flying"
-    },
-    {
-        "duration": "23.345918478260874",
-        "name": "thread_times.key_silk_cases/coordinated_animation"
-    },
-    {
-        "duration": "21.541019768115934",
-        "name": "thread_times.key_silk_cases/font_wipe"
-    },
-    {
-        "duration": "21.290426737373735",
-        "name": "thread_times.key_silk_cases/font_wipe.html"
-    },
-    {
-        "duration": "23.73285276811594",
-        "name": "thread_times.key_silk_cases/google_news_ios"
-    },
-    {
-        "duration": "21.935335173913046",
-        "name": "thread_times.key_silk_cases/gws_boogie_expansion"
-    },
-    {
-        "duration": "22.01072876811594",
-        "name": "thread_times.key_silk_cases/gws_google_expansion"
-    },
-    {
-        "duration": "24.54586379710145",
-        "name": "thread_times.key_silk_cases/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "41.376064939393935",
-        "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html"
-    },
-    {
-        "duration": "18.72534972727272",
-        "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html"
-    },
-    {
-        "duration": "17.97790021212121",
-        "name": "thread_times.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet"
-    },
-    {
-        "duration": "23.733045646464653",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/"
-    },
-    {
-        "duration": "20.812986242424238",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/"
-    },
-    {
-        "duration": "23.623121505050506",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/"
-    },
-    {
-        "duration": "23.966389181818187",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/"
-    },
-    {
-        "duration": "23.94460159595961",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/"
-    },
-    {
-        "duration": "27.063611121212116",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/"
-    },
-    {
-        "duration": "26.43245223232324",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/jx5De/14/show/"
-    },
-    {
-        "duration": "25.013207252525245",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/"
-    },
-    {
-        "duration": "22.9556207070707",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/"
-    },
-    {
-        "duration": "26.461238545454552",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/"
-    },
-    {
-        "duration": "23.032574070707067",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/"
-    },
-    {
-        "duration": "23.36859727272727",
-        "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll"
-    },
-    {
-        "duration": "19.35272999999999",
-        "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe"
-    },
-    {
-        "duration": "2.4189949E-4",
-        "name": "thread_times.key_silk_cases/http://plus.google.com/app/basic/stream"
-    },
-    {
-        "duration": "3.11303138E-4",
-        "name": "thread_times.key_silk_cases/http://s.codepen.io/befamous/fullpage/pFsqb?scroll"
-    },
-    {
-        "duration": "30.56261308080808",
-        "name": "thread_times.key_silk_cases/http://wiltzius.github.io/shape-shifter/"
-    },
-    {
-        "duration": "21.76300625252525",
-        "name": "thread_times.key_silk_cases/http://www.google.com/#q=google"
-    },
-    {
-        "duration": "2.3183822500000002E-4",
-        "name": "thread_times.key_silk_cases/https://polymer-topeka.appspot.com/"
-    },
-    {
-        "duration": "21.609123797979805",
-        "name": "thread_times.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie"
-    },
-    {
-        "duration": "2.48122212E-4",
-        "name": "thread_times.key_silk_cases/inbox_app.html?slide_drawer"
-    },
-    {
-        "duration": "38.615341868686876",
-        "name": "thread_times.key_silk_cases/inbox_app.html?stress_hidey_bars"
-    },
-    {
-        "duration": "2.55727767E-4",
-        "name": "thread_times.key_silk_cases/inbox_app.html?swipe_to_dismiss"
-    },
-    {
-        "duration": "25.30313797979799",
-        "name": "thread_times.key_silk_cases/inbox_app.html?toggle_drawer"
-    },
-    {
-        "duration": "28.457873420289854",
-        "name": "thread_times.key_silk_cases/infinite_scrolling"
-    },
-    {
-        "duration": "27.93727089898989",
-        "name": "thread_times.key_silk_cases/infinite_scrolling.html"
-    },
-    {
-        "duration": "21.899681275362315",
-        "name": "thread_times.key_silk_cases/list_animation_simple"
-    },
-    {
-        "duration": "20.86351948484848",
-        "name": "thread_times.key_silk_cases/list_animation_simple.html"
-    },
-    {
-        "duration": "41.15137926086957",
-        "name": "thread_times.key_silk_cases/list_recycle_transform"
-    },
-    {
-        "duration": "23.729736434782605",
-        "name": "thread_times.key_silk_cases/mask_transition_animation"
-    },
-    {
-        "duration": "1.306295405E-4",
-        "name": "thread_times.key_silk_cases/masonry.html"
-    },
-    {
-        "duration": "19.58670218840579",
-        "name": "thread_times.key_silk_cases/mobile_news_sandbox"
-    },
-    {
-        "duration": "27.066041333333335",
-        "name": "thread_times.key_silk_cases/parallax_effect"
-    },
-    {
-        "duration": "18.484588449275364",
-        "name": "thread_times.key_silk_cases/physical_simulation"
-    },
-    {
-        "duration": "26.14427753535353",
-        "name": "thread_times.key_silk_cases/pushState.html"
-    },
-    {
-        "duration": "38.0912746521739",
-        "name": "thread_times.key_silk_cases/silk_finance"
-    },
-    {
-        "duration": "36.946411000000005",
-        "name": "thread_times.key_silk_cases/silk_finance.html"
-    },
-    {
-        "duration": "19.065163376811597",
-        "name": "thread_times.key_silk_cases/sticky_using_webkit"
-    },
-    {
-        "duration": "39.87611542028985",
-        "name": "thread_times.key_silk_cases/stress_hidey_bars"
-    },
-    {
-        "duration": "30.903316130434778",
-        "name": "thread_times.key_silk_cases/svg_icon_raster"
-    },
-    {
-        "duration": "26.23442576811596",
-        "name": "thread_times.key_silk_cases/swipe_to_dismiss"
-    },
-    {
-        "duration": "25.91719691304348",
-        "name": "thread_times.key_silk_cases/toggle_drawer"
-    },
-    {
-        "duration": "26.807859072463774",
-        "name": "thread_times.key_silk_cases/update_history_state"
-    },
-    {
-        "duration": "27.736277391304355",
-        "name": "thread_times.key_silk_cases/vertical_expansion"
-    },
-    {
-        "duration": "24.420588362318835",
-        "name": "thread_times.key_silk_cases/zoom_in_animation"
-    },
-    {
-        "duration": "59.80054148101265",
-        "name": "thread_times.simple_mobile_sites/ebay_scroll"
-    },
-    {
-        "duration": "48.66278391139242",
-        "name": "thread_times.simple_mobile_sites/flickr_scroll"
-    },
-    {
-        "duration": "35.98266257575758",
-        "name": "thread_times.simple_mobile_sites/http://m.nytimes.com/"
-    },
-    {
-        "duration": "60.96098475757576",
-        "name": "thread_times.simple_mobile_sites/http://www.ebay.co.uk/"
-    },
-    {
-        "duration": "41.11444178787878",
-        "name": "thread_times.simple_mobile_sites/http://www.nyc.gov"
-    },
-    {
-        "duration": "29.90269434758948",
-        "name": "thread_times.simple_mobile_sites/https://www.flickr.com/"
-    },
-    {
-        "duration": "40.64528583544303",
-        "name": "thread_times.simple_mobile_sites/nyc_gov_scroll"
-    },
-    {
-        "duration": "35.64036446835443",
-        "name": "thread_times.simple_mobile_sites/nytimes_scroll"
-    },
-    {
-        "duration": "42.812998",
-        "name": "thread_times.tough_compositor_cases/cc_poster_circle"
-    },
-    {
-        "duration": "35.325621999999996",
-        "name": "thread_times.tough_compositor_cases/cc_scroll_200_layer_grid"
-    },
-    {
-        "duration": "46.378828666666664",
-        "name": "thread_times.tough_compositor_cases/cc_scroll_text_only"
-    },
-    {
-        "duration": "32.11457503030303",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION"
-    },
-    {
-        "duration": "29.700842424242417",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS"
-    },
-    {
-        "duration": "32.06771913131313",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE"
-    },
-    {
-        "duration": "34.47874830303031",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE"
-    },
-    {
-        "duration": "28.472643343434353",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "40.55503087878788",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "29.447922686868694",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "28.275476929292918",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "48.52476883333333",
-        "name": "thread_times.tough_compositor_cases/js_full_screen_invalidation"
-    },
-    {
-        "duration": "72.052666",
-        "name": "thread_times.tough_compositor_cases/js_poster_circle"
-    },
-    {
-        "duration": "35.808817999999995",
-        "name": "thread_times.tough_compositor_cases/js_scroll_200_layer_grid"
-    },
-    {
-        "duration": "37.49106",
-        "name": "thread_times.tough_compositor_cases/js_scroll_text_only"
-    },
-    {
-        "duration": "39.086663333333334",
-        "name": "thread_times.tough_compositor_cases/new_tilings"
-    },
-    {
-        "duration": "30.368903838383833",
-        "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "30.375324484848484",
-        "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "30.532537525252526",
-        "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "30.465323010101017",
-        "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "28.648318242424242",
-        "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "28.35789631313131",
-        "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "28.141334070707085",
-        "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "26.767801050505053",
-        "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "24.504372909090915",
-        "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "22.86043765656566",
-        "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "37.006554868686855",
-        "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "25.80426756565657",
-        "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "25.65145073737374",
-        "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "25.85091108080809",
-        "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "25.127454535353536",
-        "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "24.84778224242424",
-        "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "24.959758303030313",
-        "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "23.191610010101005",
-        "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "21.526950585858586",
-        "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "20.10496767676767",
-        "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "28.509965787878784",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "28.85400212121211",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "28.2716900909091",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "28.339573636363628",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "28.039836969696967",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "27.883402494949504",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "27.82490727272726",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "27.683475898989883",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "25.35186578787879",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "24.049451252525248",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "21.425397030303035",
-        "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "22.041378191919183",
-        "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "22.10245430303031",
-        "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "22.016877757575756",
-        "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "21.88110057575758",
-        "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "21.853328505050506",
-        "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "21.793491616161614",
-        "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "21.086836171717163",
-        "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "19.327570424242417",
-        "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "18.476224737373734",
-        "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "19.057826787878785",
-        "name": "tracing.tracing_with_background_memory_infra/Facebook"
-    },
-    {
-        "duration": "21.08620018181819",
-        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
-    },
-    {
-        "duration": "15.221000328282827",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
-    },
-    {
-        "duration": "16.61925050505051",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
-    },
-    {
-        "duration": "14.9253668939394",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
-    },
-    {
-        "duration": "16.73253023232323",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
-    },
-    {
-        "duration": "17.52611996969697",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
-    },
-    {
-        "duration": "30.24715939393939",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "19.17793015151515",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "146.7929597979798",
-        "name": "v8.browsing_mobile-future/browse:chrome:newtab"
-    },
-    {
-        "duration": "52.477306323232305",
-        "name": "v8.browsing_mobile-future/browse:chrome:omnibox"
-    },
-    {
-        "duration": "158.05751262626256",
-        "name": "v8.browsing_mobile-future/browse:media:facebook_photos"
-    },
-    {
-        "duration": "86.89646531313133",
-        "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "132.51831900000005",
-        "name": "v8.browsing_mobile-future/browse:media:imgur"
-    },
-    {
-        "duration": "9.438196855555557E-4",
-        "name": "v8.browsing_mobile-future/browse:media:youtube"
-    },
-    {
-        "duration": "0.0012613455566666662",
-        "name": "v8.browsing_mobile-future/browse:news:cnn"
-    },
-    {
-        "duration": "115.37527936363642",
-        "name": "v8.browsing_mobile-future/browse:news:cricbuzz"
-    },
-    {
-        "duration": "2.597014106666667E-4",
-        "name": "v8.browsing_mobile-future/browse:news:globo"
-    },
-    {
-        "duration": "90.47917367676766",
-        "name": "v8.browsing_mobile-future/browse:news:qq"
-    },
-    {
-        "duration": "103.32026283838387",
-        "name": "v8.browsing_mobile-future/browse:news:reddit"
-    },
-    {
-        "duration": "2.7879079200000004E-4",
-        "name": "v8.browsing_mobile-future/browse:news:toi"
-    },
-    {
-        "duration": "92.65786173737375",
-        "name": "v8.browsing_mobile-future/browse:news:washingtonpost"
-    },
-    {
-        "duration": "180.34606848484844",
-        "name": "v8.browsing_mobile-future/browse:shopping:amazon"
-    },
-    {
-        "duration": "0.0012067635766666667",
-        "name": "v8.browsing_mobile-future/browse:shopping:avito"
-    },
-    {
-        "duration": "4.884242999999999E-4",
-        "name": "v8.browsing_mobile-future/browse:shopping:flipkart"
-    },
-    {
-        "duration": "9.663104993333333E-4",
-        "name": "v8.browsing_mobile-future/browse:shopping:lazada"
-    },
-    {
-        "duration": "133.62747720202023",
-        "name": "v8.browsing_mobile-future/browse:social:facebook"
-    },
-    {
-        "duration": "0.0011786302013333334",
-        "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "169.56490232323233",
-        "name": "v8.browsing_mobile-future/browse:social:instagram"
-    },
-    {
-        "duration": "9.71237818888889E-4",
-        "name": "v8.browsing_mobile-future/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "0.0010667641899999999",
-        "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "88.0135880606061",
-        "name": "v8.browsing_mobile-future/browse:social:twitter"
-    },
-    {
-        "duration": "0.0011911869113333333",
-        "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "90.29392606060604",
-        "name": "v8.browsing_mobile-future/browse:tools:maps"
-    },
-    {
-        "duration": "150.06470383838382",
-        "name": "v8.browsing_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "54.07889719191921",
-        "name": "v8.browsing_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "162.59746959595955",
-        "name": "v8.browsing_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "88.07251865656566",
-        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "134.4546121717172",
-        "name": "v8.browsing_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "8.64195817E-4",
-        "name": "v8.browsing_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "6.880026600000001E-4",
-        "name": "v8.browsing_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "118.00485893939393",
-        "name": "v8.browsing_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "2.802151892307692E-4",
-        "name": "v8.browsing_mobile/browse:news:globo"
-    },
-    {
-        "duration": "93.07734151515153",
-        "name": "v8.browsing_mobile/browse:news:qq"
-    },
-    {
-        "duration": "109.77028254545453",
-        "name": "v8.browsing_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "2.7509836153846154E-4",
-        "name": "v8.browsing_mobile/browse:news:toi"
-    },
-    {
-        "duration": "96.34806983838385",
-        "name": "v8.browsing_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "184.5223194949495",
-        "name": "v8.browsing_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "8.973341730769232E-4",
-        "name": "v8.browsing_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "4.4864874923076923E-4",
-        "name": "v8.browsing_mobile/browse:shopping:flipkart"
-    },
-    {
-        "duration": "7.359614661538461E-4",
-        "name": "v8.browsing_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "136.9386156868687",
-        "name": "v8.browsing_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "9.95691006923077E-4",
-        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "174.65320858585855",
-        "name": "v8.browsing_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "8.631706309999999E-4",
-        "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "0.0012045621819999999",
-        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "91.83832190909092",
-        "name": "v8.browsing_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "7.01647536923077E-4",
-        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "94.42155341414141",
-        "name": "v8.browsing_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "15.242968075757574",
-        "name": "wasm/AsmJsZenGarden"
-    },
-    {
-        "duration": "0.0011331056956410258",
-        "name": "wasm/WasmSpaceBuggy"
-    },
-    {
-        "duration": "15.24465491414141",
-        "name": "wasm/WasmStylizedRenderer"
-    },
-    {
-        "duration": "15.330122737373733",
-        "name": "wasm/WasmSunTemple"
-    },
-    {
-        "duration": "27.976230442760944",
-        "name": "wasm/WasmTanks"
-    },
-    {
-        "duration": "15.47282452356902",
-        "name": "wasm/WasmZenGarden"
-    },
-    {
-        "duration": "28.59426743434343",
-        "name": "webrtc/10s_datachannel_transfer"
-    },
-    {
-        "duration": "36.38392025252526",
-        "name": "webrtc/canvas_capture_peer_connection"
-    },
-    {
-        "duration": "46.898688020202",
-        "name": "webrtc/codec_constraints_h264"
-    },
-    {
-        "duration": "46.83732043434342",
-        "name": "webrtc/codec_constraints_vp8"
-    },
-    {
-        "duration": "46.76229864646462",
-        "name": "webrtc/codec_constraints_vp9"
-    },
-    {
-        "duration": "31.79935216161616",
-        "name": "webrtc/hd_local_stream_10s"
-    },
-    {
-        "duration": "53.127465505050516",
-        "name": "webrtc/multiple_peerconnections"
-    },
-    {
-        "duration": "77.48114166666667",
-        "name": "webrtc/pause_play_peerconnections"
-    }
-]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android_pixel2_story_timing.json b/tools/perf/core/shard_maps/timing_data/android_pixel2_story_timing.json
deleted file mode 100644
index 67ac46cf..0000000
--- a/tools/perf/core/shard_maps/timing_data/android_pixel2_story_timing.json
+++ /dev/null
@@ -1,8014 +0,0 @@
-[
-    {
-        "duration": "20.0",
-        "name": "blink_perf.bindings/append-child.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.bindings/create-element.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/document-implementation.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/first-child.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.bindings/gc-forest.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.bindings/gc-mini-tree.html"
-    },
-    {
-        "duration": "25.0",
-        "name": "blink_perf.bindings/gc-tree.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/get-attribute-rare.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/get-attribute.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.bindings/get-element-by-id.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/id-getter.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/id-setter.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.bindings/indexed-getter.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/insert-before.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/named-property-enumerator.html"
-    },
-    {
-        "duration": "25.0",
-        "name": "blink_perf.bindings/node-list-access.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/node-type.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.bindings/post-message.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/sequence-conversion-array.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.bindings/serialize-array.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.bindings/serialize-long-string.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.bindings/serialize-map.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.bindings/serialize-nested-array.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/set-attribute-rare.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/set-attribute.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/undefined-first-child.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.bindings/undefined-id-getter.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "blink_perf.canvas/createImageBitmapFromImageData.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.canvas/drawimage-not-pixelaligned.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.canvas/drawimage.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.canvas/getImageData.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.canvas/getImageDataColorManaged.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.canvas/putImageData.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.canvas/toBlob_duration.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.canvas/toBlob_duration_jpeg.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.canvas/transferFromImageBitmap.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.canvas/upload-video-to-sub-texture.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.canvas/upload-video-to-texture.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.canvas/upload-webgl-to-texture.html"
-    },
-    {
-        "duration": "24.0",
-        "name": "blink_perf.css/AttributeDescendantSelector.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.css/CSSPropertySetterGetter.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleElementSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.css/ChangeStyleShallowTree.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "blink_perf.css/ClassDescendantSelector.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.css/ClassInvalidation.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "blink_perf.css/FocusUpdate.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.css/LoadBootstrapBlog.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.css/LoadSemanticPageExample.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.css/PseudoClassSelectors.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.css/SelectorCountScaling.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "blink_perf.dom/addRange.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.dom/delete-in-password-field.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.dom/div-editable.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.dom/inner_html_with_selection.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.dom/long-sibling-list.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.dom/modify-element-classname.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.dom/modify-element-id.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.dom/modify-element-title.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.dom/move-down-with-hidden-elements.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.dom/move-up-with-hidden-elements.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.dom/remove_child_with_selection.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.dom/select-multiple-add.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.dom/select-single-add.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.dom/select-single-remove.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.dom/textarea-dom.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.dom/textarea-edit.html"
-    },
-    {
-        "duration": "29.0",
-        "name": "blink_perf.events/EventsDispatching.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html"
-    },
-    {
-        "duration": "24.0",
-        "name": "blink_perf.events/EventsDispatchingInShadowTrees.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "blink_perf.events/hit-test-lots-of-layers.html"
-    },
-    {
-        "duration": "58.0",
-        "name": "blink_perf.image_decoder/decode-gif.html"
-    },
-    {
-        "duration": "19.0",
-        "name": "blink_perf.image_decoder/decode-jpeg.html"
-    },
-    {
-        "duration": "54.0",
-        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
-    },
-    {
-        "duration": "34.0",
-        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "blink_perf.image_decoder/decode-png-palette.html"
-    },
-    {
-        "duration": "57.0",
-        "name": "blink_perf.image_decoder/decode-png.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "blink_perf.layout/ArabicLineLayout.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/add-remove-inline-floats.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/attach-inlines-2.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/attach-inlines.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/chapter-reflow-once-random.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.layout/chapter-reflow-once.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/chapter-reflow-thrice.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/chapter-reflow-twice.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/chapter-reflow.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.layout/character_fallback.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.layout/character_fallback_aat.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/flexbox-column-nowrap.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/flexbox-column-wrap.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/flexbox-lots-of-data.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/flexbox-row-nowrap.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/flexbox-row-wrap.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "blink_perf.layout/floats_100_100.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "blink_perf.layout/floats_100_100_nested.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.layout/floats_10_1000.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.layout/floats_20_100.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.layout/floats_20_100_nested.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.layout/floats_2_100.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.layout/floats_2_100_nested.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.layout/floats_50_100.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/floats_50_100_nested.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/hindi-line-layout.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/large-spanning-grid-item.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.layout/latin-complex-text.html"
-    },
-    {
-        "duration": "55.0",
-        "name": "blink_perf.layout/latin-ebook-resize.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.layout/latin-ebook.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.layout/layers_overlap_2d.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.layout/layers_overlap_3d.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "blink_perf.layout/line-layout-line-height.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/line-layout-repeat-append.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.layout/line-layout.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.layout/long-line-nowrap.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/nested-grid.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.layout/nested-percent-height-tables.html"
-    },
-    {
-        "duration": "91.0",
-        "name": "blink_perf.layout/subtree-detaching.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.layout/word-break-break-all.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.layout/word-break-break-word.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.layout/word-wrap-break-word.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "blink_perf.owp_storage/blob-perf-files.html"
-    },
-    {
-        "duration": "14.0",
-        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.owp_storage/blob-perf-shm.html"
-    },
-    {
-        "duration": "14.0",
-        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
-    },
-    {
-        "duration": "14.0",
-        "name": "blink_perf.owp_storage/idb-load-docs.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "blink_perf.paint/appending-text.html"
-    },
-    {
-        "duration": "19.0",
-        "name": "blink_perf.paint/color-changes.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "blink_perf.paint/complex-content-slow-scroll.html"
-    },
-    {
-        "duration": "19.0",
-        "name": "blink_perf.paint/containment-resize.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html"
-    },
-    {
-        "duration": "14.0",
-        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "blink_perf.paint/large-table-repaint.html"
-    },
-    {
-        "duration": "14.0",
-        "name": "blink_perf.paint/move-text-with-mask.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "blink_perf.paint/paint-offset-changes.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "blink_perf.paint/transform-changes.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "blink_perf.parser/css-parser-yui.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "blink_perf.parser/html-parser-threaded.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "blink_perf.parser/html-parser.html"
-    },
-    {
-        "duration": "71.0",
-        "name": "blink_perf.parser/html5-full-render.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/iframe-append-remove.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/innerHTML-setter.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/query-selector-all-attribute.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/query-selector-all-class-deep.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-all-class-first.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-all-class-last.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/query-selector-all-class.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/query-selector-all-deep.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-all-first.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.parser/query-selector-all-id-deep.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-all-id-first.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.parser/query-selector-all-id-last.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-all-last.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/query-selector-deep.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-first.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-id-deep.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-id-last.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/query-selector-last.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/simple-url.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/textarea-parsing.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.parser/tiny-innerHTML.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "blink_perf.parser/url-parser.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "blink_perf.parser/xml-parser.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/shadow-style-share.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.shadow_dom/v0-content-reprojection.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html"
-    },
-    {
-        "duration": "24.0",
-        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-distribution.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
-    },
-    {
-        "duration": "24.0",
-        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
-    },
-    {
-        "duration": "54.0",
-        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-slot-append.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
-    },
-    {
-        "duration": "14.0",
-        "name": "blink_perf.svg/AzLizardBenjiPark.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.svg/Bamboo.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.svg/Cactus.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.svg/Cowboy.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.svg/Cowboy_transform.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/CrawFishGanson.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.svg/Debian.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/DropsOnABlade.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/FlowerFromMyGarden.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/FoodLeifLodahl.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/France.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.svg/GearFlowers.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/HarveyRayner.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/HereGear.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "blink_perf.svg/MtSaintHelens.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/Samurai.html"
-    },
-    {
-        "duration": "64.0",
-        "name": "blink_perf.svg/SierpinskiCarpet.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.svg/SvgCubics.html"
-    },
-    {
-        "duration": "7.0",
-        "name": "blink_perf.svg/SvgHitTesting.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "blink_perf.svg/SvgNestedUse.html"
-    },
-    {
-        "duration": "5.0",
-        "name": "blink_perf.svg/UnderTheSee.html"
-    },
-    {
-        "duration": "6.0",
-        "name": "blink_perf.svg/WorldIso.html"
-    },
-    {
-        "duration": "8.0",
-        "name": "blink_perf.svg/Worldcup.html"
-    },
-    {
-        "duration": "48.0",
-        "name": "dromaeo/http://dromaeo.com?dom-attr"
-    },
-    {
-        "duration": "36.0",
-        "name": "dromaeo/http://dromaeo.com?dom-modify"
-    },
-    {
-        "duration": "50.0",
-        "name": "dromaeo/http://dromaeo.com?dom-query"
-    },
-    {
-        "duration": "31.0",
-        "name": "dromaeo/http://dromaeo.com?dom-traverse"
-    },
-    {
-        "duration": "19.0",
-        "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "282.0",
-        "name": "jetstream/http://browserbench.org/JetStream/"
-    },
-    {
-        "duration": "59.0",
-        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "loading.mobile/58Pic"
-    },
-    {
-        "duration": "134.0",
-        "name": "loading.mobile/58Pic_3g"
-    },
-    {
-        "duration": "20.0",
-        "name": "loading.mobile/Amazon"
-    },
-    {
-        "duration": "205.0",
-        "name": "loading.mobile/Amazon_3g"
-    },
-    {
-        "duration": "23.0",
-        "name": "loading.mobile/BOLNoticias"
-    },
-    {
-        "duration": "270.0",
-        "name": "loading.mobile/BOLNoticias_3g"
-    },
-    {
-        "duration": "20.0",
-        "name": "loading.mobile/Baidu"
-    },
-    {
-        "duration": "161.0",
-        "name": "loading.mobile/Baidu_3g"
-    },
-    {
-        "duration": "20.0",
-        "name": "loading.mobile/Bradesco"
-    },
-    {
-        "duration": "94.0",
-        "name": "loading.mobile/Bradesco_3g"
-    },
-    {
-        "duration": "19.0",
-        "name": "loading.mobile/Dailymotion"
-    },
-    {
-        "duration": "66.0",
-        "name": "loading.mobile/Dailymotion_3g"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/Dawn"
-    },
-    {
-        "duration": "73.0",
-        "name": "loading.mobile/Dawn_3g"
-    },
-    {
-        "duration": "26.0",
-        "name": "loading.mobile/DevOpera"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/DevOpera_cold"
-    },
-    {
-        "duration": "132.0",
-        "name": "loading.mobile/DevOpera_cold_3g"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/DevOpera_hot"
-    },
-    {
-        "duration": "30.0",
-        "name": "loading.mobile/DevOpera_hot_3g"
-    },
-    {
-        "duration": "20.0",
-        "name": "loading.mobile/DevOpera_warm"
-    },
-    {
-        "duration": "26.0",
-        "name": "loading.mobile/DevOpera_warm_3g"
-    },
-    {
-        "duration": "21.0",
-        "name": "loading.mobile/Dramaq"
-    },
-    {
-        "duration": "153.0",
-        "name": "loading.mobile/Dramaq_3g"
-    },
-    {
-        "duration": "16.0",
-        "name": "loading.mobile/EnquiryIndianRail"
-    },
-    {
-        "duration": "115.0",
-        "name": "loading.mobile/EnquiryIndianRail_3g"
-    },
-    {
-        "duration": "21.0",
-        "name": "loading.mobile/Facebook"
-    },
-    {
-        "duration": "218.0",
-        "name": "loading.mobile/Facebook_3g"
-    },
-    {
-        "duration": "33.0",
-        "name": "loading.mobile/FlipBoard"
-    },
-    {
-        "duration": "18.0",
-        "name": "loading.mobile/FlipBoard_cold"
-    },
-    {
-        "duration": "353.0",
-        "name": "loading.mobile/FlipBoard_cold_3g"
-    },
-    {
-        "duration": "27.0",
-        "name": "loading.mobile/FlipBoard_hot"
-    },
-    {
-        "duration": "55.0",
-        "name": "loading.mobile/FlipBoard_hot_3g"
-    },
-    {
-        "duration": "23.0",
-        "name": "loading.mobile/FlipBoard_warm"
-    },
-    {
-        "duration": "81.0",
-        "name": "loading.mobile/FlipBoard_warm_3g"
-    },
-    {
-        "duration": "34.0",
-        "name": "loading.mobile/FlipKart"
-    },
-    {
-        "duration": "21.0",
-        "name": "loading.mobile/FlipKart_cold"
-    },
-    {
-        "duration": "63.0",
-        "name": "loading.mobile/FlipKart_cold_3g"
-    },
-    {
-        "duration": "32.0",
-        "name": "loading.mobile/FlipKart_hot"
-    },
-    {
-        "duration": "29.0",
-        "name": "loading.mobile/FlipKart_hot_3g"
-    },
-    {
-        "duration": "25.0",
-        "name": "loading.mobile/FlipKart_warm"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/FlipKart_warm_3g"
-    },
-    {
-        "duration": "18.0",
-        "name": "loading.mobile/FranceTVInfo"
-    },
-    {
-        "duration": "213.0",
-        "name": "loading.mobile/FranceTVInfo_3g"
-    },
-    {
-        "duration": "143.0",
-        "name": "loading.mobile/G1_3g"
-    },
-    {
-        "duration": "22.0",
-        "name": "loading.mobile/GSShop"
-    },
-    {
-        "duration": "147.0",
-        "name": "loading.mobile/GSShop_3g"
-    },
-    {
-        "duration": "15.0",
-        "name": "loading.mobile/GoogleBrazil"
-    },
-    {
-        "duration": "207.0",
-        "name": "loading.mobile/GoogleBrazil_3g"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/GoogleIndia"
-    },
-    {
-        "duration": "88.0",
-        "name": "loading.mobile/GoogleIndia_3g"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/GoogleIndonesia"
-    },
-    {
-        "duration": "191.0",
-        "name": "loading.mobile/GoogleIndonesia_3g"
-    },
-    {
-        "duration": "25.0",
-        "name": "loading.mobile/GoogleRedirectToGoogleJapan"
-    },
-    {
-        "duration": "268.0",
-        "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g"
-    },
-    {
-        "duration": "20.0",
-        "name": "loading.mobile/Hongkiat"
-    },
-    {
-        "duration": "232.0",
-        "name": "loading.mobile/Hongkiat_3g"
-    },
-    {
-        "duration": "22.0",
-        "name": "loading.mobile/KapanLagi"
-    },
-    {
-        "duration": "277.0",
-        "name": "loading.mobile/KapanLagi_3g"
-    },
-    {
-        "duration": "26.0",
-        "name": "loading.mobile/Kaskus"
-    },
-    {
-        "duration": "104.0",
-        "name": "loading.mobile/Kaskus_3g"
-    },
-    {
-        "duration": "19.0",
-        "name": "loading.mobile/LocalMoxie"
-    },
-    {
-        "duration": "69.0",
-        "name": "loading.mobile/LocalMoxie_3g"
-    },
-    {
-        "duration": "16.0",
-        "name": "loading.mobile/Locanto"
-    },
-    {
-        "duration": "78.0",
-        "name": "loading.mobile/Locanto_3g"
-    },
-    {
-        "duration": "18.0",
-        "name": "loading.mobile/OLX"
-    },
-    {
-        "duration": "228.0",
-        "name": "loading.mobile/OLX_3g"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/QQNews"
-    },
-    {
-        "duration": "223.0",
-        "name": "loading.mobile/QQNews_3g"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/SlideShare"
-    },
-    {
-        "duration": "193.0",
-        "name": "loading.mobile/SlideShare_3g"
-    },
-    {
-        "duration": "21.0",
-        "name": "loading.mobile/Suumo"
-    },
-    {
-        "duration": "16.0",
-        "name": "loading.mobile/Suumo_cold"
-    },
-    {
-        "duration": "32.0",
-        "name": "loading.mobile/Suumo_cold_3g"
-    },
-    {
-        "duration": "21.0",
-        "name": "loading.mobile/Suumo_hot"
-    },
-    {
-        "duration": "28.0",
-        "name": "loading.mobile/Suumo_hot_3g"
-    },
-    {
-        "duration": "18.0",
-        "name": "loading.mobile/Suumo_warm"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/Suumo_warm_3g"
-    },
-    {
-        "duration": "18.0",
-        "name": "loading.mobile/Thairath"
-    },
-    {
-        "duration": "105.0",
-        "name": "loading.mobile/Thairath_3g"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/TheStar"
-    },
-    {
-        "duration": "86.0",
-        "name": "loading.mobile/TheStar_3g"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/TribunNews"
-    },
-    {
-        "duration": "106.0",
-        "name": "loading.mobile/TribunNews_3g"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/Twitter"
-    },
-    {
-        "duration": "122.0",
-        "name": "loading.mobile/Twitter_3g"
-    },
-    {
-        "duration": "27.0",
-        "name": "loading.mobile/VoiceMemos"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/VoiceMemos_cold"
-    },
-    {
-        "duration": "152.0",
-        "name": "loading.mobile/VoiceMemos_cold_3g"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/VoiceMemos_hot"
-    },
-    {
-        "duration": "29.0",
-        "name": "loading.mobile/VoiceMemos_hot_3g"
-    },
-    {
-        "duration": "20.0",
-        "name": "loading.mobile/VoiceMemos_warm"
-    },
-    {
-        "duration": "26.0",
-        "name": "loading.mobile/VoiceMemos_warm_3g"
-    },
-    {
-        "duration": "15.0",
-        "name": "loading.mobile/Wikipedia"
-    },
-    {
-        "duration": "165.0",
-        "name": "loading.mobile/Wikipedia_3g"
-    },
-    {
-        "duration": "24.0",
-        "name": "loading.mobile/YahooNews"
-    },
-    {
-        "duration": "72.0",
-        "name": "loading.mobile/YahooNews_3g"
-    },
-    {
-        "duration": "17.0",
-        "name": "loading.mobile/Youtube"
-    },
-    {
-        "duration": "85.0",
-        "name": "loading.mobile/Youtube_3g"
-    },
-    {
-        "duration": "21.0",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4"
-    },
-    {
-        "duration": "23.0",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4"
-    },
-    {
-        "duration": "23.0",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true"
-    },
-    {
-        "duration": "22.0",
-        "name": "media.mobile/mse.html?media=h264_video.mp4"
-    },
-    {
-        "duration": "34.0",
-        "name": "media.mobile/video.html?src=crowd.ogg&type=audio"
-    },
-    {
-        "duration": "32.0",
-        "name": "media.mobile/video.html?src=crowd1080_vp9.webm"
-    },
-    {
-        "duration": "19.0",
-        "name": "media.mobile/video.html?src=crowd1080_vp9.webm&seek"
-    },
-    {
-        "duration": "31.0",
-        "name": "media.mobile/video.html?src=crowd720_vp9.webm"
-    },
-    {
-        "duration": "34.0",
-        "name": "media.mobile/video.html?src=tulip2.m4a&type=audio"
-    },
-    {
-        "duration": "34.0",
-        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio"
-    },
-    {
-        "duration": "14.0",
-        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek"
-    },
-    {
-        "duration": "43.0",
-        "name": "media.mobile/video.html?src=tulip2.mp4"
-    },
-    {
-        "duration": "43.0",
-        "name": "media.mobile/video.html?src=tulip2.mp4&busyjs"
-    },
-    {
-        "duration": "17.0",
-        "name": "media.mobile/video.html?src=tulip2.mp4&seek"
-    },
-    {
-        "duration": "35.0",
-        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio"
-    },
-    {
-        "duration": "14.0",
-        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek"
-    },
-    {
-        "duration": "44.0",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm"
-    },
-    {
-        "duration": "28.0",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm&background"
-    },
-    {
-        "duration": "19.0",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm&seek"
-    },
-    {
-        "duration": "67.0",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm_Regular-3G"
-    },
-    {
-        "duration": "35.0",
-        "name": "media.mobile/video.html?src=tulip2.wav&type=audio"
-    },
-    {
-        "duration": "15.0",
-        "name": "media.mobile/video.html?src=tulip2.wav&type=audio&seek"
-    },
-    {
-        "duration": "314.0",
-        "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "267.0",
-        "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "20.0",
-        "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "19.0",
-        "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "20.0",
-        "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "19.0",
-        "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "20.0",
-        "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "19.0",
-        "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "19.0",
-        "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "20.0",
-        "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "19.0",
-        "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "20.0",
-        "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "22.0",
-        "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "21.0",
-        "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "22.0",
-        "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "21.0",
-        "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "21.0",
-        "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "22.0",
-        "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "22.0",
-        "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "21.0",
-        "name": "memory.top_10_mobile/https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "22.0",
-        "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "23.0",
-        "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "61.0",
-        "name": "octane/http://chromium.github.io/octane/index.html?auto=1"
-    },
-    {
-        "duration": "21.0",
-        "name": "oortonline_tbmv2/http://oortonline.gl/#run"
-    },
-    {
-        "duration": "26.0",
-        "name": "power.idle_platform/IdleStory_10s"
-    },
-    {
-        "duration": "136.0",
-        "name": "power.idle_platform/IdleStory_120s"
-    },
-    {
-        "duration": "75.0",
-        "name": "power.idle_platform/IdleStory_60s"
-    },
-    {
-        "duration": "63.0",
-        "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom"
-    },
-    {
-        "duration": "65.0",
-        "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180"
-    },
-    {
-        "duration": "57.0",
-        "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404"
-    },
-    {
-        "duration": "68.0",
-        "name": "power.typical_10_mobile/http://m.facebook.com/barackobama"
-    },
-    {
-        "duration": "63.0",
-        "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486"
-    },
-    {
-        "duration": "62.0",
-        "name": "power.typical_10_mobile/http://m.ynet.co.il"
-    },
-    {
-        "duration": "63.0",
-        "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/"
-    },
-    {
-        "duration": "58.0",
-        "name": "power.typical_10_mobile/http://wapbaike.baidu.com/"
-    },
-    {
-        "duration": "59.0",
-        "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html"
-    },
-    {
-        "duration": "64.0",
-        "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html"
-    },
-    {
-        "duration": "63.0",
-        "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif"
-    },
-    {
-        "duration": "16.0",
-        "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
-    },
-    {
-        "duration": "10.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
-    },
-    {
-        "duration": "25.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
-    },
-    {
-        "duration": "13.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
-    },
-    {
-        "duration": "20.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
-    },
-    {
-        "duration": "9.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
-    },
-    {
-        "duration": "30.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
-    },
-    {
-        "duration": "15.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
-    },
-    {
-        "duration": "12.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
-    },
-    {
-        "duration": "29.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
-    },
-    {
-        "duration": "130.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
-    },
-    {
-        "duration": "87.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
-    },
-    {
-        "duration": "30.0",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
-    },
-    {
-        "duration": "48.0",
-        "name": "rendering.mobile/accu_weather_2018"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/accu_weather_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/accu_weather_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/amazon_2018"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/amazon_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/amazon_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/amazon_mobile_2018"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/amazon_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/amazon_pinch"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/amazon_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/analog_clock_svg"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/androidpolice_mobile"
-    },
-    {
-        "duration": "59.0",
-        "name": "rendering.mobile/androidpolice_mobile_2018"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/androidpolice_mobile_sync_scroll"
-    },
-    {
-        "duration": "60.0",
-        "name": "rendering.mobile/androidpolice_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "7.0",
-        "name": "rendering.mobile/animometer_webgl"
-    },
-    {
-        "duration": "7.0",
-        "name": "rendering.mobile/aquarium"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/background_color_animation"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/baidu_mobile"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/baidu_mobile_2018"
-    },
-    {
-        "duration": "18.0",
-        "name": "rendering.mobile/baidu_mobile_sync_scroll"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/baidu_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/balls_javascript_canvas"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/balls_javascript_css"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/balls_svg_animations"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/basic_stream"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/bing_mobile"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/bing_mobile_2018"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/bing_mobile_sync_scroll"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/bing_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "6.0",
-        "name": "rendering.mobile/blob"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/blogspot"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/blogspot_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/blogspot_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/blogspot_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/blogspot_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/blogspot_mobile"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/blogspot_mobile_2018"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/blogspot_mobile_sync_scroll"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/blogspot_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/boingboing_mobile"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/boingboing_mobile_2018"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/booking.com"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/booking.com_2018"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/booking.com_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/booking.com_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/booking.com_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/booking.com_mobile"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/booking.com_mobile_2018"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/booking.com_mobile_sync_scroll"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/booking.com_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/booking_pinch"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/booking_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/bouncing_balls_15"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/bouncing_balls_shadow"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/bouncing_gradient_circles"
-    },
-    {
-        "duration": "18.0",
-        "name": "rendering.mobile/bouncing_png_images"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/bouncing_svg_images"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/canvas_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/canvas_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/canvas_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/canvas_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/canvas_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/canvas_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/canvas_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/canvas_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/canvas_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/canvas_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/canvas_animation_no_clear"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/canvas_arcs"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/canvas_font_cycler"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/canvas_lines"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/canvas_to_blob"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/capitolvolkswagen_mobile"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/capitolvolkswagen_mobile_2018"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/card_expansion"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/card_expansion_animated"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/card_expansion_images_text"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/card_flying"
-    },
-    {
-        "duration": "15.0",
-        "name": "rendering.mobile/cats_unscaled"
-    },
-    {
-        "duration": "14.0",
-        "name": "rendering.mobile/cats_viewport_width"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/cc_poster_circle"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/cc_scroll_200_layer_grid"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/cc_scroll_text_only"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/chip_tune"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/cnn_2018"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/cnn_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "47.0",
-        "name": "rendering.mobile/cnn_article_mobile"
-    },
-    {
-        "duration": "43.0",
-        "name": "rendering.mobile/cnn_article_mobile_2018"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/cnn_article_mobile_sync_scroll"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/cnn_article_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/cnn_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/cnn_mobile"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/cnn_mobile_2018"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/cnn_mobile_sync_scroll"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/cnn_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/cnn_pathological"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/cnn_pinch"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/cnn_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/compositor_heavy_animation"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/coordinated_animation"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/crafty_mind"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_animations_many_keyframes"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/css_transitions_inline_style"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_transitions_new_element"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_transitions_style_element"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/css_transitions_updating_class"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_value_type_color"
-    },
-    {
-        "duration": "91.0",
-        "name": "rendering.mobile/css_value_type_filter"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_value_type_length"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/css_value_type_length_complex"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/css_value_type_length_simple"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/css_value_type_path"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/css_value_type_shadow"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/css_value_type_transform_complex"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/css_value_type_transform_simple"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/cuteoverload_mobile"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/deviantart_mobile"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/deviantart_mobile_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/deviantart_mobile_sync_scroll"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/deviantart_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/digg_mobile_2018"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/digg_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "7.0",
-        "name": "rendering.mobile/dynamic_cube_map"
-    },
-    {
-        "duration": "7.0",
-        "name": "rendering.mobile/earth"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/ebay"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/ebay_2018"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/ebay_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/ebay_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/ebay_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/ebay_mobile"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/ebay_mobile_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/ebay_mobile_sync_scroll"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/ebay_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/ebay_pinch"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/ebay_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/ebay_scroll"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/ebay_scroll_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/effect_games"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/espn"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/espn_2018"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/espn_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "15.0",
-        "name": "rendering.mobile/espn_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/espn_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/espn_mobile_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/espn_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/espn_pathological"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/espn_pinch"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/espn_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/extra_large_texture_uploads"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/facebook"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/facebook_2018"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/facebook_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/facebook_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/facebook_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/facebook_mobile"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/facebook_mobile_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/facebook_mobile_sync_scroll"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/facebook_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/facebook_pinch"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/facebook_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/fill_shapes"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/filter_terrain_svg"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/flickr_scroll"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/flickr_scroll_2018"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/font_wipe"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/forecast.io_mobile_2018"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/forecast.io_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/geo_apis"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/gmail"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/gmail_2018"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/gmail_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/gmail_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/gmail_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/gmail_pinch"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/gmail_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/google_calendar"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/google_calendar_2018"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/google_calendar_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/google_calendar_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/google_calendar_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/google_calendar_pinch"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/google_calendar_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "53.0",
-        "name": "rendering.mobile/google_docs"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/google_docs_2018"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/google_docs_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "53.0",
-        "name": "rendering.mobile/google_docs_desktop_gpu_raster"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/google_docs_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/google_image_pinch"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/google_image_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/google_image_search"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/google_image_search_2018"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/google_image_search_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/google_image_search_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/google_image_search_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/google_image_search_mobile_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/google_image_search_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/google_news_ios"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/google_news_mobile"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/google_news_mobile_2018"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/google_news_mobile_sync_scroll"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/google_news_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/google_plus"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/google_plus_2018"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/google_plus_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/google_plus_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/google_plus_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/google_plus_mobile"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/google_plus_mobile_2018"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/google_plus_mobile_sync_scroll"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/google_plus_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/google_search_pinch"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/google_search_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/google_web_search"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/google_web_search_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/google_web_search_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/google_web_search_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/google_web_search_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/google_web_search_mobile"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/google_web_search_mobile_2018"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/google_web_search_mobile_sync_scroll"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/google_web_search_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/gsp.ro_mobile"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/gsp.ro_mobile_2018"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/gsp.ro_mobile_sync_scroll"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/gsp.ro_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/guardian_pathological"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/guimark_vector_chart"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/gws_boogie_expansion"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/gws_google_expansion"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/hakim"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/idle_power_animated_gif"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/idle_power_blank"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/idle_power_css_animation"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/idle_power_request_animation_frame"
-    },
-    {
-        "duration": "113.0",
-        "name": "rendering.mobile/idle_power_set_timeout_long"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/idle_power_set_timetout"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/ie_chalkboard"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/ie_pirate_mark"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/infinite_scrolling"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/jarro_doverson"
-    },
-    {
-        "duration": "43.0",
-        "name": "rendering.mobile/js_full_screen_invalidation"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/js_poster_circle"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/js_scroll_200_layer_grid"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/js_scroll_text_only"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/kevs_3d"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/keyframed_animations"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/large_texture_uploads"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/latimes_pathological"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/linkedin"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/linkedin_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/linkedin_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/linkedin_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/linkedin_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/linkedin_mobile"
-    },
-    {
-        "duration": "55.0",
-        "name": "rendering.mobile/linkedin_mobile_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/linkedin_mobile_sync_scroll"
-    },
-    {
-        "duration": "49.0",
-        "name": "rendering.mobile/linkedin_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/linkedin_pathological"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/linkedin_pinch"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/linkedin_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/list_animation_simple"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/list_recycle_transform"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/man_in_blue"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/many_images"
-    },
-    {
-        "duration": "7.0",
-        "name": "rendering.mobile/many_planets_deep"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/maps_perf_test"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/mask_transition_animation"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/masonry"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/medium_texture_uploads"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/megi_dish"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/microsoft_fireflies"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/microsoft_snow"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/microsoft_speed_reading"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/microsoft_tweet_map"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/microsoft_video_city"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/microsoft_worker_fountains"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/mix_10k"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "18.0",
-        "name": "rendering.mobile/mlb_mobile"
-    },
-    {
-        "duration": "51.0",
-        "name": "rendering.mobile/mlb_mobile_2018"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/mlb_mobile_sync_scroll"
-    },
-    {
-        "duration": "46.0",
-        "name": "rendering.mobile/mlb_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/mobile_news_sandbox"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "74.0",
-        "name": "rendering.mobile/motion_mark_focus"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/new_tilings"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/no_op_raf"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/no_op_scroll"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/no_op_settimeout"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/no_op_touch_handler"
-    },
-    {
-        "duration": "7.0",
-        "name": "rendering.mobile/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/nyc_gov_scroll"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/nyc_gov_scroll_2018"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/nytimes_mobile"
-    },
-    {
-        "duration": "43.0",
-        "name": "rendering.mobile/nytimes_mobile_2018"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/nytimes_scroll"
-    },
-    {
-        "duration": "47.0",
-        "name": "rendering.mobile/nytimes_scroll_2018"
-    },
-    {
-        "duration": "43.0",
-        "name": "rendering.mobile/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/parallax_effect"
-    },
-    {
-        "duration": "6.0",
-        "name": "rendering.mobile/particles"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/pbs_pathological"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/physical_simulation"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/pinterest"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/pinterest_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/pinterest_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/pinterest_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/pinterest_mobile"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/pinterest_mobile_2018"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/pinterest_mobile_sync_scroll"
-    },
-    {
-        "duration": "15.0",
-        "name": "rendering.mobile/pinterest_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/put_get_image_data"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/raf"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/raf_animation"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/raf_canvas"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/raf_touch_animation"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/recode_pathological"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/reddit_mobile"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/reddit_mobile_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/runway"
-    },
-    {
-        "duration": "6.0",
-        "name": "rendering.mobile/san_angeles"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/second_batch_js_heavy"
-    },
-    {
-        "duration": "15.0",
-        "name": "rendering.mobile/second_batch_js_light"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/second_batch_js_medium"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/sfgate_mobile"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/sfgate_mobile_2018"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/sfgate_mobile_sync_scroll"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/sfgate_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/silk_finance"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/simple_text_page"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/simple_touch_drag"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/slashdot_mobile"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/slashdot_mobile_2018"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/slide_drawer"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/small_texture_uploads"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/smash_cat"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/spielzeugz"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/sticky_using_webkit"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/stress_hidey_bars"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/stroke_shapes"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/svg_icon_raster"
-    },
-    {
-        "duration": "15.0",
-        "name": "rendering.mobile/swipe_action"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/swipe_to_dismiss"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/sync_scroll_offset"
-    },
-    {
-        "duration": "53.0",
-        "name": "rendering.mobile/techcrunch"
-    },
-    {
-        "duration": "43.0",
-        "name": "rendering.mobile/techcrunch_2018"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/techcrunch_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "51.0",
-        "name": "rendering.mobile/techcrunch_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/techcrunch_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/techcrunch_mobile"
-    },
-    {
-        "duration": "46.0",
-        "name": "rendering.mobile/techcrunch_mobile_2018"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/techcrunch_mobile_sync_scroll"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/techcrunch_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/text_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/text_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/text_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/text_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/text_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/text_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/text_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/text_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/text_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_hover_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_hover_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_hover_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/text_hover_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "rendering.mobile/text_hover_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/text_hover_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "18.0",
-        "name": "rendering.mobile/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/text_hover_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/text_hover_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/text_hover_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/text_hover_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/theverge_article_mobile"
-    },
-    {
-        "duration": "47.0",
-        "name": "rendering.mobile/theverge_article_mobile_2018"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/theverge_article_mobile_sync_scroll"
-    },
-    {
-        "duration": "47.0",
-        "name": "rendering.mobile/theverge_article_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/theverge_mobile"
-    },
-    {
-        "duration": "51.0",
-        "name": "rendering.mobile/theverge_mobile_2018"
-    },
-    {
-        "duration": "24.0",
-        "name": "rendering.mobile/theverge_mobile_sync_scroll"
-    },
-    {
-        "duration": "44.0",
-        "name": "rendering.mobile/theverge_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/toggle_drawer"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/touch_handler_scrolling"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/transform_transitions"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/transform_transitions_js_block"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/twitch_2018"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/twitch_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/twitch_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/twitter"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/twitter_2018"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/twitter_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/twitter_desktop_gpu_raster"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/twitter_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/twitter_mobile_2018"
-    },
-    {
-        "duration": "19.0",
-        "name": "rendering.mobile/twitter_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/twitter_pinch"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/twitter_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/update_history_state"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/usatoday_mobile"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/usatoday_mobile_2018"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/usatoday_mobile_sync_scroll"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/usatoday_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/vertical_expansion"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/weather.com"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/weather.com_desktop_gpu_raster"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/weather_pinch"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/weather_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/web_animation_value_type_color"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/web_animation_value_type_path"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/web_animations_many_keyframes"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/web_animations_set_current_time"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/web_animations_simultaneous"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/wikipedia"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/wikipedia_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/wikipedia_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start_2018"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll_2018"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/wikipedia_desktop_gpu_raster"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/wikipedia_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/wikipedia_mobile"
-    },
-    {
-        "duration": "40.0",
-        "name": "rendering.mobile/wikipedia_mobile_2018"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/wikipedia_mobile_sync_scroll"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/wikipedia_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/wordpress"
-    },
-    {
-        "duration": "43.0",
-        "name": "rendering.mobile/wordpress_2018"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/wordpress_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/wordpress_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/wordpress_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/wordpress_mobile"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/wordpress_mobile_2018"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/wordpress_mobile_sync_scroll"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/wordpress_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/worldjournal_mobile"
-    },
-    {
-        "duration": "45.0",
-        "name": "rendering.mobile/worldjournal_mobile_2018"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/worldjournal_mobile_sync_scroll"
-    },
-    {
-        "duration": "38.0",
-        "name": "rendering.mobile/worldjournal_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "42.0",
-        "name": "rendering.mobile/wow_wiki_pathological"
-    },
-    {
-        "duration": "48.0",
-        "name": "rendering.mobile/wowwiki_mobile"
-    },
-    {
-        "duration": "71.0",
-        "name": "rendering.mobile/wowwiki_mobile_2018"
-    },
-    {
-        "duration": "46.0",
-        "name": "rendering.mobile/wowwiki_mobile_sync_scroll"
-    },
-    {
-        "duration": "61.0",
-        "name": "rendering.mobile/wowwiki_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/wsj_mobile"
-    },
-    {
-        "duration": "55.0",
-        "name": "rendering.mobile/wsj_mobile_2018"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/wsj_mobile_sync_scroll"
-    },
-    {
-        "duration": "51.0",
-        "name": "rendering.mobile/wsj_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/yahoo_answers"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/yahoo_answers_2018"
-    },
-    {
-        "duration": "28.0",
-        "name": "rendering.mobile/yahoo_answers_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/yahoo_answers_mobile"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/yahoo_answers_mobile_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll"
-    },
-    {
-        "duration": "21.0",
-        "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/yahoo_games"
-    },
-    {
-        "duration": "34.0",
-        "name": "rendering.mobile/yahoo_games_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/yahoo_games_pinch"
-    },
-    {
-        "duration": "37.0",
-        "name": "rendering.mobile/yahoo_games_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/yahoo_news"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/yahoo_news_2018"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/yahoo_news_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/yahoo_news_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.0",
-        "name": "rendering.mobile/yahoo_news_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/yahoo_news_mobile"
-    },
-    {
-        "duration": "41.0",
-        "name": "rendering.mobile/yahoo_news_mobile_2018"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/yahoo_news_mobile_sync_scroll"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/yahoo_news_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "39.0",
-        "name": "rendering.mobile/yahoo_news_pinch"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/yahoo_news_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/yahoo_sports"
-    },
-    {
-        "duration": "36.0",
-        "name": "rendering.mobile/yahoo_sports_2018"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/yahoo_sports_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/yahoo_sports_pathological"
-    },
-    {
-        "duration": "56.0",
-        "name": "rendering.mobile/yahoo_sports_pinch"
-    },
-    {
-        "duration": "52.0",
-        "name": "rendering.mobile/yahoo_sports_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/youtube"
-    },
-    {
-        "duration": "26.0",
-        "name": "rendering.mobile/youtube_2018"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/youtube_2018_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.0",
-        "name": "rendering.mobile/youtube_desktop_gpu_raster"
-    },
-    {
-        "duration": "22.0",
-        "name": "rendering.mobile/youtube_desktop_gpu_raster_2018"
-    },
-    {
-        "duration": "18.0",
-        "name": "rendering.mobile/youtube_mobile"
-    },
-    {
-        "duration": "25.0",
-        "name": "rendering.mobile/youtube_mobile_2018"
-    },
-    {
-        "duration": "16.0",
-        "name": "rendering.mobile/youtube_mobile_sync_scroll"
-    },
-    {
-        "duration": "17.0",
-        "name": "rendering.mobile/youtube_mobile_sync_scroll_2018"
-    },
-    {
-        "duration": "35.0",
-        "name": "rendering.mobile/youtube_pinch"
-    },
-    {
-        "duration": "32.0",
-        "name": "rendering.mobile/youtube_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.0",
-        "name": "rendering.mobile/yuv_decoding"
-    },
-    {
-        "duration": "31.0",
-        "name": "rendering.mobile/yuv_decoding_gpu_rasterization_and_decoding"
-    },
-    {
-        "duration": "33.0",
-        "name": "rendering.mobile/zdnet_pathological"
-    },
-    {
-        "duration": "23.0",
-        "name": "rendering.mobile/zoom_in_animation"
-    },
-    {
-        "duration": "19.0",
-        "name": "scheduler.tough_scheduling_cases/raf"
-    },
-    {
-        "duration": "19.0",
-        "name": "scheduler.tough_scheduling_cases/raf_animation"
-    },
-    {
-        "duration": "18.0",
-        "name": "scheduler.tough_scheduling_cases/raf_canvas"
-    },
-    {
-        "duration": "19.0",
-        "name": "scheduler.tough_scheduling_cases/raf_touch_animation"
-    },
-    {
-        "duration": "12.0",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy"
-    },
-    {
-        "duration": "12.0",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_light"
-    },
-    {
-        "duration": "12.0",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_medium"
-    },
-    {
-        "duration": "24.0",
-        "name": "scheduler.tough_scheduling_cases/simple_text_page"
-    },
-    {
-        "duration": "14.0",
-        "name": "scheduler.tough_scheduling_cases/simple_touch_drag"
-    },
-    {
-        "duration": "19.0",
-        "name": "scheduler.tough_scheduling_cases/sync_scroll_offset"
-    },
-    {
-        "duration": "19.0",
-        "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.gpu_rasterization.polymer/core_scroll_header_panel"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_button"
-    },
-    {
-        "duration": "28.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_calculator"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_checkbox"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_fab"
-    },
-    {
-        "duration": "43.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_icon_button"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_shadow"
-    },
-    {
-        "duration": "56.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_tabs"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.gpu_rasterization.polymer/paper_toggle_button"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/ebay"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/espn"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/facebook"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/gmail"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "29.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/twitter"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/youtube"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test"
-    },
-    {
-        "duration": "33.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "34.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Blogger"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ESPN"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Facebook"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/LinkedIn"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Twitter"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Weather.com"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/amazon_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/blogspot_pinch"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/booking_pinch"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/cnn_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ebay_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/espn_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/facebook_pinch"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/gmail_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_calendar_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_image_pinch"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_search_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://booking.com"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://news.yahoo.com"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://sports.yahoo.com/"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.amazon.com"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.cnn.com"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.ebay.com"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.youtube.com"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/linkedin_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/twitter_pinch"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/weather_pinch"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_games_pinch"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_news_pinch"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_sports_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/youtube_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "30.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_mobile_sites_smooth/androidpolice"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.key_mobile_sites_smooth/baidu"
-    },
-    {
-        "duration": "12.0",
-        "name": "smoothness.key_mobile_sites_smooth/bing"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.key_mobile_sites_smooth/blogspot"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.key_mobile_sites_smooth/booking.com"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.key_mobile_sites_smooth/capitolvolkswagen"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.key_mobile_sites_smooth/cnn"
-    },
-    {
-        "duration": "30.0",
-        "name": "smoothness.key_mobile_sites_smooth/cnn_article"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.key_mobile_sites_smooth/deviantart"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_mobile_sites_smooth/ebay"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_mobile_sites_smooth/facebook"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.key_mobile_sites_smooth/google_news"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_mobile_sites_smooth/google_plus"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.key_mobile_sites_smooth/google_web_search"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.key_mobile_sites_smooth/gsp.ro"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_mobile_sites_smooth/linkedin"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.key_mobile_sites_smooth/mlb"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.key_mobile_sites_smooth/pinterest"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_mobile_sites_smooth/sfgate"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.key_mobile_sites_smooth/techcrunch"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_mobile_sites_smooth/theverge"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.key_mobile_sites_smooth/theverge_article"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.key_mobile_sites_smooth/usatoday"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_mobile_sites_smooth/wikipedia"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_mobile_sites_smooth/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.key_mobile_sites_smooth/wordpress"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.key_mobile_sites_smooth/worldjournal"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.key_mobile_sites_smooth/wowwiki"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.key_mobile_sites_smooth/wsj"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_mobile_sites_smooth/yahoo_answers"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_mobile_sites_smooth/yahoo_news"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.key_mobile_sites_smooth/youtube"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.key_silk_cases/basic_stream"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_silk_cases/card_expansion"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_silk_cases/card_expansion_animated"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_silk_cases/card_expansion_images_text"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_silk_cases/card_flying"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_silk_cases/coordinated_animation"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.key_silk_cases/font_wipe"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.key_silk_cases/google_news_ios"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_silk_cases/gws_boogie_expansion"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_silk_cases/gws_google_expansion"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_silk_cases/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.key_silk_cases/infinite_scrolling"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.key_silk_cases/list_animation_simple"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.key_silk_cases/list_recycle_transform"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_silk_cases/mask_transition_animation"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_silk_cases/masonry"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.key_silk_cases/mobile_news_sandbox"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_silk_cases/parallax_effect"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.key_silk_cases/physical_simulation"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.key_silk_cases/silk_finance"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_silk_cases/sticky_using_webkit"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.key_silk_cases/stress_hidey_bars"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.key_silk_cases/svg_icon_raster"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.key_silk_cases/swipe_action"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_silk_cases/swipe_to_dismiss"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.key_silk_cases/toggle_drawer"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.key_silk_cases/update_history_state"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.key_silk_cases/vertical_expansion"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.key_silk_cases/zoom_in_animation"
-    },
-    {
-        "duration": "29.0",
-        "name": "smoothness.maps/maps_perf_test"
-    },
-    {
-        "duration": "28.0",
-        "name": "smoothness.pathological_mobile_sites/cnn_pathological"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.pathological_mobile_sites/espn_pathological"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.pathological_mobile_sites/guardian_pathological"
-    },
-    {
-        "duration": "34.0",
-        "name": "smoothness.pathological_mobile_sites/http://edition.cnn.com"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.pathological_mobile_sites/http://m.espn.go.com/nhl/rankings"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.pathological_mobile_sites/http://recode.net"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.pathological_mobile_sites/http://sports.yahoo.com/"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.pathological_mobile_sites/http://www.latimes.com"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.pathological_mobile_sites/http://www.pbs.org/newshour/bb/much-really-cost-live-city-like-seattle/#the-rundown"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.pathological_mobile_sites/http://www.theguardian.com/politics/2015/mar/09/ed-balls-tory-spending-plans-nhs-charging"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.pathological_mobile_sites/http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.pathological_mobile_sites/http://www.zdnet.com"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.pathological_mobile_sites/https://www.linkedin.com/in/linustorvalds"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.pathological_mobile_sites/latimes_pathological"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.pathological_mobile_sites/linkedin_pathological"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.pathological_mobile_sites/pbs_pathological"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.pathological_mobile_sites/recode_pathological"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.pathological_mobile_sites/wow_wiki_pathological"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.pathological_mobile_sites/yahoo_sports_pathological"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.pathological_mobile_sites/zdnet_pathological"
-    },
-    {
-        "duration": "31.0",
-        "name": "smoothness.simple_mobile_sites/ebay_scroll"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.simple_mobile_sites/flickr_scroll"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.simple_mobile_sites/http://m.nytimes.com/"
-    },
-    {
-        "duration": "32.0",
-        "name": "smoothness.simple_mobile_sites/http://www.ebay.co.uk/"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.simple_mobile_sites/http://www.nyc.gov"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.simple_mobile_sites/https://www.flickr.com/"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.simple_mobile_sites/nyc_gov_scroll"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.simple_mobile_sites/nytimes_scroll"
-    },
-    {
-        "duration": "12.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/amazon"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/androidpolice"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/baidu"
-    },
-    {
-        "duration": "12.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/bing"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/blogspot"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/booking.com"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/capitolvolkswagen"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn"
-    },
-    {
-        "duration": "32.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn_article"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/deviantart"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/ebay"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/espn"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/facebook"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/forecast.io"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_news"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_plus"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_web_search"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/gsp.ro"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/linkedin"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/mlb"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/pinterest"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/sfgate"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/techcrunch"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge_article"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/twitter"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/usatoday"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wordpress"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/worldjournal"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wowwiki"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wsj"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_answers"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_news"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/youtube"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.top_25_smooth/ebay"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.top_25_smooth/espn"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.top_25_smooth/facebook"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.top_25_smooth/gmail"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "29.0",
-        "name": "smoothness.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.top_25_smooth/pinterest"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.top_25_smooth/twitter"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.top_25_smooth/youtube"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css.html"
-    },
-    {
-        "duration": "38.0",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_inline_style"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_new_element"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_style_element"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/css_transitions_updating_class"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_color"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_path"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/keyframed_animations"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/keyframed_animations.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html"
-    },
-    {
-        "duration": "28.0",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/transform_transition_js_block.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/transform_transitions"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/transform_transitions.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/transform_transitions_js_block"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_color"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_path"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_15"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/bouncing_png_images"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_canvas_cases/bouncing_svg_images"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/canvas_arcs"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/canvas_font_cycler"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/canvas_lines"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/canvas_to_blob"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/chip_tune"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/crafty_mind"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/effect_games"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/fill_shapes"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_canvas_cases/geo_apis"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/hakim"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/jarro_doverson"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/kevs_3d"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/man_in_blue"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_canvas_cases/many_images"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/megi_dish"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/microsoft_snow"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/microsoft_speed_reading"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/microsoft_tweet_map"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/microsoft_video_city"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/mix_10k"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/put_get_image_data"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/runway"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/smash_cat"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/spielzeugz"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/stroke_shapes"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_image_decode_cases/cats_unscaled"
-    },
-    {
-        "duration": "11.0",
-        "name": "smoothness.tough_image_decode_cases/cats_viewport_width"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html"
-    },
-    {
-        "duration": "11.0",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "32.0",
-        "name": "smoothness.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_pinch_zoom_cases/amazon_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_pinch_zoom_cases/blogspot_pinch"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.tough_pinch_zoom_cases/booking_pinch"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_pinch_zoom_cases/cnn_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_pinch_zoom_cases/ebay_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_pinch_zoom_cases/espn_pinch"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_pinch_zoom_cases/facebook_pinch"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_pinch_zoom_cases/gmail_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_pinch_zoom_cases/google_calendar_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_pinch_zoom_cases/google_image_pinch"
-    },
-    {
-        "duration": "26.0",
-        "name": "smoothness.tough_pinch_zoom_cases/google_search_pinch"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_pinch_zoom_cases/linkedin_pinch"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.tough_pinch_zoom_cases/twitter_pinch"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.tough_pinch_zoom_cases/weather_pinch"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_games_pinch"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_news_pinch"
-    },
-    {
-        "duration": "25.0",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_sports_pinch"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_pinch_zoom_cases/youtube_pinch"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "24.0",
-        "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.0",
-        "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads"
-    },
-    {
-        "duration": "21.0",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads"
-    },
-    {
-        "duration": "27.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "23.0",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/animometer_webgl"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/aquarium"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/aquarium_20k"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/blob"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/dynamic_cube_map"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/earth"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/many_planets_deep"
-    },
-    {
-        "duration": "9.0",
-        "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/particles"
-    },
-    {
-        "duration": "4.0",
-        "name": "smoothness.tough_webgl_cases/san_angeles"
-    },
-    {
-        "duration": "36.0",
-        "name": "speedometer-future/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "36.0",
-        "name": "speedometer/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "60.0",
-        "name": "speedometer2-future/Speedometer2"
-    },
-    {
-        "duration": "59.0",
-        "name": "speedometer2/Speedometer2"
-    },
-    {
-        "duration": "31.0",
-        "name": "start_with_url.cold.startup_pages/about:blank"
-    },
-    {
-        "duration": "30.0",
-        "name": "start_with_url.cold.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "29.0",
-        "name": "start_with_url.warm.startup_pages/about:blank"
-    },
-    {
-        "duration": "30.0",
-        "name": "start_with_url.warm.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/background:media:imgur"
-    },
-    {
-        "duration": "49.0",
-        "name": "system_health.common_mobile/background:news:nytimes"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/background:search:google"
-    },
-    {
-        "duration": "36.0",
-        "name": "system_health.common_mobile/background:social:facebook"
-    },
-    {
-        "duration": "36.0",
-        "name": "system_health.common_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "88.0",
-        "name": "system_health.common_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "34.0",
-        "name": "system_health.common_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "98.0",
-        "name": "system_health.common_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "63.0",
-        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "92.0",
-        "name": "system_health.common_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "112.0",
-        "name": "system_health.common_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "111.0",
-        "name": "system_health.common_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "75.0",
-        "name": "system_health.common_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "67.0",
-        "name": "system_health.common_mobile/browse:news:qq"
-    },
-    {
-        "duration": "61.0",
-        "name": "system_health.common_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "153.0",
-        "name": "system_health.common_mobile/browse:news:toi"
-    },
-    {
-        "duration": "69.0",
-        "name": "system_health.common_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "86.0",
-        "name": "system_health.common_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "82.0",
-        "name": "system_health.common_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "42.0",
-        "name": "system_health.common_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "87.0",
-        "name": "system_health.common_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "223.0",
-        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "92.0",
-        "name": "system_health.common_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "106.0",
-        "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "132.0",
-        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "65.0",
-        "name": "system_health.common_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "91.0",
-        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "58.0",
-        "name": "system_health.common_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "22.0",
-        "name": "system_health.common_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "27.0",
-        "name": "system_health.common_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.common_mobile/load:games:lazors"
-    },
-    {
-        "duration": "37.0",
-        "name": "system_health.common_mobile/load:games:spychase"
-    },
-    {
-        "duration": "26.0",
-        "name": "system_health.common_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:media:google_images"
-    },
-    {
-        "duration": "26.0",
-        "name": "system_health.common_mobile/load:media:imgur"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:media:youtube"
-    },
-    {
-        "duration": "38.0",
-        "name": "system_health.common_mobile/load:news:cnn"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.common_mobile/load:news:irctc"
-    },
-    {
-        "duration": "29.0",
-        "name": "system_health.common_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:news:qq"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:news:reddit"
-    },
-    {
-        "duration": "28.0",
-        "name": "system_health.common_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.common_mobile/load:search:baidu"
-    },
-    {
-        "duration": "26.0",
-        "name": "system_health.common_mobile/load:search:ebay"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.common_mobile/load:search:google"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:search:taobao"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.common_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.common_mobile/load:search:yandex"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.common_mobile/load:social:twitter"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.common_mobile/load:tools:docs"
-    },
-    {
-        "duration": "27.0",
-        "name": "system_health.common_mobile/load:tools:drive"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.common_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "35.0",
-        "name": "system_health.common_mobile/load:tools:gmail"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.common_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "30.0",
-        "name": "system_health.common_mobile/load:tools:weather"
-    },
-    {
-        "duration": "136.0",
-        "name": "system_health.common_mobile/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "134.0",
-        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.memory_mobile/background:media:imgur"
-    },
-    {
-        "duration": "38.0",
-        "name": "system_health.memory_mobile/background:news:nytimes"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.memory_mobile/background:search:google"
-    },
-    {
-        "duration": "27.0",
-        "name": "system_health.memory_mobile/background:social:facebook"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.memory_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "77.0",
-        "name": "system_health.memory_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "31.0",
-        "name": "system_health.memory_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "75.0",
-        "name": "system_health.memory_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "46.0",
-        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "70.0",
-        "name": "system_health.memory_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "81.0",
-        "name": "system_health.memory_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "57.0",
-        "name": "system_health.memory_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "52.0",
-        "name": "system_health.memory_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "49.0",
-        "name": "system_health.memory_mobile/browse:news:qq"
-    },
-    {
-        "duration": "49.0",
-        "name": "system_health.memory_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "69.0",
-        "name": "system_health.memory_mobile/browse:news:toi"
-    },
-    {
-        "duration": "48.0",
-        "name": "system_health.memory_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "52.0",
-        "name": "system_health.memory_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "53.0",
-        "name": "system_health.memory_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "32.0",
-        "name": "system_health.memory_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "61.0",
-        "name": "system_health.memory_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "76.0",
-        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "72.0",
-        "name": "system_health.memory_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "71.0",
-        "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "71.0",
-        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "49.0",
-        "name": "system_health.memory_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "56.0",
-        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "45.0",
-        "name": "system_health.memory_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "26.0",
-        "name": "system_health.memory_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.memory_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.memory_mobile/load:games:lazors"
-    },
-    {
-        "duration": "28.0",
-        "name": "system_health.memory_mobile/load:games:spychase"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.memory_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:media:google_images"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:media:imgur"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:media:youtube"
-    },
-    {
-        "duration": "28.0",
-        "name": "system_health.memory_mobile/load:news:cnn"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:news:irctc"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.memory_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:news:qq"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:news:reddit"
-    },
-    {
-        "duration": "25.0",
-        "name": "system_health.memory_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:search:baidu"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.memory_mobile/load:search:ebay"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.memory_mobile/load:search:google"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:search:taobao"
-    },
-    {
-        "duration": "26.0",
-        "name": "system_health.memory_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "22.0",
-        "name": "system_health.memory_mobile/load:search:yandex"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:social:twitter"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.memory_mobile/load:tools:docs"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:tools:drive"
-    },
-    {
-        "duration": "23.0",
-        "name": "system_health.memory_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "24.0",
-        "name": "system_health.memory_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "26.0",
-        "name": "system_health.memory_mobile/load:tools:weather"
-    },
-    {
-        "duration": "292.0",
-        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "252.0",
-        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "36.0",
-        "name": "thread_times.key_idle_power_cases/animated-gif.html"
-    },
-    {
-        "duration": "36.0",
-        "name": "thread_times.key_idle_power_cases/blank.html"
-    },
-    {
-        "duration": "37.0",
-        "name": "thread_times.key_idle_power_cases/css-animation.html"
-    },
-    {
-        "duration": "36.0",
-        "name": "thread_times.key_idle_power_cases/idle_power_animated_gif"
-    },
-    {
-        "duration": "36.0",
-        "name": "thread_times.key_idle_power_cases/idle_power_blank"
-    },
-    {
-        "duration": "37.0",
-        "name": "thread_times.key_idle_power_cases/idle_power_css_animation"
-    },
-    {
-        "duration": "39.0",
-        "name": "thread_times.key_idle_power_cases/idle_power_request_animation_frame"
-    },
-    {
-        "duration": "109.0",
-        "name": "thread_times.key_idle_power_cases/idle_power_set_timeout_long"
-    },
-    {
-        "duration": "38.0",
-        "name": "thread_times.key_idle_power_cases/idle_power_set_timetout"
-    },
-    {
-        "duration": "38.0",
-        "name": "thread_times.key_idle_power_cases/request-animation-frame.html"
-    },
-    {
-        "duration": "38.0",
-        "name": "thread_times.key_idle_power_cases/set-timeout.html"
-    },
-    {
-        "duration": "108.0",
-        "name": "thread_times.key_idle_power_cases/set-timeout.html (Long Idle)"
-    },
-    {
-        "duration": "34.0",
-        "name": "thread_times.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "33.0",
-        "name": "thread_times.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "34.0",
-        "name": "thread_times.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "26.0",
-        "name": "thread_times.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "24.0",
-        "name": "thread_times.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "27.0",
-        "name": "thread_times.key_noop_cases/no_op_raf"
-    },
-    {
-        "duration": "27.0",
-        "name": "thread_times.key_noop_cases/no_op_raf.html"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_noop_cases/no_op_scroll"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_noop_cases/no_op_scroll.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.key_noop_cases/no_op_settimeout"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.key_noop_cases/no_op_settimeout.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.key_noop_cases/no_op_touch_handler"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.key_noop_cases/no_op_touch_handler.html"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/card_expansion"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/card_expansion_animated"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/card_expansion_images_text"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/card_flying"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/coordinated_animation"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/font_wipe"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/font_wipe.html"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.key_silk_cases/google_news_ios"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/gws_boogie_expansion"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/gws_google_expansion"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "32.0",
-        "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html"
-    },
-    {
-        "duration": "14.0",
-        "name": "thread_times.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/jx5De/14/show/"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/"
-    },
-    {
-        "duration": "21.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.key_silk_cases/http://wiltzius.github.io/shape-shifter/"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/http://www.google.com/#q=google"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie"
-    },
-    {
-        "duration": "33.0",
-        "name": "thread_times.key_silk_cases/inbox_app.html?stress_hidey_bars"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.key_silk_cases/inbox_app.html?toggle_drawer"
-    },
-    {
-        "duration": "29.0",
-        "name": "thread_times.key_silk_cases/infinite_scrolling"
-    },
-    {
-        "duration": "29.0",
-        "name": "thread_times.key_silk_cases/infinite_scrolling.html"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.key_silk_cases/list_animation_simple"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.key_silk_cases/list_animation_simple.html"
-    },
-    {
-        "duration": "32.0",
-        "name": "thread_times.key_silk_cases/list_recycle_transform"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/mask_transition_animation"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.key_silk_cases/mobile_news_sandbox"
-    },
-    {
-        "duration": "21.0",
-        "name": "thread_times.key_silk_cases/parallax_effect"
-    },
-    {
-        "duration": "14.0",
-        "name": "thread_times.key_silk_cases/physical_simulation"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/pushState.html"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.key_silk_cases/silk_finance"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.key_silk_cases/silk_finance.html"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.key_silk_cases/sticky_using_webkit"
-    },
-    {
-        "duration": "33.0",
-        "name": "thread_times.key_silk_cases/stress_hidey_bars"
-    },
-    {
-        "duration": "31.0",
-        "name": "thread_times.key_silk_cases/svg_icon_raster"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/swipe_to_dismiss"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.key_silk_cases/toggle_drawer"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/update_history_state"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.key_silk_cases/vertical_expansion"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.key_silk_cases/zoom_in_animation"
-    },
-    {
-        "duration": "39.0",
-        "name": "thread_times.simple_mobile_sites/ebay_scroll"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.simple_mobile_sites/flickr_scroll"
-    },
-    {
-        "duration": "32.0",
-        "name": "thread_times.simple_mobile_sites/http://m.nytimes.com/"
-    },
-    {
-        "duration": "40.0",
-        "name": "thread_times.simple_mobile_sites/http://www.ebay.co.uk/"
-    },
-    {
-        "duration": "34.0",
-        "name": "thread_times.simple_mobile_sites/http://www.nyc.gov"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.simple_mobile_sites/https://www.flickr.com/"
-    },
-    {
-        "duration": "34.0",
-        "name": "thread_times.simple_mobile_sites/nyc_gov_scroll"
-    },
-    {
-        "duration": "32.0",
-        "name": "thread_times.simple_mobile_sites/nytimes_scroll"
-    },
-    {
-        "duration": "28.0",
-        "name": "thread_times.tough_compositor_cases/cc_poster_circle"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.tough_compositor_cases/cc_scroll_200_layer_grid"
-    },
-    {
-        "duration": "35.0",
-        "name": "thread_times.tough_compositor_cases/cc_scroll_text_only"
-    },
-    {
-        "duration": "36.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION"
-    },
-    {
-        "duration": "32.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS"
-    },
-    {
-        "duration": "27.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE"
-    },
-    {
-        "duration": "29.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "34.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "29.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "29.0",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "37.0",
-        "name": "thread_times.tough_compositor_cases/js_full_screen_invalidation"
-    },
-    {
-        "duration": "31.0",
-        "name": "thread_times.tough_compositor_cases/js_poster_circle"
-    },
-    {
-        "duration": "30.0",
-        "name": "thread_times.tough_compositor_cases/js_scroll_200_layer_grid"
-    },
-    {
-        "duration": "31.0",
-        "name": "thread_times.tough_compositor_cases/js_scroll_text_only"
-    },
-    {
-        "duration": "32.0",
-        "name": "thread_times.tough_compositor_cases/new_tilings"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "22.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "21.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "28.0",
-        "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "25.0",
-        "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "25.0",
-        "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "26.0",
-        "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "27.0",
-        "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "24.0",
-        "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "21.0",
-        "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "19.0",
-        "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "24.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "24.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "23.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "20.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "18.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "17.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "16.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "14.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "13.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.0",
-        "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "13.0",
-        "name": "tracing.tracing_with_background_memory_infra/Facebook"
-    },
-    {
-        "duration": "13.0",
-        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
-    },
-    {
-        "duration": "11.0",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
-    },
-    {
-        "duration": "11.0",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
-    },
-    {
-        "duration": "10.0",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
-    },
-    {
-        "duration": "11.0",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
-    },
-    {
-        "duration": "14.0",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
-    },
-    {
-        "duration": "19.0",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "14.0",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "98.0",
-        "name": "v8.browsing_mobile-future/browse:chrome:newtab"
-    },
-    {
-        "duration": "38.0",
-        "name": "v8.browsing_mobile-future/browse:chrome:omnibox"
-    },
-    {
-        "duration": "119.0",
-        "name": "v8.browsing_mobile-future/browse:media:facebook_photos"
-    },
-    {
-        "duration": "77.0",
-        "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "118.0",
-        "name": "v8.browsing_mobile-future/browse:media:imgur"
-    },
-    {
-        "duration": "133.0",
-        "name": "v8.browsing_mobile-future/browse:media:youtube"
-    },
-    {
-        "duration": "169.0",
-        "name": "v8.browsing_mobile-future/browse:news:cnn"
-    },
-    {
-        "duration": "91.0",
-        "name": "v8.browsing_mobile-future/browse:news:cricbuzz"
-    },
-    {
-        "duration": "80.0",
-        "name": "v8.browsing_mobile-future/browse:news:qq"
-    },
-    {
-        "duration": "72.0",
-        "name": "v8.browsing_mobile-future/browse:news:reddit"
-    },
-    {
-        "duration": "241.0",
-        "name": "v8.browsing_mobile-future/browse:news:toi"
-    },
-    {
-        "duration": "85.0",
-        "name": "v8.browsing_mobile-future/browse:news:washingtonpost"
-    },
-    {
-        "duration": "121.0",
-        "name": "v8.browsing_mobile-future/browse:shopping:amazon"
-    },
-    {
-        "duration": "108.0",
-        "name": "v8.browsing_mobile-future/browse:shopping:avito"
-    },
-    {
-        "duration": "52.0",
-        "name": "v8.browsing_mobile-future/browse:shopping:lazada"
-    },
-    {
-        "duration": "114.0",
-        "name": "v8.browsing_mobile-future/browse:social:facebook"
-    },
-    {
-        "duration": "320.0",
-        "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "117.0",
-        "name": "v8.browsing_mobile-future/browse:social:instagram"
-    },
-    {
-        "duration": "141.0",
-        "name": "v8.browsing_mobile-future/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "165.0",
-        "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "75.0",
-        "name": "v8.browsing_mobile-future/browse:social:twitter"
-    },
-    {
-        "duration": "121.0",
-        "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "77.0",
-        "name": "v8.browsing_mobile-future/browse:tools:maps"
-    },
-    {
-        "duration": "100.0",
-        "name": "v8.browsing_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "39.0",
-        "name": "v8.browsing_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "121.0",
-        "name": "v8.browsing_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "78.0",
-        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "121.0",
-        "name": "v8.browsing_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "131.0",
-        "name": "v8.browsing_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "169.0",
-        "name": "v8.browsing_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "90.0",
-        "name": "v8.browsing_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "82.0",
-        "name": "v8.browsing_mobile/browse:news:qq"
-    },
-    {
-        "duration": "73.0",
-        "name": "v8.browsing_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "237.0",
-        "name": "v8.browsing_mobile/browse:news:toi"
-    },
-    {
-        "duration": "88.0",
-        "name": "v8.browsing_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "129.0",
-        "name": "v8.browsing_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "107.0",
-        "name": "v8.browsing_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "53.0",
-        "name": "v8.browsing_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "113.0",
-        "name": "v8.browsing_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "323.0",
-        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "113.0",
-        "name": "v8.browsing_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "145.0",
-        "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "167.0",
-        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "76.0",
-        "name": "v8.browsing_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "121.0",
-        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "77.0",
-        "name": "v8.browsing_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "9.0",
-        "name": "wasm/AsmJsZenGarden"
-    },
-    {
-        "duration": "21.0",
-        "name": "wasm/WasmSpaceBuggy"
-    },
-    {
-        "duration": "9.0",
-        "name": "wasm/WasmStylizedRenderer"
-    },
-    {
-        "duration": "9.0",
-        "name": "wasm/WasmSunTemple"
-    },
-    {
-        "duration": "17.0",
-        "name": "wasm/WasmTanks"
-    },
-    {
-        "duration": "9.0",
-        "name": "wasm/WasmZenGarden"
-    },
-    {
-        "duration": "22.0",
-        "name": "webrtc/10s_datachannel_transfer"
-    },
-    {
-        "duration": "27.0",
-        "name": "webrtc/canvas_capture_peer_connection"
-    },
-    {
-        "duration": "36.0",
-        "name": "webrtc/codec_constraints_h264"
-    },
-    {
-        "duration": "36.0",
-        "name": "webrtc/codec_constraints_vp8"
-    },
-    {
-        "duration": "36.0",
-        "name": "webrtc/codec_constraints_vp9"
-    },
-    {
-        "duration": "23.0",
-        "name": "webrtc/hd_local_stream_10s"
-    },
-    {
-        "duration": "45.0",
-        "name": "webrtc/multiple_peerconnections"
-    },
-    {
-        "duration": "68.0",
-        "name": "webrtc/pause_play_peerconnections"
-    }
-]
diff --git a/tools/perf/core/shard_maps/timing_data/mac1012_story_timing.json b/tools/perf/core/shard_maps/timing_data/mac1012_story_timing.json
deleted file mode 100644
index 0940e02..0000000
--- a/tools/perf/core/shard_maps/timing_data/mac1012_story_timing.json
+++ /dev/null
@@ -1,5694 +0,0 @@
-[
-    {
-        "duration": "8.960256459459458",
-        "name": "blink_perf.bindings/append-child.html"
-    },
-    {
-        "duration": "7.376134381081082",
-        "name": "blink_perf.bindings/create-element.html"
-    },
-    {
-        "duration": "6.83619094054054",
-        "name": "blink_perf.bindings/document-implementation.html"
-    },
-    {
-        "duration": "6.6628048783783775",
-        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
-    },
-    {
-        "duration": "6.822711875675675",
-        "name": "blink_perf.bindings/first-child.html"
-    },
-    {
-        "duration": "3.4028262270270275",
-        "name": "blink_perf.bindings/gc-forest.html"
-    },
-    {
-        "duration": "3.992991581081082",
-        "name": "blink_perf.bindings/gc-mini-tree.html"
-    },
-    {
-        "duration": "16.33124027027027",
-        "name": "blink_perf.bindings/gc-tree.html"
-    },
-    {
-        "duration": "6.712598397297298",
-        "name": "blink_perf.bindings/get-attribute-rare.html"
-    },
-    {
-        "duration": "6.776766940540541",
-        "name": "blink_perf.bindings/get-attribute.html"
-    },
-    {
-        "duration": "6.836365545945947",
-        "name": "blink_perf.bindings/get-element-by-id.html"
-    },
-    {
-        "duration": "6.738692418918919",
-        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
-    },
-    {
-        "duration": "6.9598345162162145",
-        "name": "blink_perf.bindings/id-getter.html"
-    },
-    {
-        "duration": "6.849441121621621",
-        "name": "blink_perf.bindings/id-setter.html"
-    },
-    {
-        "duration": "7.3500484297297275",
-        "name": "blink_perf.bindings/indexed-getter.html"
-    },
-    {
-        "duration": "6.667772643243243",
-        "name": "blink_perf.bindings/insert-before.html"
-    },
-    {
-        "duration": "6.800501400000003",
-        "name": "blink_perf.bindings/named-property-enumerator.html"
-    },
-    {
-        "duration": "19.917038675675677",
-        "name": "blink_perf.bindings/node-list-access.html"
-    },
-    {
-        "duration": "6.828512243243243",
-        "name": "blink_perf.bindings/node-type.html"
-    },
-    {
-        "duration": "1.465146143243243",
-        "name": "blink_perf.bindings/post-message.html"
-    },
-    {
-        "duration": "6.985167083783783",
-        "name": "blink_perf.bindings/sequence-conversion-array.html"
-    },
-    {
-        "duration": "7.023515518918918",
-        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
-    },
-    {
-        "duration": "1.5721907243243245",
-        "name": "blink_perf.bindings/serialize-array.html"
-    },
-    {
-        "duration": "1.2826985459459457",
-        "name": "blink_perf.bindings/serialize-long-string.html"
-    },
-    {
-        "duration": "2.9387476540540547",
-        "name": "blink_perf.bindings/serialize-map.html"
-    },
-    {
-        "duration": "1.303903456756757",
-        "name": "blink_perf.bindings/serialize-nested-array.html"
-    },
-    {
-        "duration": "6.736935475675675",
-        "name": "blink_perf.bindings/set-attribute-rare.html"
-    },
-    {
-        "duration": "6.877832835135134",
-        "name": "blink_perf.bindings/set-attribute.html"
-    },
-    {
-        "duration": "6.516000945945946",
-        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
-    },
-    {
-        "duration": "6.308375740540541",
-        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
-    },
-    {
-        "duration": "3.8272098621621615",
-        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
-    },
-    {
-        "duration": "3.785892037837837",
-        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
-    },
-    {
-        "duration": "7.364221910810813",
-        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
-    },
-    {
-        "duration": "6.845970900000001",
-        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
-    },
-    {
-        "duration": "6.958278508108109",
-        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
-    },
-    {
-        "duration": "6.672509151351352",
-        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
-    },
-    {
-        "duration": "6.810353164864867",
-        "name": "blink_perf.bindings/undefined-first-child.html"
-    },
-    {
-        "duration": "6.653950640540543",
-        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
-    },
-    {
-        "duration": "6.766140337837837",
-        "name": "blink_perf.bindings/undefined-id-getter.html"
-    },
-    {
-        "duration": "9.532661621621623",
-        "name": "blink_perf.canvas/createImageBitmapFromImageData.html"
-    },
-    {
-        "duration": "6.547650767567569",
-        "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "12.355803432432433",
-        "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "1.332524502702703",
-        "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html"
-    },
-    {
-        "duration": "3.7747110162162163",
-        "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "3.8096741108108105",
-        "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "4.645618375675676",
-        "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "7.6614039567567565",
-        "name": "blink_perf.canvas/drawimage-not-pixelaligned.html"
-    },
-    {
-        "duration": "7.582014254054054",
-        "name": "blink_perf.canvas/drawimage.html"
-    },
-    {
-        "duration": "7.671882840540541",
-        "name": "blink_perf.canvas/getImageData.html"
-    },
-    {
-        "duration": "6.934235843243243",
-        "name": "blink_perf.canvas/getImageDataColorManaged.html"
-    },
-    {
-        "duration": "7.554265964864863",
-        "name": "blink_perf.canvas/putImageData.html"
-    },
-    {
-        "duration": "6.742011616216216",
-        "name": "blink_perf.canvas/toBlob_duration.html"
-    },
-    {
-        "duration": "2.7262764702702693",
-        "name": "blink_perf.canvas/toBlob_duration_jpeg.html"
-    },
-    {
-        "duration": "2.404524394594595",
-        "name": "blink_perf.canvas/transferFromImageBitmap.html"
-    },
-    {
-        "duration": "3.7508849",
-        "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html"
-    },
-    {
-        "duration": "8.209883051351351",
-        "name": "blink_perf.canvas/upload-video-to-sub-texture.html"
-    },
-    {
-        "duration": "1.6901786270270267",
-        "name": "blink_perf.canvas/upload-video-to-texture.html"
-    },
-    {
-        "duration": "3.865295721621622",
-        "name": "blink_perf.canvas/upload-webgl-to-texture.html"
-    },
-    {
-        "duration": "13.874755361111108",
-        "name": "blink_perf.css/AttributeDescendantSelector.html"
-    },
-    {
-        "duration": "7.0071268",
-        "name": "blink_perf.css/CSSPropertySetterGetter.html"
-    },
-    {
-        "duration": "7.0284523",
-        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
-    },
-    {
-        "duration": "7.347104611111113",
-        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
-    },
-    {
-        "duration": "6.3025206222222225",
-        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
-    },
-    {
-        "duration": "6.301286836111111",
-        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
-    },
-    {
-        "duration": "6.2814088861111115",
-        "name": "blink_perf.css/ChangeStyleElementSelector.html"
-    },
-    {
-        "duration": "6.254317605555556",
-        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
-    },
-    {
-        "duration": "6.298482394444444",
-        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
-    },
-    {
-        "duration": "6.23627936111111",
-        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
-    },
-    {
-        "duration": "6.154798336111111",
-        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
-    },
-    {
-        "duration": "6.118395563888888",
-        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
-    },
-    {
-        "duration": "6.127613166666666",
-        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
-    },
-    {
-        "duration": "6.102952036111111",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "6.160826719444443",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "7.2046931388888895",
-        "name": "blink_perf.css/ChangeStyleShallowTree.html"
-    },
-    {
-        "duration": "6.155368311111112",
-        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
-    },
-    {
-        "duration": "6.138644358333334",
-        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
-    },
-    {
-        "duration": "6.148338800000001",
-        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
-    },
-    {
-        "duration": "6.1443218055555535",
-        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
-    },
-    {
-        "duration": "6.120344038888889",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "6.110495483333334",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "11.15817361111111",
-        "name": "blink_perf.css/ClassDescendantSelector.html"
-    },
-    {
-        "duration": "7.928971305555554",
-        "name": "blink_perf.css/ClassInvalidation.html"
-    },
-    {
-        "duration": "10.303034750000004",
-        "name": "blink_perf.css/FocusUpdate.html"
-    },
-    {
-        "duration": "6.653497402777777",
-        "name": "blink_perf.css/LoadBootstrapBlog.html"
-    },
-    {
-        "duration": "6.776161833333333",
-        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
-    },
-    {
-        "duration": "6.99379410833333",
-        "name": "blink_perf.css/LoadSemanticPageExample.html"
-    },
-    {
-        "duration": "6.993864555555554",
-        "name": "blink_perf.css/PseudoClassSelectors.html"
-    },
-    {
-        "duration": "7.695606588235294",
-        "name": "blink_perf.css/SelectorCountScaling.html"
-    },
-    {
-        "duration": "10.703977324324324",
-        "name": "blink_perf.dom/addRange.html"
-    },
-    {
-        "duration": "1.5626855243243238",
-        "name": "blink_perf.dom/delete-in-password-field.html"
-    },
-    {
-        "duration": "7.130308862162161",
-        "name": "blink_perf.dom/div-editable.html"
-    },
-    {
-        "duration": "1.2980855513513514",
-        "name": "blink_perf.dom/inner_html_with_selection.html"
-    },
-    {
-        "duration": "15.904510891891892",
-        "name": "blink_perf.dom/long-sibling-list.html"
-    },
-    {
-        "duration": "2.082055445945946",
-        "name": "blink_perf.dom/modify-element-classname.html"
-    },
-    {
-        "duration": "1.7407453027027024",
-        "name": "blink_perf.dom/modify-element-id.html"
-    },
-    {
-        "duration": "1.7262009054054055",
-        "name": "blink_perf.dom/modify-element-title.html"
-    },
-    {
-        "duration": "1.5395644702702707",
-        "name": "blink_perf.dom/move-down-with-hidden-elements.html"
-    },
-    {
-        "duration": "1.554258016216216",
-        "name": "blink_perf.dom/move-up-with-hidden-elements.html"
-    },
-    {
-        "duration": "1.3077688702702701",
-        "name": "blink_perf.dom/remove_child_with_selection.html"
-    },
-    {
-        "duration": "7.105649572972974",
-        "name": "blink_perf.dom/select-multiple-add.html"
-    },
-    {
-        "duration": "7.231162748648648",
-        "name": "blink_perf.dom/select-single-add.html"
-    },
-    {
-        "duration": "7.875329089189188",
-        "name": "blink_perf.dom/select-single-remove.html"
-    },
-    {
-        "duration": "7.534921013513514",
-        "name": "blink_perf.dom/textarea-dom.html"
-    },
-    {
-        "duration": "7.9708355351351345",
-        "name": "blink_perf.dom/textarea-edit.html"
-    },
-    {
-        "duration": "9.276065243243243",
-        "name": "blink_perf.events/EventsDispatching.html"
-    },
-    {
-        "duration": "8.44198383783784",
-        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html"
-    },
-    {
-        "duration": "21.194762216216215",
-        "name": "blink_perf.events/EventsDispatchingInShadowTrees.html"
-    },
-    {
-        "duration": "8.845441216216217",
-        "name": "blink_perf.events/hit-test-lots-of-layers.html"
-    },
-    {
-        "duration": "15.719419567567567",
-        "name": "blink_perf.image_decoder/decode-gif.html"
-    },
-    {
-        "duration": "7.93450028108108",
-        "name": "blink_perf.image_decoder/decode-jpeg.html"
-    },
-    {
-        "duration": "13.07304058108108",
-        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
-    },
-    {
-        "duration": "7.198945929729729",
-        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
-    },
-    {
-        "duration": "9.936797581081084",
-        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
-    },
-    {
-        "duration": "7.7760739675675685",
-        "name": "blink_perf.image_decoder/decode-png-palette.html"
-    },
-    {
-        "duration": "13.124076581081075",
-        "name": "blink_perf.image_decoder/decode-png.html"
-    },
-    {
-        "duration": "14.208034675675679",
-        "name": "blink_perf.layout/ArabicLineLayout.html"
-    },
-    {
-        "duration": "1.4943000432432434",
-        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
-    },
-    {
-        "duration": "6.865831789189191",
-        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
-    },
-    {
-        "duration": "7.275825394594594",
-        "name": "blink_perf.layout/add-remove-inline-floats.html"
-    },
-    {
-        "duration": "7.014069418918919",
-        "name": "blink_perf.layout/attach-inlines-2.html"
-    },
-    {
-        "duration": "6.742081521621621",
-        "name": "blink_perf.layout/attach-inlines.html"
-    },
-    {
-        "duration": "8.125929029729727",
-        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
-    },
-    {
-        "duration": "6.68381557027027",
-        "name": "blink_perf.layout/chapter-reflow-once-random.html"
-    },
-    {
-        "duration": "12.653700662162162",
-        "name": "blink_perf.layout/chapter-reflow-once.html"
-    },
-    {
-        "duration": "8.384600472972972",
-        "name": "blink_perf.layout/chapter-reflow-thrice.html"
-    },
-    {
-        "duration": "9.54320683783784",
-        "name": "blink_perf.layout/chapter-reflow-twice.html"
-    },
-    {
-        "duration": "10.68801952702703",
-        "name": "blink_perf.layout/chapter-reflow.html"
-    },
-    {
-        "duration": "3.8492108297297296",
-        "name": "blink_perf.layout/character_fallback.html"
-    },
-    {
-        "duration": "1.4588405216216214",
-        "name": "blink_perf.layout/character_fallback_aat.html"
-    },
-    {
-        "duration": "8.48531522972973",
-        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
-    },
-    {
-        "duration": "8.297918256756756",
-        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
-    },
-    {
-        "duration": "7.112286602702701",
-        "name": "blink_perf.layout/flexbox-column-nowrap.html"
-    },
-    {
-        "duration": "7.104304121621621",
-        "name": "blink_perf.layout/flexbox-column-wrap.html"
-    },
-    {
-        "duration": "6.917115983783784",
-        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
-    },
-    {
-        "duration": "7.872306670270272",
-        "name": "blink_perf.layout/flexbox-lots-of-data.html"
-    },
-    {
-        "duration": "7.055328016216216",
-        "name": "blink_perf.layout/flexbox-row-nowrap.html"
-    },
-    {
-        "duration": "7.129850516216215",
-        "name": "blink_perf.layout/flexbox-row-wrap.html"
-    },
-    {
-        "duration": "8.188121164864866",
-        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
-    },
-    {
-        "duration": "7.23329107027027",
-        "name": "blink_perf.layout/floats_100_100.html"
-    },
-    {
-        "duration": "7.385129981081082",
-        "name": "blink_perf.layout/floats_100_100_nested.html"
-    },
-    {
-        "duration": "4.883930662162162",
-        "name": "blink_perf.layout/floats_10_1000.html"
-    },
-    {
-        "duration": "2.8508621675675685",
-        "name": "blink_perf.layout/floats_20_100.html"
-    },
-    {
-        "duration": "3.2631202459459465",
-        "name": "blink_perf.layout/floats_20_100_nested.html"
-    },
-    {
-        "duration": "2.0363707729729734",
-        "name": "blink_perf.layout/floats_2_100.html"
-    },
-    {
-        "duration": "1.956557405405405",
-        "name": "blink_perf.layout/floats_2_100_nested.html"
-    },
-    {
-        "duration": "3.5925398972972973",
-        "name": "blink_perf.layout/floats_50_100.html"
-    },
-    {
-        "duration": "3.79678461081081",
-        "name": "blink_perf.layout/floats_50_100_nested.html"
-    },
-    {
-        "duration": "11.753409621621623",
-        "name": "blink_perf.layout/hindi-line-layout.html"
-    },
-    {
-        "duration": "7.12732874864865",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
-    },
-    {
-        "duration": "7.030093556756758",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
-    },
-    {
-        "duration": "7.030012600000001",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
-    },
-    {
-        "duration": "1.350735235135135",
-        "name": "blink_perf.layout/latin-complex-text.html"
-    },
-    {
-        "duration": "1.8157927810810812",
-        "name": "blink_perf.layout/layers_overlap_2d.html"
-    },
-    {
-        "duration": "1.9387704864864859",
-        "name": "blink_perf.layout/layers_overlap_3d.html"
-    },
-    {
-        "duration": "5.496430056756757",
-        "name": "blink_perf.layout/line-layout-line-height.html"
-    },
-    {
-        "duration": "6.726405848648651",
-        "name": "blink_perf.layout/line-layout-repeat-append.html"
-    },
-    {
-        "duration": "6.849355786486487",
-        "name": "blink_perf.layout/line-layout.html"
-    },
-    {
-        "duration": "1.5756603675675676",
-        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
-    },
-    {
-        "duration": "1.5711319513513515",
-        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
-    },
-    {
-        "duration": "3.932565505405405",
-        "name": "blink_perf.layout/long-line-nowrap.html"
-    },
-    {
-        "duration": "7.161559291891893",
-        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
-    },
-    {
-        "duration": "7.136085667567569",
-        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
-    },
-    {
-        "duration": "6.6681868864864855",
-        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
-    },
-    {
-        "duration": "6.59980391891892",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
-    },
-    {
-        "duration": "6.631259032432434",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
-    },
-    {
-        "duration": "7.0538907891891895",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
-    },
-    {
-        "duration": "6.786697883783783",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
-    },
-    {
-        "duration": "7.048064562162162",
-        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
-    },
-    {
-        "duration": "7.068471300000001",
-        "name": "blink_perf.layout/nested-grid.html"
-    },
-    {
-        "duration": "7.129423305405407",
-        "name": "blink_perf.layout/nested-percent-height-tables.html"
-    },
-    {
-        "duration": "46.97381245945946",
-        "name": "blink_perf.layout/subtree-detaching.html"
-    },
-    {
-        "duration": "2.272726872972973",
-        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
-    },
-    {
-        "duration": "2.7719594783783776",
-        "name": "blink_perf.layout/word-break-break-all.html"
-    },
-    {
-        "duration": "2.757234989189189",
-        "name": "blink_perf.layout/word-break-break-word.html"
-    },
-    {
-        "duration": "2.7687943729729723",
-        "name": "blink_perf.layout/word-wrap-break-word.html"
-    },
-    {
-        "duration": "9.301432918918918",
-        "name": "blink_perf.owp_storage/blob-perf-files.html"
-    },
-    {
-        "duration": "8.45514506756757",
-        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
-    },
-    {
-        "duration": "7.125718975675675",
-        "name": "blink_perf.owp_storage/blob-perf-shm.html"
-    },
-    {
-        "duration": "8.435046945945947",
-        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
-    },
-    {
-        "duration": "8.470627743243245",
-        "name": "blink_perf.owp_storage/idb-load-docs.html"
-    },
-    {
-        "duration": "9.216856319444442",
-        "name": "blink_perf.paint/appending-text.html"
-    },
-    {
-        "duration": "12.655533097222218",
-        "name": "blink_perf.paint/color-changes.html"
-    },
-    {
-        "duration": "11.927033291666666",
-        "name": "blink_perf.paint/complex-content-slow-scroll.html"
-    },
-    {
-        "duration": "9.665613597222219",
-        "name": "blink_perf.paint/containment-resize.html"
-    },
-    {
-        "duration": "10.340964111111115",
-        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
-    },
-    {
-        "duration": "11.367298347222224",
-        "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html"
-    },
-    {
-        "duration": "8.906942597222223",
-        "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html"
-    },
-    {
-        "duration": "11.895780236111108",
-        "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html"
-    },
-    {
-        "duration": "10.064014555555557",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html"
-    },
-    {
-        "duration": "10.566386875000001",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html"
-    },
-    {
-        "duration": "8.681112861111112",
-        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
-    },
-    {
-        "duration": "10.917510569444442",
-        "name": "blink_perf.paint/large-table-repaint.html"
-    },
-    {
-        "duration": "8.373493708333335",
-        "name": "blink_perf.paint/move-text-with-mask.html"
-    },
-    {
-        "duration": "10.106495972222222",
-        "name": "blink_perf.paint/paint-offset-changes.html"
-    },
-    {
-        "duration": "15.181958861111111",
-        "name": "blink_perf.paint/transform-changes.html"
-    },
-    {
-        "duration": "9.512041375",
-        "name": "blink_perf.parser/css-parser-yui.html"
-    },
-    {
-        "duration": "6.748737833333332",
-        "name": "blink_perf.parser/html-parser-threaded.html"
-    },
-    {
-        "duration": "6.573137105555556",
-        "name": "blink_perf.parser/html-parser.html"
-    },
-    {
-        "duration": "33.04385908333333",
-        "name": "blink_perf.parser/html5-full-render.html"
-    },
-    {
-        "duration": "7.185502672222223",
-        "name": "blink_perf.parser/iframe-append-remove.html"
-    },
-    {
-        "duration": "7.405465636111111",
-        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
-    },
-    {
-        "duration": "7.332257600000001",
-        "name": "blink_perf.parser/innerHTML-setter.html"
-    },
-    {
-        "duration": "7.317969166666667",
-        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
-    },
-    {
-        "duration": "7.325370336111113",
-        "name": "blink_perf.parser/query-selector-all-attribute.html"
-    },
-    {
-        "duration": "7.211272419444443",
-        "name": "blink_perf.parser/query-selector-all-class-deep.html"
-    },
-    {
-        "duration": "8.551177138888887",
-        "name": "blink_perf.parser/query-selector-all-class-first.html"
-    },
-    {
-        "duration": "7.416076338888889",
-        "name": "blink_perf.parser/query-selector-all-class-last.html"
-    },
-    {
-        "duration": "7.5717231722222245",
-        "name": "blink_perf.parser/query-selector-all-class.html"
-    },
-    {
-        "duration": "7.2301646277777785",
-        "name": "blink_perf.parser/query-selector-all-deep.html"
-    },
-    {
-        "duration": "8.756113291666667",
-        "name": "blink_perf.parser/query-selector-all-first.html"
-    },
-    {
-        "duration": "8.812626027777776",
-        "name": "blink_perf.parser/query-selector-all-id-deep.html"
-    },
-    {
-        "duration": "8.537789972222221",
-        "name": "blink_perf.parser/query-selector-all-id-first.html"
-    },
-    {
-        "duration": "8.933691416666667",
-        "name": "blink_perf.parser/query-selector-all-id-last.html"
-    },
-    {
-        "duration": "7.1728614916666675",
-        "name": "blink_perf.parser/query-selector-all-last.html"
-    },
-    {
-        "duration": "7.275198877777778",
-        "name": "blink_perf.parser/query-selector-deep.html"
-    },
-    {
-        "duration": "6.984518122222223",
-        "name": "blink_perf.parser/query-selector-first.html"
-    },
-    {
-        "duration": "7.022112513888889",
-        "name": "blink_perf.parser/query-selector-id-deep.html"
-    },
-    {
-        "duration": "7.5036327722222245",
-        "name": "blink_perf.parser/query-selector-id-last.html"
-    },
-    {
-        "duration": "7.154861838888889",
-        "name": "blink_perf.parser/query-selector-last.html"
-    },
-    {
-        "duration": "6.663223386111112",
-        "name": "blink_perf.parser/simple-url.html"
-    },
-    {
-        "duration": "7.644716238888886",
-        "name": "blink_perf.parser/textarea-parsing.html"
-    },
-    {
-        "duration": "7.425186116666669",
-        "name": "blink_perf.parser/tiny-innerHTML.html"
-    },
-    {
-        "duration": "8.504079638888888",
-        "name": "blink_perf.parser/url-parser.html"
-    },
-    {
-        "duration": "7.182861388888891",
-        "name": "blink_perf.parser/xml-parser.html"
-    },
-    {
-        "duration": "4.129536983783783",
-        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
-    },
-    {
-        "duration": "1.6907527594594591",
-        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
-    },
-    {
-        "duration": "1.752588989189189",
-        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
-    },
-    {
-        "duration": "1.3414538891891898",
-        "name": "blink_perf.shadow_dom/shadow-style-share.html"
-    },
-    {
-        "duration": "1.5166720351351348",
-        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
-    },
-    {
-        "duration": "1.5316037594594591",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html"
-    },
-    {
-        "duration": "1.8243143216216213",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html"
-    },
-    {
-        "duration": "2.6161963243243243",
-        "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html"
-    },
-    {
-        "duration": "2.7664721378378374",
-        "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html"
-    },
-    {
-        "duration": "1.5208932864864866",
-        "name": "blink_perf.shadow_dom/v0-content-reprojection.html"
-    },
-    {
-        "duration": "1.3961794513513512",
-        "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html"
-    },
-    {
-        "duration": "1.3234779783783786",
-        "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html"
-    },
-    {
-        "duration": "1.5454668972972971",
-        "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html"
-    },
-    {
-        "duration": "1.348754854054054",
-        "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html"
-    },
-    {
-        "duration": "11.545008148648645",
-        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
-    },
-    {
-        "duration": "1.3032808945945944",
-        "name": "blink_perf.shadow_dom/v1-distribution.html"
-    },
-    {
-        "duration": "1.2824134918918917",
-        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
-    },
-    {
-        "duration": "11.490774027027026",
-        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
-    },
-    {
-        "duration": "22.191232567567567",
-        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
-    },
-    {
-        "duration": "1.286741754054054",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
-    },
-    {
-        "duration": "1.2680600459459455",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
-    },
-    {
-        "duration": "1.5736437054054058",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
-    },
-    {
-        "duration": "1.2952796189189189",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "1.3033758486486484",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "1.3788280459459463",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
-    },
-    {
-        "duration": "1.2879160513513515",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "1.3009531621621624",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "1.2828242027027028",
-        "name": "blink_perf.shadow_dom/v1-slot-append.html"
-    },
-    {
-        "duration": "2.2693072054054046",
-        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
-    },
-    {
-        "duration": "2.2700022459459452",
-        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
-    },
-    {
-        "duration": "1.2846065432432434",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
-    },
-    {
-        "duration": "1.310353018918919",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
-    },
-    {
-        "duration": "3.601881424324324",
-        "name": "blink_perf.svg/AzLizardBenjiPark.html"
-    },
-    {
-        "duration": "2.477357678378379",
-        "name": "blink_perf.svg/Bamboo.html"
-    },
-    {
-        "duration": "1.5371056891891888",
-        "name": "blink_perf.svg/Cactus.html"
-    },
-    {
-        "duration": "1.528599391891892",
-        "name": "blink_perf.svg/Cowboy.html"
-    },
-    {
-        "duration": "3.7703578",
-        "name": "blink_perf.svg/Cowboy_transform.html"
-    },
-    {
-        "duration": "1.3876730162162165",
-        "name": "blink_perf.svg/CrawFishGanson.html"
-    },
-    {
-        "duration": "1.495045794594595",
-        "name": "blink_perf.svg/Debian.html"
-    },
-    {
-        "duration": "1.3357924324324328",
-        "name": "blink_perf.svg/DropsOnABlade.html"
-    },
-    {
-        "duration": "1.3449378729729728",
-        "name": "blink_perf.svg/FlowerFromMyGarden.html"
-    },
-    {
-        "duration": "1.4629230729729734",
-        "name": "blink_perf.svg/FoodLeifLodahl.html"
-    },
-    {
-        "duration": "1.489532013513514",
-        "name": "blink_perf.svg/France.html"
-    },
-    {
-        "duration": "1.3387789810810808",
-        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
-    },
-    {
-        "duration": "1.5533717513513512",
-        "name": "blink_perf.svg/GearFlowers.html"
-    },
-    {
-        "duration": "1.4580355243243244",
-        "name": "blink_perf.svg/HarveyRayner.html"
-    },
-    {
-        "duration": "1.371933564864865",
-        "name": "blink_perf.svg/HereGear.html"
-    },
-    {
-        "duration": "2.76618225945946",
-        "name": "blink_perf.svg/MtSaintHelens.html"
-    },
-    {
-        "duration": "1.3017238405405407",
-        "name": "blink_perf.svg/Samurai.html"
-    },
-    {
-        "duration": "28.654858540540534",
-        "name": "blink_perf.svg/SierpinskiCarpet.html"
-    },
-    {
-        "duration": "2.258932886486486",
-        "name": "blink_perf.svg/SvgCubics.html"
-    },
-    {
-        "duration": "1.7122763189189187",
-        "name": "blink_perf.svg/SvgHitTesting.html"
-    },
-    {
-        "duration": "7.811848689189188",
-        "name": "blink_perf.svg/SvgNestedUse.html"
-    },
-    {
-        "duration": "1.4791418675675676",
-        "name": "blink_perf.svg/UnderTheSee.html"
-    },
-    {
-        "duration": "1.6314424054054057",
-        "name": "blink_perf.svg/WorldIso.html"
-    },
-    {
-        "duration": "2.4628368351351355",
-        "name": "blink_perf.svg/Worldcup.html"
-    },
-    {
-        "duration": "33.65733644444444",
-        "name": "dromaeo/http://dromaeo.com?dom-attr"
-    },
-    {
-        "duration": "33.51815622222221",
-        "name": "dromaeo/http://dromaeo.com?dom-modify"
-    },
-    {
-        "duration": "46.62220277777778",
-        "name": "dromaeo/http://dromaeo.com?dom-query"
-    },
-    {
-        "duration": "27.12640508333333",
-        "name": "dromaeo/http://dromaeo.com?dom-traverse"
-    },
-    {
-        "duration": "8.361888986486488",
-        "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "1.3292940459459457",
-        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "1.3782127694444446",
-        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "185.65575135135137",
-        "name": "jetstream/http://browserbench.org/JetStream/"
-    },
-    {
-        "duration": "23.115383055555558",
-        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
-    },
-    {
-        "duration": "61.24238319696969",
-        "name": "loading.desktop/24h"
-    },
-    {
-        "duration": "26.609354250000003",
-        "name": "loading.desktop/24h_cold"
-    },
-    {
-        "duration": "34.68846325",
-        "name": "loading.desktop/24h_warm"
-    },
-    {
-        "duration": "100.35381830303032",
-        "name": "loading.desktop/AirBnB"
-    },
-    {
-        "duration": "39.8633885",
-        "name": "loading.desktop/AirBnB_cold"
-    },
-    {
-        "duration": "59.80281574999999",
-        "name": "loading.desktop/AirBnB_warm"
-    },
-    {
-        "duration": "48.434719666666666",
-        "name": "loading.desktop/Aljayyash"
-    },
-    {
-        "duration": "22.0845525",
-        "name": "loading.desktop/Aljayyash_cold"
-    },
-    {
-        "duration": "26.395913375",
-        "name": "loading.desktop/Aljayyash_warm"
-    },
-    {
-        "duration": "95.00097803030302",
-        "name": "loading.desktop/AllRecipes"
-    },
-    {
-        "duration": "36.6232995",
-        "name": "loading.desktop/AllRecipes_cold"
-    },
-    {
-        "duration": "57.965820750000006",
-        "name": "loading.desktop/AllRecipes_warm"
-    },
-    {
-        "duration": "104.26652406060606",
-        "name": "loading.desktop/ArsTechnica"
-    },
-    {
-        "duration": "39.51999525",
-        "name": "loading.desktop/ArsTechnica_cold"
-    },
-    {
-        "duration": "58.807424749999996",
-        "name": "loading.desktop/ArsTechnica_warm"
-    },
-    {
-        "duration": "48.99256522727273",
-        "name": "loading.desktop/Baidu"
-    },
-    {
-        "duration": "21.82160375",
-        "name": "loading.desktop/Baidu_cold"
-    },
-    {
-        "duration": "27.15095225",
-        "name": "loading.desktop/Baidu_warm"
-    },
-    {
-        "duration": "75.53524006060607",
-        "name": "loading.desktop/Bhaskar"
-    },
-    {
-        "duration": "31.567435250000003",
-        "name": "loading.desktop/Bhaskar_cold"
-    },
-    {
-        "duration": "43.92694425",
-        "name": "loading.desktop/Bhaskar_warm"
-    },
-    {
-        "duration": "62.77154201515152",
-        "name": "loading.desktop/Chosun"
-    },
-    {
-        "duration": "26.994935625000004",
-        "name": "loading.desktop/Chosun_cold"
-    },
-    {
-        "duration": "34.923154749999995",
-        "name": "loading.desktop/Chosun_warm"
-    },
-    {
-        "duration": "56.80244531818182",
-        "name": "loading.desktop/Colorado.edu"
-    },
-    {
-        "duration": "24.66709075",
-        "name": "loading.desktop/Colorado.edu_cold"
-    },
-    {
-        "duration": "32.03421675",
-        "name": "loading.desktop/Colorado.edu_warm"
-    },
-    {
-        "duration": "60.261231318181814",
-        "name": "loading.desktop/Danawa"
-    },
-    {
-        "duration": "26.23972375",
-        "name": "loading.desktop/Danawa_cold"
-    },
-    {
-        "duration": "34.0827965",
-        "name": "loading.desktop/Danawa_warm"
-    },
-    {
-        "duration": "56.900626166666676",
-        "name": "loading.desktop/Daum"
-    },
-    {
-        "duration": "24.9109605",
-        "name": "loading.desktop/Daum_cold"
-    },
-    {
-        "duration": "31.640629000000004",
-        "name": "loading.desktop/Daum_warm"
-    },
-    {
-        "duration": "65.33932131818182",
-        "name": "loading.desktop/Donga"
-    },
-    {
-        "duration": "27.593401500000002",
-        "name": "loading.desktop/Donga_cold"
-    },
-    {
-        "duration": "36.722539499999996",
-        "name": "loading.desktop/Donga_warm"
-    },
-    {
-        "duration": "88.18139448484847",
-        "name": "loading.desktop/Economist"
-    },
-    {
-        "duration": "35.23546375",
-        "name": "loading.desktop/Economist_cold"
-    },
-    {
-        "duration": "52.71560624999999",
-        "name": "loading.desktop/Economist_warm"
-    },
-    {
-        "duration": "149.28064193939392",
-        "name": "loading.desktop/Elmundo"
-    },
-    {
-        "duration": "39.702808000000005",
-        "name": "loading.desktop/Elmundo_cold"
-    },
-    {
-        "duration": "108.33241724999999",
-        "name": "loading.desktop/Elmundo_warm"
-    },
-    {
-        "duration": "58.96177848484848",
-        "name": "loading.desktop/FC2Blog"
-    },
-    {
-        "duration": "25.633494",
-        "name": "loading.desktop/FC2Blog_cold"
-    },
-    {
-        "duration": "33.11414550000001",
-        "name": "loading.desktop/FC2Blog_warm"
-    },
-    {
-        "duration": "65.6928483030303",
-        "name": "loading.desktop/FIFA"
-    },
-    {
-        "duration": "28.18330075",
-        "name": "loading.desktop/FIFA_cold"
-    },
-    {
-        "duration": "37.11194175",
-        "name": "loading.desktop/FIFA_warm"
-    },
-    {
-        "duration": "77.47790256060604",
-        "name": "loading.desktop/FarsNews"
-    },
-    {
-        "duration": "44.536587374999996",
-        "name": "loading.desktop/FarsNews_cold"
-    },
-    {
-        "duration": "32.916211",
-        "name": "loading.desktop/FarsNews_warm"
-    },
-    {
-        "duration": "60.257690696969696",
-        "name": "loading.desktop/Flickr"
-    },
-    {
-        "duration": "26.009117999999997",
-        "name": "loading.desktop/Flickr_cold"
-    },
-    {
-        "duration": "34.23535",
-        "name": "loading.desktop/Flickr_warm"
-    },
-    {
-        "duration": "60.680559954545444",
-        "name": "loading.desktop/FlipKart"
-    },
-    {
-        "duration": "25.740063375",
-        "name": "loading.desktop/FlipKart_cold"
-    },
-    {
-        "duration": "34.8121215",
-        "name": "loading.desktop/FlipKart_warm"
-    },
-    {
-        "duration": "49.46483409090908",
-        "name": "loading.desktop/Free.fr"
-    },
-    {
-        "duration": "21.983998624999998",
-        "name": "loading.desktop/Free.fr_cold"
-    },
-    {
-        "duration": "27.00177125",
-        "name": "loading.desktop/Free.fr_warm"
-    },
-    {
-        "duration": "46.34730078787879",
-        "name": "loading.desktop/HTML5Rocks"
-    },
-    {
-        "duration": "21.176502375",
-        "name": "loading.desktop/HTML5Rocks_cold"
-    },
-    {
-        "duration": "24.853324",
-        "name": "loading.desktop/HTML5Rocks_warm"
-    },
-    {
-        "duration": "48.184653999999995",
-        "name": "loading.desktop/Haraj"
-    },
-    {
-        "duration": "21.55604175",
-        "name": "loading.desktop/Haraj_cold"
-    },
-    {
-        "duration": "26.341018",
-        "name": "loading.desktop/Haraj_warm"
-    },
-    {
-        "duration": "62.25722783333333",
-        "name": "loading.desktop/HatenaBookmark"
-    },
-    {
-        "duration": "27.342886124999996",
-        "name": "loading.desktop/HatenaBookmark_cold"
-    },
-    {
-        "duration": "35.31977875",
-        "name": "loading.desktop/HatenaBookmark_warm"
-    },
-    {
-        "duration": "62.712117469696985",
-        "name": "loading.desktop/IGN"
-    },
-    {
-        "duration": "26.5488225",
-        "name": "loading.desktop/IGN_cold"
-    },
-    {
-        "duration": "35.827023000000004",
-        "name": "loading.desktop/IGN_warm"
-    },
-    {
-        "duration": "68.5413376818182",
-        "name": "loading.desktop/IMDB"
-    },
-    {
-        "duration": "28.758691125",
-        "name": "loading.desktop/IMDB_cold"
-    },
-    {
-        "duration": "39.6640675",
-        "name": "loading.desktop/IMDB_warm"
-    },
-    {
-        "duration": "61.50407990909092",
-        "name": "loading.desktop/IndiaTimes"
-    },
-    {
-        "duration": "26.15056925",
-        "name": "loading.desktop/IndiaTimes_cold"
-    },
-    {
-        "duration": "35.39860675",
-        "name": "loading.desktop/IndiaTimes_warm"
-    },
-    {
-        "duration": "66.91351901515152",
-        "name": "loading.desktop/Kakaku"
-    },
-    {
-        "duration": "28.759978874999998",
-        "name": "loading.desktop/Kakaku_cold"
-    },
-    {
-        "duration": "38.470656250000005",
-        "name": "loading.desktop/Kakaku_warm"
-    },
-    {
-        "duration": "106.06202127272729",
-        "name": "loading.desktop/Kenh14"
-    },
-    {
-        "duration": "43.595248",
-        "name": "loading.desktop/Kenh14_cold"
-    },
-    {
-        "duration": "61.97051733333333",
-        "name": "loading.desktop/Kenh14_warm"
-    },
-    {
-        "duration": "57.11001762121212",
-        "name": "loading.desktop/Mercadolivre"
-    },
-    {
-        "duration": "29.73029125",
-        "name": "loading.desktop/Mercadolivre_cold"
-    },
-    {
-        "duration": "31.797325",
-        "name": "loading.desktop/Mercadolivre_warm"
-    },
-    {
-        "duration": "55.76981349999999",
-        "name": "loading.desktop/Naver"
-    },
-    {
-        "duration": "28.94473325",
-        "name": "loading.desktop/Naver_cold"
-    },
-    {
-        "duration": "30.98264525",
-        "name": "loading.desktop/Naver_warm"
-    },
-    {
-        "duration": "50.91436474242425",
-        "name": "loading.desktop/Orange"
-    },
-    {
-        "duration": "22.584999375",
-        "name": "loading.desktop/Orange_cold"
-    },
-    {
-        "duration": "28.311454750000003",
-        "name": "loading.desktop/Orange_warm"
-    },
-    {
-        "duration": "61.6514582121212",
-        "name": "loading.desktop/Pantip"
-    },
-    {
-        "duration": "26.364679875",
-        "name": "loading.desktop/Pantip_cold"
-    },
-    {
-        "duration": "35.01573775",
-        "name": "loading.desktop/Pantip_warm"
-    },
-    {
-        "duration": "66.6353043030303",
-        "name": "loading.desktop/PremierLeague"
-    },
-    {
-        "duration": "46.127203249999994",
-        "name": "loading.desktop/PremierLeague_cold"
-    },
-    {
-        "duration": "37.68718175",
-        "name": "loading.desktop/PremierLeague_warm"
-    },
-    {
-        "duration": "73.72898824242425",
-        "name": "loading.desktop/QQ"
-    },
-    {
-        "duration": "30.37399825",
-        "name": "loading.desktop/QQ_cold"
-    },
-    {
-        "duration": "42.74532175",
-        "name": "loading.desktop/QQ_warm"
-    },
-    {
-        "duration": "61.65894442424243",
-        "name": "loading.desktop/REI"
-    },
-    {
-        "duration": "26.728480249999997",
-        "name": "loading.desktop/REI_cold"
-    },
-    {
-        "duration": "34.693574749999996",
-        "name": "loading.desktop/REI_warm"
-    },
-    {
-        "duration": "52.94150192424244",
-        "name": "loading.desktop/Ruten"
-    },
-    {
-        "duration": "23.2267255",
-        "name": "loading.desktop/Ruten_cold"
-    },
-    {
-        "duration": "29.309852750000005",
-        "name": "loading.desktop/Ruten_warm"
-    },
-    {
-        "duration": "74.2627371060606",
-        "name": "loading.desktop/Sina"
-    },
-    {
-        "duration": "30.070321",
-        "name": "loading.desktop/Sina_cold"
-    },
-    {
-        "duration": "44.30499775",
-        "name": "loading.desktop/Sina_warm"
-    },
-    {
-        "duration": "73.88751783333333",
-        "name": "loading.desktop/Taobao"
-    },
-    {
-        "duration": "30.336665",
-        "name": "loading.desktop/Taobao_cold"
-    },
-    {
-        "duration": "43.3539945",
-        "name": "loading.desktop/Taobao_warm"
-    },
-    {
-        "duration": "76.80970578787878",
-        "name": "loading.desktop/TheOnion"
-    },
-    {
-        "duration": "29.97546525",
-        "name": "loading.desktop/TheOnion_cold"
-    },
-    {
-        "duration": "46.35599225",
-        "name": "loading.desktop/TheOnion_warm"
-    },
-    {
-        "duration": "76.172503",
-        "name": "loading.desktop/TheVerge"
-    },
-    {
-        "duration": "32.615061",
-        "name": "loading.desktop/TheVerge_cold"
-    },
-    {
-        "duration": "44.19115175",
-        "name": "loading.desktop/TheVerge_warm"
-    },
-    {
-        "duration": "81.53529103030301",
-        "name": "loading.desktop/TicketMaster"
-    },
-    {
-        "duration": "33.9646275",
-        "name": "loading.desktop/TicketMaster_cold"
-    },
-    {
-        "duration": "47.156547",
-        "name": "loading.desktop/TicketMaster_warm"
-    },
-    {
-        "duration": "111.14967130303032",
-        "name": "loading.desktop/Vietnamnet"
-    },
-    {
-        "duration": "45.4410425",
-        "name": "loading.desktop/Vietnamnet_cold"
-    },
-    {
-        "duration": "63.988094000000004",
-        "name": "loading.desktop/Vietnamnet_warm"
-    },
-    {
-        "duration": "80.5152116969697",
-        "name": "loading.desktop/Vnexpress"
-    },
-    {
-        "duration": "32.267904",
-        "name": "loading.desktop/Vnexpress_cold"
-    },
-    {
-        "duration": "46.734067",
-        "name": "loading.desktop/Vnexpress_warm"
-    },
-    {
-        "duration": "94.50380663636363",
-        "name": "loading.desktop/Walgreens"
-    },
-    {
-        "duration": "49.19971699999999",
-        "name": "loading.desktop/Walgreens_cold"
-    },
-    {
-        "duration": "71.0579325",
-        "name": "loading.desktop/Walgreens_warm"
-    },
-    {
-        "duration": "51.258354924242425",
-        "name": "loading.desktop/Yandex"
-    },
-    {
-        "duration": "22.706599",
-        "name": "loading.desktop/Yandex_cold"
-    },
-    {
-        "duration": "28.453973249999997",
-        "name": "loading.desktop/Yandex_warm"
-    },
-    {
-        "duration": "75.14793977272724",
-        "name": "loading.desktop/amazon.co.jp"
-    },
-    {
-        "duration": "30.711020125",
-        "name": "loading.desktop/amazon.co.jp_cold"
-    },
-    {
-        "duration": "44.1330475",
-        "name": "loading.desktop/amazon.co.jp_warm"
-    },
-    {
-        "duration": "54.25589498484847",
-        "name": "loading.desktop/ja.wikipedia"
-    },
-    {
-        "duration": "23.789327999999998",
-        "name": "loading.desktop/ja.wikipedia_cold"
-    },
-    {
-        "duration": "30.261936750000004",
-        "name": "loading.desktop/ja.wikipedia_warm"
-    },
-    {
-        "duration": "89.06708133333333",
-        "name": "loading.desktop/money.cnn"
-    },
-    {
-        "duration": "36.1251615",
-        "name": "loading.desktop/money.cnn_cold"
-    },
-    {
-        "duration": "52.34578625",
-        "name": "loading.desktop/money.cnn_warm"
-    },
-    {
-        "duration": "56.024452606060606",
-        "name": "loading.desktop/ru.wikipedia"
-    },
-    {
-        "duration": "24.687198375",
-        "name": "loading.desktop/ru.wikipedia_cold"
-    },
-    {
-        "duration": "30.928128374999996",
-        "name": "loading.desktop/ru.wikipedia_warm"
-    },
-    {
-        "duration": "88.83295846875",
-        "name": "loading.desktop/uol.com.br"
-    },
-    {
-        "duration": "34.67761675",
-        "name": "loading.desktop/uol.com.br_cold"
-    },
-    {
-        "duration": "51.97967500000001",
-        "name": "loading.desktop/uol.com.br_warm"
-    },
-    {
-        "duration": "62.0393123030303",
-        "name": "loading.desktop/yahoo.co.jp"
-    },
-    {
-        "duration": "26.730795",
-        "name": "loading.desktop/yahoo.co.jp_cold"
-    },
-    {
-        "duration": "35.270484249999996",
-        "name": "loading.desktop/yahoo.co.jp_warm"
-    },
-    {
-        "duration": "13.546166472972972",
-        "name": "media.desktop/mse.html?media=aac_audio.mp4"
-    },
-    {
-        "duration": "14.183767716216217",
-        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
-    },
-    {
-        "duration": "14.301926864864862",
-        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true"
-    },
-    {
-        "duration": "12.953953891891896",
-        "name": "media.desktop/mse.html?media=h264_video.mp4"
-    },
-    {
-        "duration": "19.746698729729736",
-        "name": "media.desktop/video.html?src=crowd.ogg&type=audio"
-    },
-    {
-        "duration": "21.365133108108115",
-        "name": "media.desktop/video.html?src=crowd1080.mp4"
-    },
-    {
-        "duration": "21.022305810810813",
-        "name": "media.desktop/video.html?src=crowd1080.webm"
-    },
-    {
-        "duration": "19.765176324324333",
-        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
-    },
-    {
-        "duration": "11.540297121621618",
-        "name": "media.desktop/video.html?src=crowd1080_vp9.webm&seek"
-    },
-    {
-        "duration": "19.562542864864866",
-        "name": "media.desktop/video.html?src=crowd720_vp9.webm"
-    },
-    {
-        "duration": "23.094548918918928",
-        "name": "media.desktop/video.html?src=garden2_10s.mp4"
-    },
-    {
-        "duration": "15.273023432432435",
-        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
-    },
-    {
-        "duration": "20.62342540540541",
-        "name": "media.desktop/video.html?src=garden2_10s.webm"
-    },
-    {
-        "duration": "11.833947",
-        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
-    },
-    {
-        "duration": "16.475866459459457",
-        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
-    },
-    {
-        "duration": "26.440528108108115",
-        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
-    },
-    {
-        "duration": "26.52880005405406",
-        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
-    },
-    {
-        "duration": "9.712313905405404",
-        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
-    },
-    {
-        "duration": "28.09863002702703",
-        "name": "media.desktop/video.html?src=tulip2.mp4"
-    },
-    {
-        "duration": "29.758492648648648",
-        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
-    },
-    {
-        "duration": "10.879628324324326",
-        "name": "media.desktop/video.html?src=tulip2.mp4&seek"
-    },
-    {
-        "duration": "26.480524621621623",
-        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
-    },
-    {
-        "duration": "9.794467418918922",
-        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
-    },
-    {
-        "duration": "28.064750162162166",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
-    },
-    {
-        "duration": "21.576918972972976",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
-    },
-    {
-        "duration": "12.959411324324323",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm&seek"
-    },
-    {
-        "duration": "35.65793040540541",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm_Regular-3G"
-    },
-    {
-        "duration": "26.49245267567568",
-        "name": "media.desktop/video.html?src=tulip2.wav&type=audio"
-    },
-    {
-        "duration": "9.744404337837835",
-        "name": "media.desktop/video.html?src=tulip2.wav&type=audio&seek"
-    },
-    {
-        "duration": "85.35552208163267",
-        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
-    },
-    {
-        "duration": "83.79490310810812",
-        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
-    },
-    {
-        "duration": "87.21124710810813",
-        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
-    },
-    {
-        "duration": "85.19446705405404",
-        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
-    },
-    {
-        "duration": "89.21607539130436",
-        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
-    },
-    {
-        "duration": "85.69868876086957",
-        "name": "memory.desktop/TrivialGifPageSharedPageState"
-    },
-    {
-        "duration": "85.31447586486483",
-        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
-    },
-    {
-        "duration": "85.78875140540542",
-        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
-    },
-    {
-        "duration": "152.99464102040815",
-        "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "150.3075844897959",
-        "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "41.32123940816328",
-        "name": "octane/http://chromium.github.io/octane/index.html?auto=1"
-    },
-    {
-        "duration": "67.11337526530612",
-        "name": "oortonline_tbmv2/http://oortonline.gl/#run"
-    },
-    {
-        "duration": "40.67453718367347",
-        "name": "power.desktop/TrivialAnimationPageSharedPageState"
-    },
-    {
-        "duration": "39.543144285714284",
-        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
-    },
-    {
-        "duration": "41.19162124489796",
-        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
-    },
-    {
-        "duration": "40.61044863265307",
-        "name": "power.desktop/TrivialCanvasPageSharedPageState"
-    },
-    {
-        "duration": "41.58202597959183",
-        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
-    },
-    {
-        "duration": "40.03804755102042",
-        "name": "power.desktop/TrivialGifPageSharedPageState"
-    },
-    {
-        "duration": "40.326125979591836",
-        "name": "power.desktop/TrivialScrollingPageSharedPageState"
-    },
-    {
-        "duration": "40.971883122448986",
-        "name": "power.desktop/TrivialWebGLPageSharedPageState"
-    },
-    {
-        "duration": "142.33957918367346",
-        "name": "power.desktop/abcnews"
-    },
-    {
-        "duration": "40.396150428571424",
-        "name": "power.desktop/indiatimes"
-    },
-    {
-        "duration": "41.36044655102042",
-        "name": "power.desktop/instagram"
-    },
-    {
-        "duration": "40.57478689795918",
-        "name": "power.desktop/microsoft"
-    },
-    {
-        "duration": "42.91606008163266",
-        "name": "power.desktop/sina"
-    },
-    {
-        "duration": "41.51667036734694",
-        "name": "power.desktop/slideshare"
-    },
-    {
-        "duration": "52.5630066122449",
-        "name": "power.desktop/uol"
-    },
-    {
-        "duration": "4.700836240816327",
-        "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html"
-    },
-    {
-        "duration": "8.82076123469388",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
-    },
-    {
-        "duration": "5.7083416183673465",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
-    },
-    {
-        "duration": "7.067381697959185",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
-    },
-    {
-        "duration": "7.4579207918367345",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
-    },
-    {
-        "duration": "5.654540218367345",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
-    },
-    {
-        "duration": "13.741128979591842",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
-    },
-    {
-        "duration": "5.134179567346939",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
-    },
-    {
-        "duration": "6.5971306428571435",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
-    },
-    {
-        "duration": "6.092594157142856",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
-    },
-    {
-        "duration": "5.007687726530612",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
-    },
-    {
-        "duration": "5.138417430612243",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
-    },
-    {
-        "duration": "6.494704285714285",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
-    },
-    {
-        "duration": "12.812809806122447",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
-    },
-    {
-        "duration": "5.240346769387756",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
-    },
-    {
-        "duration": "4.473294459183673",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
-    },
-    {
-        "duration": "23.622838224489794",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
-    },
-    {
-        "duration": "10.055859244897961",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
-    },
-    {
-        "duration": "10.720062530612246",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
-    },
-    {
-        "duration": "6.39367384897959",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
-    },
-    {
-        "duration": "5.320809336734695",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
-    },
-    {
-        "duration": "16.8936732244898",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
-    },
-    {
-        "duration": "94.3183928163265",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
-    },
-    {
-        "duration": "74.39839906122451",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
-    },
-    {
-        "duration": "18.355625551020406",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
-    },
-    {
-        "duration": "17.975276524999998",
-        "name": "rendering.desktop/amazon_pinch"
-    },
-    {
-        "duration": "23.16154230612245",
-        "name": "rendering.desktop/analog_clock_svg"
-    },
-    {
-        "duration": "28.55314848780488",
-        "name": "rendering.desktop/animometer_webgl"
-    },
-    {
-        "duration": "45.86813112195121",
-        "name": "rendering.desktop/aquarium"
-    },
-    {
-        "duration": "33.50111680487805",
-        "name": "rendering.desktop/aquarium_20k"
-    },
-    {
-        "duration": "28.384601078947366",
-        "name": "rendering.desktop/background_color_animation"
-    },
-    {
-        "duration": "26.37733989473684",
-        "name": "rendering.desktop/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "25.83044245454545",
-        "name": "rendering.desktop/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "51.87206268181817",
-        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
-    },
-    {
-        "duration": "30.191500159090914",
-        "name": "rendering.desktop/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "29.80668152272727",
-        "name": "rendering.desktop/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "30.21040629545454",
-        "name": "rendering.desktop/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "32.58562829545454",
-        "name": "rendering.desktop/balls_javascript_canvas"
-    },
-    {
-        "duration": "24.356124568181816",
-        "name": "rendering.desktop/balls_javascript_css"
-    },
-    {
-        "duration": "30.21438495454545",
-        "name": "rendering.desktop/balls_svg_animations"
-    },
-    {
-        "duration": "18.556416536585363",
-        "name": "rendering.desktop/blob"
-    },
-    {
-        "duration": "29.91819418181819",
-        "name": "rendering.desktop/blogspot"
-    },
-    {
-        "duration": "25.455359475",
-        "name": "rendering.desktop/blogspot_pinch"
-    },
-    {
-        "duration": "15.42708115909091",
-        "name": "rendering.desktop/booking.com"
-    },
-    {
-        "duration": "20.23266395",
-        "name": "rendering.desktop/booking_pinch"
-    },
-    {
-        "duration": "14.491325204545454",
-        "name": "rendering.desktop/bouncing_balls_15"
-    },
-    {
-        "duration": "17.267492977272727",
-        "name": "rendering.desktop/bouncing_balls_shadow"
-    },
-    {
-        "duration": "18.629296431818172",
-        "name": "rendering.desktop/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "22.571514750000002",
-        "name": "rendering.desktop/bouncing_gradient_circles"
-    },
-    {
-        "duration": "13.320596090909088",
-        "name": "rendering.desktop/bouncing_png_images"
-    },
-    {
-        "duration": "29.647513204545454",
-        "name": "rendering.desktop/bouncing_svg_images"
-    },
-    {
-        "duration": "17.50269685",
-        "name": "rendering.desktop/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "16.737423299999996",
-        "name": "rendering.desktop/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "14.196069999999997",
-        "name": "rendering.desktop/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "12.733653712499999",
-        "name": "rendering.desktop/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "11.553110737500003",
-        "name": "rendering.desktop/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "10.989627787500002",
-        "name": "rendering.desktop/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "10.707004475",
-        "name": "rendering.desktop/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "10.192577199999999",
-        "name": "rendering.desktop/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "10.013242075000003",
-        "name": "rendering.desktop/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "9.76069045",
-        "name": "rendering.desktop/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "33.676027113636366",
-        "name": "rendering.desktop/canvas_animation_no_clear"
-    },
-    {
-        "duration": "19.659105636363634",
-        "name": "rendering.desktop/canvas_arcs"
-    },
-    {
-        "duration": "16.899869272727276",
-        "name": "rendering.desktop/canvas_font_cycler"
-    },
-    {
-        "duration": "16.32997363636364",
-        "name": "rendering.desktop/canvas_lines"
-    },
-    {
-        "duration": "15.497935784090906",
-        "name": "rendering.desktop/canvas_to_blob"
-    },
-    {
-        "duration": "9.812634675",
-        "name": "rendering.desktop/cats_unscaled"
-    },
-    {
-        "duration": "8.350419927500003",
-        "name": "rendering.desktop/cats_viewport_width"
-    },
-    {
-        "duration": "19.49465725",
-        "name": "rendering.desktop/chip_tune"
-    },
-    {
-        "duration": "24.713657474999998",
-        "name": "rendering.desktop/cnn_pinch"
-    },
-    {
-        "duration": "42.67318575",
-        "name": "rendering.desktop/compositor_heavy_animation"
-    },
-    {
-        "duration": "19.239708136363635",
-        "name": "rendering.desktop/crafty_mind"
-    },
-    {
-        "duration": "24.462988704545452",
-        "name": "rendering.desktop/css_animations_many_keyframes"
-    },
-    {
-        "duration": "22.688228954545455",
-        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "23.392070000000004",
-        "name": "rendering.desktop/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "22.70420456818182",
-        "name": "rendering.desktop/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "22.71296654545455",
-        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "21.381449636363637",
-        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "25.666006295454544",
-        "name": "rendering.desktop/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "28.086869977272727",
-        "name": "rendering.desktop/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "29.2179701590909",
-        "name": "rendering.desktop/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "26.479824113636372",
-        "name": "rendering.desktop/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "27.74009861363637",
-        "name": "rendering.desktop/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "32.03057061363636",
-        "name": "rendering.desktop/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "30.527839250000003",
-        "name": "rendering.desktop/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "28.172829931818182",
-        "name": "rendering.desktop/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "23.4162694090909",
-        "name": "rendering.desktop/css_transitions_inline_style"
-    },
-    {
-        "duration": "23.61112190909091",
-        "name": "rendering.desktop/css_transitions_new_element"
-    },
-    {
-        "duration": "23.80110736363636",
-        "name": "rendering.desktop/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "25.087118613636367",
-        "name": "rendering.desktop/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "24.55790922727273",
-        "name": "rendering.desktop/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "23.733410863636358",
-        "name": "rendering.desktop/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "23.060220500000007",
-        "name": "rendering.desktop/css_transitions_style_element"
-    },
-    {
-        "duration": "29.719599022727277",
-        "name": "rendering.desktop/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "30.24195122727273",
-        "name": "rendering.desktop/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "30.16023202272727",
-        "name": "rendering.desktop/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "30.21957836363637",
-        "name": "rendering.desktop/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "23.528340545454544",
-        "name": "rendering.desktop/css_transitions_updating_class"
-    },
-    {
-        "duration": "20.18097959090909",
-        "name": "rendering.desktop/css_value_type_color"
-    },
-    {
-        "duration": "107.44096934090908",
-        "name": "rendering.desktop/css_value_type_filter"
-    },
-    {
-        "duration": "23.192229818181808",
-        "name": "rendering.desktop/css_value_type_length"
-    },
-    {
-        "duration": "22.596551409090907",
-        "name": "rendering.desktop/css_value_type_length_complex"
-    },
-    {
-        "duration": "21.092287840909094",
-        "name": "rendering.desktop/css_value_type_length_simple"
-    },
-    {
-        "duration": "22.507868954545447",
-        "name": "rendering.desktop/css_value_type_path"
-    },
-    {
-        "duration": "33.795705659090906",
-        "name": "rendering.desktop/css_value_type_shadow"
-    },
-    {
-        "duration": "23.155522613636354",
-        "name": "rendering.desktop/css_value_type_transform_complex"
-    },
-    {
-        "duration": "21.80320681818182",
-        "name": "rendering.desktop/css_value_type_transform_simple"
-    },
-    {
-        "duration": "21.368829853658536",
-        "name": "rendering.desktop/dynamic_cube_map"
-    },
-    {
-        "duration": "18.618831",
-        "name": "rendering.desktop/earth"
-    },
-    {
-        "duration": "14.263912011363631",
-        "name": "rendering.desktop/ebay"
-    },
-    {
-        "duration": "23.567609074999993",
-        "name": "rendering.desktop/ebay_pinch"
-    },
-    {
-        "duration": "19.495413613636362",
-        "name": "rendering.desktop/effect_games"
-    },
-    {
-        "duration": "16.219358386363634",
-        "name": "rendering.desktop/espn"
-    },
-    {
-        "duration": "23.39462425",
-        "name": "rendering.desktop/espn_pinch"
-    },
-    {
-        "duration": "26.128715263157897",
-        "name": "rendering.desktop/extra_large_texture_uploads"
-    },
-    {
-        "duration": "13.625264045454545",
-        "name": "rendering.desktop/facebook"
-    },
-    {
-        "duration": "20.279158024999994",
-        "name": "rendering.desktop/facebook_pinch"
-    },
-    {
-        "duration": "20.337158136363634",
-        "name": "rendering.desktop/fill_shapes"
-    },
-    {
-        "duration": "28.911240477272724",
-        "name": "rendering.desktop/filter_terrain_svg"
-    },
-    {
-        "duration": "15.55878127272727",
-        "name": "rendering.desktop/geo_apis"
-    },
-    {
-        "duration": "27.149211931818186",
-        "name": "rendering.desktop/gmail"
-    },
-    {
-        "duration": "23.062730825",
-        "name": "rendering.desktop/gmail_pinch"
-    },
-    {
-        "duration": "16.510170090909085",
-        "name": "rendering.desktop/google_calendar"
-    },
-    {
-        "duration": "21.415300275",
-        "name": "rendering.desktop/google_calendar_pinch"
-    },
-    {
-        "duration": "33.14746022727273",
-        "name": "rendering.desktop/google_docs"
-    },
-    {
-        "duration": "20.973684924999997",
-        "name": "rendering.desktop/google_image_pinch"
-    },
-    {
-        "duration": "20.382343272727272",
-        "name": "rendering.desktop/google_image_search"
-    },
-    {
-        "duration": "22.85558420454545",
-        "name": "rendering.desktop/google_plus"
-    },
-    {
-        "duration": "18.870574075",
-        "name": "rendering.desktop/google_search_pinch"
-    },
-    {
-        "duration": "13.13561473863637",
-        "name": "rendering.desktop/google_web_search"
-    },
-    {
-        "duration": "23.699090409090903",
-        "name": "rendering.desktop/guimark_vector_chart"
-    },
-    {
-        "duration": "18.30450644318182",
-        "name": "rendering.desktop/hakim"
-    },
-    {
-        "duration": "34.69866395454546",
-        "name": "rendering.desktop/ie_chalkboard"
-    },
-    {
-        "duration": "25.411876590909085",
-        "name": "rendering.desktop/ie_pirate_mark"
-    },
-    {
-        "duration": "17.686832409090908",
-        "name": "rendering.desktop/jarro_doverson"
-    },
-    {
-        "duration": "18.917812681818177",
-        "name": "rendering.desktop/kevs_3d"
-    },
-    {
-        "duration": "19.94233218181819",
-        "name": "rendering.desktop/keyframed_animations"
-    },
-    {
-        "duration": "32.07735463157895",
-        "name": "rendering.desktop/large_texture_uploads"
-    },
-    {
-        "duration": "15.77929897727273",
-        "name": "rendering.desktop/linkedin"
-    },
-    {
-        "duration": "18.333869975",
-        "name": "rendering.desktop/linkedin_pinch"
-    },
-    {
-        "duration": "21.55913781818182",
-        "name": "rendering.desktop/man_in_blue"
-    },
-    {
-        "duration": "25.414801249999996",
-        "name": "rendering.desktop/many_images"
-    },
-    {
-        "duration": "20.102914926829268",
-        "name": "rendering.desktop/many_planets_deep"
-    },
-    {
-        "duration": "19.18478509090909",
-        "name": "rendering.desktop/maps_move"
-    },
-    {
-        "duration": "36.27142370731709",
-        "name": "rendering.desktop/maps_perf_test"
-    },
-    {
-        "duration": "21.26951636842105",
-        "name": "rendering.desktop/medium_texture_uploads"
-    },
-    {
-        "duration": "17.670881818181822",
-        "name": "rendering.desktop/megi_dish"
-    },
-    {
-        "duration": "15.888128147727276",
-        "name": "rendering.desktop/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "28.890502022727272",
-        "name": "rendering.desktop/microsoft_fireflies"
-    },
-    {
-        "duration": "17.080909875000003",
-        "name": "rendering.desktop/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "17.13153517045454",
-        "name": "rendering.desktop/microsoft_snow"
-    },
-    {
-        "duration": "15.384685397727276",
-        "name": "rendering.desktop/microsoft_speed_reading"
-    },
-    {
-        "duration": "16.281234363636365",
-        "name": "rendering.desktop/microsoft_tweet_map"
-    },
-    {
-        "duration": "24.475988386363632",
-        "name": "rendering.desktop/microsoft_video_city"
-    },
-    {
-        "duration": "17.798353977272733",
-        "name": "rendering.desktop/microsoft_worker_fountains"
-    },
-    {
-        "duration": "14.724933818181814",
-        "name": "rendering.desktop/mix_10k"
-    },
-    {
-        "duration": "20.848906272727277",
-        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "39.05138043181818",
-        "name": "rendering.desktop/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "28.074515363636365",
-        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "28.53713720454546",
-        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "43.960642022727285",
-        "name": "rendering.desktop/motion_mark_focus"
-    },
-    {
-        "duration": "20.43763641463415",
-        "name": "rendering.desktop/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "40.19748549999999",
-        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "18.67915304878048",
-        "name": "rendering.desktop/particles"
-    },
-    {
-        "duration": "23.309169090909087",
-        "name": "rendering.desktop/pinterest"
-    },
-    {
-        "duration": "17.083246181818183",
-        "name": "rendering.desktop/put_get_image_data"
-    },
-    {
-        "duration": "18.17217413157895",
-        "name": "rendering.desktop/raf"
-    },
-    {
-        "duration": "18.12919905263158",
-        "name": "rendering.desktop/raf_animation"
-    },
-    {
-        "duration": "17.567541736842102",
-        "name": "rendering.desktop/raf_canvas"
-    },
-    {
-        "duration": "18.137776684210525",
-        "name": "rendering.desktop/raf_touch_animation"
-    },
-    {
-        "duration": "17.149388045454547",
-        "name": "rendering.desktop/runway"
-    },
-    {
-        "duration": "18.394276097560976",
-        "name": "rendering.desktop/san_angeles"
-    },
-    {
-        "duration": "10.748847513157893",
-        "name": "rendering.desktop/second_batch_js_heavy"
-    },
-    {
-        "duration": "10.58654378947368",
-        "name": "rendering.desktop/second_batch_js_light"
-    },
-    {
-        "duration": "10.599852789473685",
-        "name": "rendering.desktop/second_batch_js_medium"
-    },
-    {
-        "duration": "16.361425421052633",
-        "name": "rendering.desktop/simple_text_page"
-    },
-    {
-        "duration": "6.711962110526314",
-        "name": "rendering.desktop/simple_touch_drag"
-    },
-    {
-        "duration": "20.297875789473686",
-        "name": "rendering.desktop/small_texture_uploads"
-    },
-    {
-        "duration": "21.04771027272727",
-        "name": "rendering.desktop/smash_cat"
-    },
-    {
-        "duration": "14.658682909090906",
-        "name": "rendering.desktop/spielzeugz"
-    },
-    {
-        "duration": "20.765856227272728",
-        "name": "rendering.desktop/stroke_shapes"
-    },
-    {
-        "duration": "6.739604878947369",
-        "name": "rendering.desktop/sync_scroll_offset"
-    },
-    {
-        "duration": "44.837428295454544",
-        "name": "rendering.desktop/techcrunch"
-    },
-    {
-        "duration": "16.612831925000002",
-        "name": "rendering.desktop/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "15.867804875",
-        "name": "rendering.desktop/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "13.546451137499997",
-        "name": "rendering.desktop/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "12.079830374999998",
-        "name": "rendering.desktop/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "11.117253837499998",
-        "name": "rendering.desktop/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "10.4964272",
-        "name": "rendering.desktop/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "9.950531787500001",
-        "name": "rendering.desktop/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "9.68502065",
-        "name": "rendering.desktop/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "9.480277412499998",
-        "name": "rendering.desktop/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "9.127394212500004",
-        "name": "rendering.desktop/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "22.154407049999996",
-        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "19.937044899999997",
-        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "17.314989325",
-        "name": "rendering.desktop/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "15.812206399999999",
-        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "14.186408425000002",
-        "name": "rendering.desktop/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "13.425205737499999",
-        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "12.892269787500002",
-        "name": "rendering.desktop/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "12.6956619875",
-        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "12.246665475000002",
-        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "12.074181687499998",
-        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "16.5712942",
-        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "15.882120987499999",
-        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "13.464127874999999",
-        "name": "rendering.desktop/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "12.119675050000001",
-        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "10.9610501875",
-        "name": "rendering.desktop/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "10.552219574999999",
-        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "9.86212855",
-        "name": "rendering.desktop/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "9.557468075",
-        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "9.443716175000002",
-        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "9.245249712499998",
-        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "16.328694828947366",
-        "name": "rendering.desktop/touch_handler_scrolling"
-    },
-    {
-        "duration": "24.306497977272727",
-        "name": "rendering.desktop/transform_transitions"
-    },
-    {
-        "duration": "19.604135340909092",
-        "name": "rendering.desktop/transform_transitions_js_block"
-    },
-    {
-        "duration": "15.01410418181818",
-        "name": "rendering.desktop/twitter"
-    },
-    {
-        "duration": "21.306142300000005",
-        "name": "rendering.desktop/twitter_pinch"
-    },
-    {
-        "duration": "25.5328601590909",
-        "name": "rendering.desktop/weather.com"
-    },
-    {
-        "duration": "28.367302850000005",
-        "name": "rendering.desktop/weather_pinch"
-    },
-    {
-        "duration": "20.343411022727274",
-        "name": "rendering.desktop/web_animation_value_type_color"
-    },
-    {
-        "duration": "22.1745455",
-        "name": "rendering.desktop/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "20.997750568181818",
-        "name": "rendering.desktop/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "20.947234659090906",
-        "name": "rendering.desktop/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "22.13650793181818",
-        "name": "rendering.desktop/web_animation_value_type_path"
-    },
-    {
-        "duration": "34.1138800909091",
-        "name": "rendering.desktop/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "23.025500181818185",
-        "name": "rendering.desktop/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "21.671349863636358",
-        "name": "rendering.desktop/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "24.41164193181819",
-        "name": "rendering.desktop/web_animations_many_keyframes"
-    },
-    {
-        "duration": "21.483587045454552",
-        "name": "rendering.desktop/web_animations_set_current_time"
-    },
-    {
-        "duration": "22.834917704545454",
-        "name": "rendering.desktop/web_animations_simultaneous"
-    },
-    {
-        "duration": "25.788626522727274",
-        "name": "rendering.desktop/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "21.55999365909091",
-        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "27.47893629545455",
-        "name": "rendering.desktop/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "20.07464113636364",
-        "name": "rendering.desktop/wikipedia"
-    },
-    {
-        "duration": "22.583704136363636",
-        "name": "rendering.desktop/wordpress"
-    },
-    {
-        "duration": "13.392119636363635",
-        "name": "rendering.desktop/yahoo_answers"
-    },
-    {
-        "duration": "32.208872386363645",
-        "name": "rendering.desktop/yahoo_games"
-    },
-    {
-        "duration": "29.454614625000012",
-        "name": "rendering.desktop/yahoo_games_pinch"
-    },
-    {
-        "duration": "22.113008204545455",
-        "name": "rendering.desktop/yahoo_news"
-    },
-    {
-        "duration": "22.068308475000006",
-        "name": "rendering.desktop/yahoo_news_pinch"
-    },
-    {
-        "duration": "27.298139181818183",
-        "name": "rendering.desktop/yahoo_sports"
-    },
-    {
-        "duration": "52.51995430000001",
-        "name": "rendering.desktop/yahoo_sports_pinch"
-    },
-    {
-        "duration": "21.1889081",
-        "name": "rendering.desktop/youtube_pinch"
-    },
-    {
-        "duration": "20.959620918918915",
-        "name": "rendering.desktop/yuv_decoding"
-    },
-    {
-        "duration": "13.725767051020407",
-        "name": "scheduler.tough_scheduling_cases/raf"
-    },
-    {
-        "duration": "13.6046156122449",
-        "name": "scheduler.tough_scheduling_cases/raf_animation"
-    },
-    {
-        "duration": "13.37749837755102",
-        "name": "scheduler.tough_scheduling_cases/raf_canvas"
-    },
-    {
-        "duration": "13.657908602040811",
-        "name": "scheduler.tough_scheduling_cases/raf_touch_animation"
-    },
-    {
-        "duration": "7.858744538775511",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy"
-    },
-    {
-        "duration": "7.634183167346937",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_light"
-    },
-    {
-        "duration": "7.808732579591837",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_medium"
-    },
-    {
-        "duration": "13.319662153061227",
-        "name": "scheduler.tough_scheduling_cases/simple_text_page"
-    },
-    {
-        "duration": "5.788666848979592",
-        "name": "scheduler.tough_scheduling_cases/simple_touch_drag"
-    },
-    {
-        "duration": "5.83027375102041",
-        "name": "scheduler.tough_scheduling_cases/sync_scroll_offset"
-    },
-    {
-        "duration": "12.90784189795918",
-        "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling"
-    },
-    {
-        "duration": "12.14913952040816",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/amazon_pinch"
-    },
-    {
-        "duration": "12.958189051020408",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/blogspot_pinch"
-    },
-    {
-        "duration": "12.626157572916666",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/booking_pinch"
-    },
-    {
-        "duration": "14.454517122448982",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/cnn_pinch"
-    },
-    {
-        "duration": "14.582173947916665",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/ebay_pinch"
-    },
-    {
-        "duration": "13.649322775510209",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/espn_pinch"
-    },
-    {
-        "duration": "12.74660647959184",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/facebook_pinch"
-    },
-    {
-        "duration": "14.353254836734695",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/gmail_pinch"
-    },
-    {
-        "duration": "14.409491173469384",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/google_calendar_pinch"
-    },
-    {
-        "duration": "12.748126",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/google_image_pinch"
-    },
-    {
-        "duration": "14.27968643877551",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/google_search_pinch"
-    },
-    {
-        "duration": "12.067373469387759",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/linkedin_pinch"
-    },
-    {
-        "duration": "14.734091132653067",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/twitter_pinch"
-    },
-    {
-        "duration": "14.773638604166665",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/weather_pinch"
-    },
-    {
-        "duration": "20.646489",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/yahoo_games_pinch"
-    },
-    {
-        "duration": "13.243030836734695",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/yahoo_news_pinch"
-    },
-    {
-        "duration": "16.85023027083334",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/yahoo_sports_pinch"
-    },
-    {
-        "duration": "14.586596561224484",
-        "name": "smoothness.desktop_tough_pinch_zoom_cases/youtube_pinch"
-    },
-    {
-        "duration": "17.63306802083333",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "27.267977687500007",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "19.111942395833335",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "18.902955520833334",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "13.485305489583332",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "12.6918358125",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "10.606566010416666",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "9.6104318125",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.545360583333332",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "8.03142350416667",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.688266616666667",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.487526147916667",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "7.240349477083331",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "7.17187985",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "13.751623208333333",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "12.584565687500003",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "10.39528305208333",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "9.287609739583335",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.266716545833335",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "7.749227760416666",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.481623281250001",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.2256595812499995",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "7.0160588937499995",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "6.911995316666668",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "14.678565166666665",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "13.632711072916665",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "11.732065104166663",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "10.620173666666664",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "9.699554166666665",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "9.1493038125",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "8.974380270833334",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "8.809100333333335",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "8.657745556249997",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "8.577958131250002",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "13.18405933333333",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "12.480019270833337",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "10.35889138541667",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "9.343336552083334",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.306020604166667",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "7.74278853125",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.393074254166666",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.187891008333334",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "6.996555006250002",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "6.897036006249999",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "15.304925104166673",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "15.369533260416661",
-        "name": "smoothness.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "15.408027260416661",
-        "name": "smoothness.key_desktop_move_cases/maps_move"
-    },
-    {
-        "duration": "26.784526708333342",
-        "name": "smoothness.maps/maps_perf_test"
-    },
-    {
-        "duration": "17.624169531914895",
-        "name": "smoothness.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "10.816864478723407",
-        "name": "smoothness.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "8.989432191489362",
-        "name": "smoothness.top_25_smooth/ebay"
-    },
-    {
-        "duration": "12.077062148936168",
-        "name": "smoothness.top_25_smooth/espn"
-    },
-    {
-        "duration": "9.660616936170214",
-        "name": "smoothness.top_25_smooth/facebook"
-    },
-    {
-        "duration": "17.31775421276595",
-        "name": "smoothness.top_25_smooth/gmail"
-    },
-    {
-        "duration": "12.728602617021277",
-        "name": "smoothness.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "20.929682382978726",
-        "name": "smoothness.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "14.266613425531915",
-        "name": "smoothness.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "16.35835423404255",
-        "name": "smoothness.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "8.512855340425535",
-        "name": "smoothness.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "12.167891914893616",
-        "name": "smoothness.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "14.524151521276593",
-        "name": "smoothness.top_25_smooth/pinterest"
-    },
-    {
-        "duration": "18.60801623404255",
-        "name": "smoothness.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "13.709902074468086",
-        "name": "smoothness.top_25_smooth/twitter"
-    },
-    {
-        "duration": "12.224926414893618",
-        "name": "smoothness.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "15.812661404255316",
-        "name": "smoothness.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "14.91922618085106",
-        "name": "smoothness.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "9.425947531914893",
-        "name": "smoothness.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "25.152091702127656",
-        "name": "smoothness.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "18.69400227659574",
-        "name": "smoothness.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "19.9036894893617",
-        "name": "smoothness.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "18.1405718125",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html"
-    },
-    {
-        "duration": "17.797234729166668",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html"
-    },
-    {
-        "duration": "17.811230229166664",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html"
-    },
-    {
-        "duration": "17.802353583333336",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html"
-    },
-    {
-        "duration": "17.830852479166666",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html"
-    },
-    {
-        "duration": "17.81490133333333",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html"
-    },
-    {
-        "duration": "17.784903937499998",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html"
-    },
-    {
-        "duration": "17.787983770833335",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html"
-    },
-    {
-        "duration": "17.82200029166666",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html"
-    },
-    {
-        "duration": "17.827061625000002",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html"
-    },
-    {
-        "duration": "17.828471291666656",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html"
-    },
-    {
-        "duration": "18.991106812500004",
-        "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "23.033800729166668",
-        "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations_composited_transform"
-    },
-    {
-        "duration": "20.94027066666667",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "21.181908500000002",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "21.194172187499998",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "19.492463145833337",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas"
-    },
-    {
-        "duration": "18.1169740625",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css"
-    },
-    {
-        "duration": "19.452065500000003",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations"
-    },
-    {
-        "duration": "17.3157516875",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes"
-    },
-    {
-        "duration": "17.43817714583333",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "17.9144483125",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "17.441848979166668",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "17.419066395833326",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "16.838231625000002",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "19.16134370833333",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "20.026408229166663",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "19.883101291666662",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "19.141838291666662",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "19.682784458333337",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "21.926103770833336",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "20.758656958333336",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "19.692756375000002",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "17.68110233333333",
-        "name": "smoothness.tough_animation_cases/css_transitions_inline_style"
-    },
-    {
-        "duration": "18.25030516666666",
-        "name": "smoothness.tough_animation_cases/css_transitions_new_element"
-    },
-    {
-        "duration": "17.8737100625",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "18.394751833333327",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "18.10253383333334",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "18.01226958333333",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "17.731259187500005",
-        "name": "smoothness.tough_animation_cases/css_transitions_style_element"
-    },
-    {
-        "duration": "20.225090291666664",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "20.235031312500002",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "20.074348500000003",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "20.250556145833333",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "17.5982153125",
-        "name": "smoothness.tough_animation_cases/css_transitions_updating_class"
-    },
-    {
-        "duration": "16.530927541666667",
-        "name": "smoothness.tough_animation_cases/css_value_type_color"
-    },
-    {
-        "duration": "21.890715062500004",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter"
-    },
-    {
-        "duration": "17.179101625",
-        "name": "smoothness.tough_animation_cases/css_value_type_length"
-    },
-    {
-        "duration": "16.939784604166668",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex"
-    },
-    {
-        "duration": "16.957349125",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple"
-    },
-    {
-        "duration": "17.257774979166665",
-        "name": "smoothness.tough_animation_cases/css_value_type_path"
-    },
-    {
-        "duration": "22.543531770833336",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow"
-    },
-    {
-        "duration": "17.08302327083333",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex"
-    },
-    {
-        "duration": "16.830978645833333",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple"
-    },
-    {
-        "duration": "16.53343327083333",
-        "name": "smoothness.tough_animation_cases/keyframed_animations"
-    },
-    {
-        "duration": "16.80270660416667",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "19.474189916666663",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "27.736247208333335",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "16.969167687499997",
-        "name": "smoothness.tough_animation_cases/transform_transitions"
-    },
-    {
-        "duration": "16.39944164583333",
-        "name": "smoothness.tough_animation_cases/transform_transitions_js_block"
-    },
-    {
-        "duration": "16.519355770833332",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_color"
-    },
-    {
-        "duration": "16.945139895833332",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "16.939485812500003",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "16.936776875",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "17.216332520833333",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_path"
-    },
-    {
-        "duration": "22.66975674999999",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "17.002637395833336",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "16.806618395833336",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "18.0529130625",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes"
-    },
-    {
-        "duration": "16.92103008333333",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time"
-    },
-    {
-        "duration": "17.422617666666657",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous"
-    },
-    {
-        "duration": "19.032787979166667",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "16.791719833333335",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "19.269816499999997",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "11.94893264583333",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_15"
-    },
-    {
-        "duration": "14.280646145833337",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow"
-    },
-    {
-        "duration": "13.731636968750008",
-        "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "14.368612864583328",
-        "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles"
-    },
-    {
-        "duration": "11.412356510416663",
-        "name": "smoothness.tough_canvas_cases/bouncing_png_images"
-    },
-    {
-        "duration": "21.4558235625",
-        "name": "smoothness.tough_canvas_cases/bouncing_svg_images"
-    },
-    {
-        "duration": "22.905657187500008",
-        "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear"
-    },
-    {
-        "duration": "13.790709718750001",
-        "name": "smoothness.tough_canvas_cases/canvas_arcs"
-    },
-    {
-        "duration": "12.444936052083333",
-        "name": "smoothness.tough_canvas_cases/canvas_font_cycler"
-    },
-    {
-        "duration": "12.26954741666667",
-        "name": "smoothness.tough_canvas_cases/canvas_lines"
-    },
-    {
-        "duration": "11.93115234375",
-        "name": "smoothness.tough_canvas_cases/canvas_to_blob"
-    },
-    {
-        "duration": "12.201230812499999",
-        "name": "smoothness.tough_canvas_cases/chip_tune"
-    },
-    {
-        "duration": "12.125455520833334",
-        "name": "smoothness.tough_canvas_cases/crafty_mind"
-    },
-    {
-        "duration": "12.100914291666669",
-        "name": "smoothness.tough_canvas_cases/effect_games"
-    },
-    {
-        "duration": "13.866079093750002",
-        "name": "smoothness.tough_canvas_cases/fill_shapes"
-    },
-    {
-        "duration": "13.943776885416668",
-        "name": "smoothness.tough_canvas_cases/geo_apis"
-    },
-    {
-        "duration": "11.87006808333333",
-        "name": "smoothness.tough_canvas_cases/hakim"
-    },
-    {
-        "duration": "12.896891989583333",
-        "name": "smoothness.tough_canvas_cases/jarro_doverson"
-    },
-    {
-        "duration": "11.644616083333332",
-        "name": "smoothness.tough_canvas_cases/kevs_3d"
-    },
-    {
-        "duration": "12.877454458333332",
-        "name": "smoothness.tough_canvas_cases/man_in_blue"
-    },
-    {
-        "duration": "15.71874534375",
-        "name": "smoothness.tough_canvas_cases/many_images"
-    },
-    {
-        "duration": "11.882275114583335",
-        "name": "smoothness.tough_canvas_cases/megi_dish"
-    },
-    {
-        "duration": "12.30170944791667",
-        "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "12.386295729166667",
-        "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "12.285534020833333",
-        "name": "smoothness.tough_canvas_cases/microsoft_snow"
-    },
-    {
-        "duration": "12.007386656249999",
-        "name": "smoothness.tough_canvas_cases/microsoft_speed_reading"
-    },
-    {
-        "duration": "12.076300875",
-        "name": "smoothness.tough_canvas_cases/microsoft_tweet_map"
-    },
-    {
-        "duration": "13.322996677083326",
-        "name": "smoothness.tough_canvas_cases/microsoft_video_city"
-    },
-    {
-        "duration": "11.882614083333337",
-        "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains"
-    },
-    {
-        "duration": "11.634863833333332",
-        "name": "smoothness.tough_canvas_cases/mix_10k"
-    },
-    {
-        "duration": "13.071094500000001",
-        "name": "smoothness.tough_canvas_cases/put_get_image_data"
-    },
-    {
-        "duration": "11.295558822916668",
-        "name": "smoothness.tough_canvas_cases/runway"
-    },
-    {
-        "duration": "12.95353134375",
-        "name": "smoothness.tough_canvas_cases/smash_cat"
-    },
-    {
-        "duration": "11.642395343750001",
-        "name": "smoothness.tough_canvas_cases/spielzeugz"
-    },
-    {
-        "duration": "13.886192343749999",
-        "name": "smoothness.tough_canvas_cases/stroke_shapes"
-    },
-    {
-        "duration": "18.319941520833336",
-        "name": "smoothness.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "20.019048874999992",
-        "name": "smoothness.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "19.57218495833334",
-        "name": "smoothness.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "22.84653025",
-        "name": "smoothness.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "7.826360927272725",
-        "name": "smoothness.tough_image_decode_cases/cats_unscaled"
-    },
-    {
-        "duration": "6.263716018181818",
-        "name": "smoothness.tough_image_decode_cases/cats_viewport_width"
-    },
-    {
-        "duration": "7.849364250000001",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html"
-    },
-    {
-        "duration": "6.265710324999999",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html"
-    },
-    {
-        "duration": "17.774061749999998",
-        "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "27.281641625000002",
-        "name": "smoothness.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "19.252666",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "18.94495710416667",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "13.479096499999999",
-        "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "12.768980989583333",
-        "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "10.6199711875",
-        "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "9.653199322916665",
-        "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.581660197916667",
-        "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "8.003215904166664",
-        "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.680736029166668",
-        "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.4616434270833345",
-        "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "7.273391618750002",
-        "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "7.204429256249999",
-        "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "13.381110312499997",
-        "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "12.40196025",
-        "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "10.281329291666667",
-        "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "9.255615666666666",
-        "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.185797718749997",
-        "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "7.7100792875",
-        "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.455367139583333",
-        "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.175537222916668",
-        "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "6.989181814583336",
-        "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "6.8872320291666655",
-        "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "14.780872552083332",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "13.773624354166671",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "11.871274239583336",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "10.689090156250002",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "9.888426708333336",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "9.346284156249997",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "9.163754270833332",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "9.08754909375",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "8.809208360416669",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "8.804140916666668",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "13.174456000000005",
-        "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "12.436915749999999",
-        "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "10.251570354166667",
-        "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "9.253714145833333",
-        "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.240424041666667",
-        "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "7.686312585416669",
-        "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.39521278541667",
-        "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.185376945833334",
-        "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "6.99311766458333",
-        "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "6.8875278812500005",
-        "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "19.16040542553191",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation"
-    },
-    {
-        "duration": "18.907352",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation.html"
-    },
-    {
-        "duration": "18.31478017021277",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "18.590584",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient.html"
-    },
-    {
-        "duration": "20.665585489361707",
-        "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads"
-    },
-    {
-        "duration": "20.101875",
-        "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads.html"
-    },
-    {
-        "duration": "21.873398021276593",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads"
-    },
-    {
-        "duration": "21.49238",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads.html"
-    },
-    {
-        "duration": "16.823551574468087",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads"
-    },
-    {
-        "duration": "16.870625",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads.html"
-    },
-    {
-        "duration": "16.41611044680851",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads"
-    },
-    {
-        "duration": "16.329224",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads.html"
-    },
-    {
-        "duration": "18.2857485625",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.824480291666667",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.81820527083334",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.785672208333335",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.813270500000005",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.77213685416666",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.787055729166664",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.808878125000007",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.813497875",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.784920520833335",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.829168812499997",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html"
-    },
-    {
-        "duration": "17.803057937499997",
-        "name": "smoothness.tough_webgl_cases/animometer_webgl"
-    },
-    {
-        "duration": "28.0481899375",
-        "name": "smoothness.tough_webgl_cases/aquarium"
-    },
-    {
-        "duration": "21.099554708333336",
-        "name": "smoothness.tough_webgl_cases/aquarium_20k"
-    },
-    {
-        "duration": "14.953398593750002",
-        "name": "smoothness.tough_webgl_cases/blob"
-    },
-    {
-        "duration": "15.739190020833334",
-        "name": "smoothness.tough_webgl_cases/dynamic_cube_map"
-    },
-    {
-        "duration": "13.948126749999995",
-        "name": "smoothness.tough_webgl_cases/earth"
-    },
-    {
-        "duration": "14.09098721875",
-        "name": "smoothness.tough_webgl_cases/many_planets_deep"
-    },
-    {
-        "duration": "15.227119072916667",
-        "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "13.773484270833334",
-        "name": "smoothness.tough_webgl_cases/particles"
-    },
-    {
-        "duration": "13.754705208333334",
-        "name": "smoothness.tough_webgl_cases/san_angeles"
-    },
-    {
-        "duration": "40.224208",
-        "name": "speedometer-future/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "40.448018229166664",
-        "name": "speedometer/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "80.64946781249999",
-        "name": "speedometer2-future/Speedometer2"
-    },
-    {
-        "duration": "79.62665643749999",
-        "name": "speedometer2/Speedometer2"
-    },
-    {
-        "duration": "68.70720387499999",
-        "name": "system_health.common_desktop/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "96.23197733333332",
-        "name": "system_health.common_desktop/browse:media:imgur"
-    },
-    {
-        "duration": "69.53731740425532",
-        "name": "system_health.common_desktop/browse:media:pinterest"
-    },
-    {
-        "duration": "72.74783623404257",
-        "name": "system_health.common_desktop/browse:media:youtube"
-    },
-    {
-        "duration": "54.05908985416665",
-        "name": "system_health.common_desktop/browse:news:flipboard"
-    },
-    {
-        "duration": "76.00373768085106",
-        "name": "system_health.common_desktop/browse:news:nytimes"
-    },
-    {
-        "duration": "62.46284725531913",
-        "name": "system_health.common_desktop/browse:news:reddit"
-    },
-    {
-        "duration": "50.53067641666667",
-        "name": "system_health.common_desktop/browse:search:google"
-    },
-    {
-        "duration": "37.118942499999996",
-        "name": "system_health.common_desktop/browse:search:google_india"
-    },
-    {
-        "duration": "68.10654435416664",
-        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "75.64069125531913",
-        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "48.59782551063828",
-        "name": "system_health.common_desktop/browse:social:twitter"
-    },
-    {
-        "duration": "74.75477689361703",
-        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll"
-    },
-    {
-        "duration": "69.84943064583332",
-        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "64.69654210416668",
-        "name": "system_health.common_desktop/browse:tools:earth"
-    },
-    {
-        "duration": "21.815617041666673",
-        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch"
-    },
-    {
-        "duration": "17.71174522916667",
-        "name": "system_health.common_desktop/load:chrome:blank"
-    },
-    {
-        "duration": "19.344874895833332",
-        "name": "system_health.common_desktop/load:games:alphabetty"
-    },
-    {
-        "duration": "20.800760291666673",
-        "name": "system_health.common_desktop/load:games:bubbles"
-    },
-    {
-        "duration": "18.25898306382979",
-        "name": "system_health.common_desktop/load:games:lazors"
-    },
-    {
-        "duration": "22.401427212765956",
-        "name": "system_health.common_desktop/load:games:miniclip"
-    },
-    {
-        "duration": "29.019855297872336",
-        "name": "system_health.common_desktop/load:games:spychase"
-    },
-    {
-        "duration": "35.66374379166667",
-        "name": "system_health.common_desktop/load:media:9gag"
-    },
-    {
-        "duration": "20.72684916666667",
-        "name": "system_health.common_desktop/load:media:dailymotion"
-    },
-    {
-        "duration": "20.016327191489356",
-        "name": "system_health.common_desktop/load:media:google_images"
-    },
-    {
-        "duration": "25.020429148936167",
-        "name": "system_health.common_desktop/load:media:imgur"
-    },
-    {
-        "duration": "24.438367234042556",
-        "name": "system_health.common_desktop/load:media:soundcloud"
-    },
-    {
-        "duration": "23.096587425531915",
-        "name": "system_health.common_desktop/load:media:youtube"
-    },
-    {
-        "duration": "19.99262479166667",
-        "name": "system_health.common_desktop/load:news:bbc"
-    },
-    {
-        "duration": "25.55444560416667",
-        "name": "system_health.common_desktop/load:news:cnn"
-    },
-    {
-        "duration": "19.9452279787234",
-        "name": "system_health.common_desktop/load:news:flipboard"
-    },
-    {
-        "duration": "18.17057017021277",
-        "name": "system_health.common_desktop/load:news:hackernews"
-    },
-    {
-        "duration": "22.531739425531914",
-        "name": "system_health.common_desktop/load:news:nytimes"
-    },
-    {
-        "duration": "25.45115774468085",
-        "name": "system_health.common_desktop/load:news:qq"
-    },
-    {
-        "duration": "19.445543170212765",
-        "name": "system_health.common_desktop/load:news:reddit"
-    },
-    {
-        "duration": "20.126454382978725",
-        "name": "system_health.common_desktop/load:news:wikipedia"
-    },
-    {
-        "duration": "20.508251",
-        "name": "system_health.common_desktop/load:search:amazon"
-    },
-    {
-        "duration": "18.7538531875",
-        "name": "system_health.common_desktop/load:search:baidu"
-    },
-    {
-        "duration": "21.079703382978725",
-        "name": "system_health.common_desktop/load:search:ebay"
-    },
-    {
-        "duration": "18.74869231914893",
-        "name": "system_health.common_desktop/load:search:google"
-    },
-    {
-        "duration": "20.283273702127662",
-        "name": "system_health.common_desktop/load:search:taobao"
-    },
-    {
-        "duration": "18.935629446808505",
-        "name": "system_health.common_desktop/load:search:yahoo"
-    },
-    {
-        "duration": "18.495116893617023",
-        "name": "system_health.common_desktop/load:search:yandex"
-    },
-    {
-        "duration": "20.51777840425532",
-        "name": "system_health.common_desktop/load:social:instagram"
-    },
-    {
-        "duration": "21.690613276595744",
-        "name": "system_health.common_desktop/load:social:pinterest"
-    },
-    {
-        "duration": "20.093339829787237",
-        "name": "system_health.common_desktop/load:social:vk"
-    },
-    {
-        "duration": "36.2614315625",
-        "name": "system_health.common_desktop/load:tools:docs"
-    },
-    {
-        "duration": "28.280743042553198",
-        "name": "system_health.common_desktop/load:tools:drive"
-    },
-    {
-        "duration": "21.389366361702127",
-        "name": "system_health.common_desktop/load:tools:dropbox"
-    },
-    {
-        "duration": "25.26429861702127",
-        "name": "system_health.common_desktop/load:tools:gmail"
-    },
-    {
-        "duration": "19.903631978723404",
-        "name": "system_health.common_desktop/load:tools:stackoverflow"
-    },
-    {
-        "duration": "24.027517617021275",
-        "name": "system_health.common_desktop/load:tools:weather"
-    },
-    {
-        "duration": "19.58908264583334",
-        "name": "system_health.common_desktop/load_accessibility:media:wikipedia"
-    },
-    {
-        "duration": "21.080599229166662",
-        "name": "system_health.common_desktop/load_accessibility:shopping:amazon"
-    },
-    {
-        "duration": "132.95697510638297",
-        "name": "system_health.common_desktop/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "134.2075229787234",
-        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "49.57117765957446",
-        "name": "system_health.common_desktop/play:media:soundcloud"
-    },
-    {
-        "duration": "183.77485439583333",
-        "name": "system_health.memory_desktop/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "215.28298031250003",
-        "name": "system_health.memory_desktop/browse:media:imgur"
-    },
-    {
-        "duration": "190.90299799999997",
-        "name": "system_health.memory_desktop/browse:media:pinterest"
-    },
-    {
-        "duration": "180.3900352954545",
-        "name": "system_health.memory_desktop/browse:media:tumblr"
-    },
-    {
-        "duration": "185.48554655319148",
-        "name": "system_health.memory_desktop/browse:media:youtube"
-    },
-    {
-        "duration": "140.40771377083334",
-        "name": "system_health.memory_desktop/browse:news:flipboard"
-    },
-    {
-        "duration": "159.89058268085108",
-        "name": "system_health.memory_desktop/browse:news:nytimes"
-    },
-    {
-        "duration": "162.56790312765955",
-        "name": "system_health.memory_desktop/browse:news:reddit"
-    },
-    {
-        "duration": "141.5539950625",
-        "name": "system_health.memory_desktop/browse:search:google"
-    },
-    {
-        "duration": "104.19273791666667",
-        "name": "system_health.memory_desktop/browse:search:google_india"
-    },
-    {
-        "duration": "182.58016435416664",
-        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "187.7433878913043",
-        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "134.64441536170213",
-        "name": "system_health.memory_desktop/browse:social:twitter"
-    },
-    {
-        "duration": "182.55528033333334",
-        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "163.55594918749998",
-        "name": "system_health.memory_desktop/browse:tools:earth"
-    },
-    {
-        "duration": "58.87908991666666",
-        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch"
-    },
-    {
-        "duration": "49.48664949999999",
-        "name": "system_health.memory_desktop/load:chrome:blank"
-    },
-    {
-        "duration": "52.676513166666666",
-        "name": "system_health.memory_desktop/load:games:alphabetty"
-    },
-    {
-        "duration": "53.10001489583333",
-        "name": "system_health.memory_desktop/load:games:bubbles"
-    },
-    {
-        "duration": "51.092430659574475",
-        "name": "system_health.memory_desktop/load:games:lazors"
-    },
-    {
-        "duration": "78.40706668085103",
-        "name": "system_health.memory_desktop/load:games:spychase"
-    },
-    {
-        "duration": "83.91644004166666",
-        "name": "system_health.memory_desktop/load:media:9gag"
-    },
-    {
-        "duration": "55.17557897916668",
-        "name": "system_health.memory_desktop/load:media:dailymotion"
-    },
-    {
-        "duration": "54.73471391489361",
-        "name": "system_health.memory_desktop/load:media:google_images"
-    },
-    {
-        "duration": "65.0938119574468",
-        "name": "system_health.memory_desktop/load:media:imgur"
-    },
-    {
-        "duration": "62.09184938297874",
-        "name": "system_health.memory_desktop/load:media:soundcloud"
-    },
-    {
-        "duration": "60.78126440425533",
-        "name": "system_health.memory_desktop/load:media:youtube"
-    },
-    {
-        "duration": "53.96769543750002",
-        "name": "system_health.memory_desktop/load:news:bbc"
-    },
-    {
-        "duration": "64.9279684375",
-        "name": "system_health.memory_desktop/load:news:cnn"
-    },
-    {
-        "duration": "54.20426276595745",
-        "name": "system_health.memory_desktop/load:news:flipboard"
-    },
-    {
-        "duration": "50.881539021276595",
-        "name": "system_health.memory_desktop/load:news:hackernews"
-    },
-    {
-        "duration": "57.712185765957436",
-        "name": "system_health.memory_desktop/load:news:nytimes"
-    },
-    {
-        "duration": "64.73828895744683",
-        "name": "system_health.memory_desktop/load:news:qq"
-    },
-    {
-        "duration": "52.98582025531915",
-        "name": "system_health.memory_desktop/load:news:reddit"
-    },
-    {
-        "duration": "55.72404412765956",
-        "name": "system_health.memory_desktop/load:news:wikipedia"
-    },
-    {
-        "duration": "54.49089804166665",
-        "name": "system_health.memory_desktop/load:search:amazon"
-    },
-    {
-        "duration": "51.053998166666666",
-        "name": "system_health.memory_desktop/load:search:baidu"
-    },
-    {
-        "duration": "55.76076557446808",
-        "name": "system_health.memory_desktop/load:search:ebay"
-    },
-    {
-        "duration": "51.54659727659574",
-        "name": "system_health.memory_desktop/load:search:google"
-    },
-    {
-        "duration": "55.1989684893617",
-        "name": "system_health.memory_desktop/load:search:taobao"
-    },
-    {
-        "duration": "52.81387495744681",
-        "name": "system_health.memory_desktop/load:search:yahoo"
-    },
-    {
-        "duration": "51.1775470638298",
-        "name": "system_health.memory_desktop/load:search:yandex"
-    },
-    {
-        "duration": "55.847999510638324",
-        "name": "system_health.memory_desktop/load:social:instagram"
-    },
-    {
-        "duration": "59.35563495744681",
-        "name": "system_health.memory_desktop/load:social:pinterest"
-    },
-    {
-        "duration": "55.300469127659575",
-        "name": "system_health.memory_desktop/load:social:vk"
-    },
-    {
-        "duration": "70.01042052083334",
-        "name": "system_health.memory_desktop/load:tools:docs"
-    },
-    {
-        "duration": "60.749431489361704",
-        "name": "system_health.memory_desktop/load:tools:drive"
-    },
-    {
-        "duration": "56.059733170212766",
-        "name": "system_health.memory_desktop/load:tools:dropbox"
-    },
-    {
-        "duration": "64.69713421276595",
-        "name": "system_health.memory_desktop/load:tools:gmail"
-    },
-    {
-        "duration": "54.81979540425532",
-        "name": "system_health.memory_desktop/load:tools:stackoverflow"
-    },
-    {
-        "duration": "60.65424587234041",
-        "name": "system_health.memory_desktop/load:tools:weather"
-    },
-    {
-        "duration": "52.980916520833354",
-        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia"
-    },
-    {
-        "duration": "55.729371520833325",
-        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon"
-    },
-    {
-        "duration": "487.99304042553194",
-        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "476.55073936170214",
-        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "131.8114124042553",
-        "name": "system_health.memory_desktop/play:media:soundcloud"
-    },
-    {
-        "duration": "23.878051812499994",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION"
-    },
-    {
-        "duration": "32.754019291666665",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS"
-    },
-    {
-        "duration": "21.679805416666664",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE"
-    },
-    {
-        "duration": "21.892348145833328",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE"
-    },
-    {
-        "duration": "19.54230533333333",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "15.10354675",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "19.480637166666668",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "19.635887729166665",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "15.178815239583336",
-        "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "14.520273260416666",
-        "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "11.808818281249998",
-        "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "10.568694510416664",
-        "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "9.225882010416667",
-        "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "8.648632989583332",
-        "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "8.30560684375",
-        "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.996971185416665",
-        "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "7.768643589583338",
-        "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "7.55812395625",
-        "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "14.709306427083328",
-        "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "13.682898854166666",
-        "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "11.184300635416667",
-        "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "9.979827677083332",
-        "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.730697406249998",
-        "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "8.16466546875",
-        "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.796566160416666",
-        "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.566853449999997",
-        "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "7.303779191666666",
-        "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "7.141669420833335",
-        "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "17.25842310416667",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "16.191214177083328",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "13.357647781250002",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "12.11809334375",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "10.426576333333331",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "9.718023927083332",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "9.262084406249999",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "8.980367708333333",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "8.660767479166665",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "8.55473748958333",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "14.4723413125",
-        "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "13.679610020833337",
-        "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "11.248790645833333",
-        "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "10.003890447916667",
-        "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "8.817321416666667",
-        "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "8.199081885416668",
-        "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "7.779566027083333",
-        "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "7.560642972916668",
-        "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "7.317289231250001",
-        "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "7.15616475625",
-        "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "8.63066296875",
-        "name": "tracing.tracing_with_background_memory_infra/Facebook"
-    },
-    {
-        "duration": "9.174537218750002",
-        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
-    },
-    {
-        "duration": "7.499615389583333",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
-    },
-    {
-        "duration": "7.7694264125",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
-    },
-    {
-        "duration": "7.566907964583334",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
-    },
-    {
-        "duration": "7.800263462500002",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
-    },
-    {
-        "duration": "9.736474135416664",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
-    },
-    {
-        "duration": "8.525120354166667",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "9.771211124999999",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "79.5818356734694",
-        "name": "v8.browsing_desktop-future/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "216.64217122448972",
-        "name": "v8.browsing_desktop-future/browse:media:imgur"
-    },
-    {
-        "duration": "79.51715263265308",
-        "name": "v8.browsing_desktop-future/browse:media:pinterest"
-    },
-    {
-        "duration": "87.46729753061227",
-        "name": "v8.browsing_desktop-future/browse:media:tumblr"
-    },
-    {
-        "duration": "90.00364848979589",
-        "name": "v8.browsing_desktop-future/browse:media:youtube"
-    },
-    {
-        "duration": "102.760812877551",
-        "name": "v8.browsing_desktop-future/browse:news:nytimes"
-    },
-    {
-        "duration": "67.60670940816327",
-        "name": "v8.browsing_desktop-future/browse:news:reddit"
-    },
-    {
-        "duration": "54.34892416326529",
-        "name": "v8.browsing_desktop-future/browse:search:google"
-    },
-    {
-        "duration": "39.61906481632653",
-        "name": "v8.browsing_desktop-future/browse:search:google_india"
-    },
-    {
-        "duration": "84.76559163265307",
-        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "89.10839742857144",
-        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "54.35969671428572",
-        "name": "v8.browsing_desktop-future/browse:social:twitter"
-    },
-    {
-        "duration": "91.03835308163262",
-        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll"
-    },
-    {
-        "duration": "80.02736802040816",
-        "name": "v8.browsing_desktop-future/browse:tools:earth"
-    },
-    {
-        "duration": "80.04460602083336",
-        "name": "v8.browsing_desktop/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "203.13966958333333",
-        "name": "v8.browsing_desktop/browse:media:imgur"
-    },
-    {
-        "duration": "79.39863712765957",
-        "name": "v8.browsing_desktop/browse:media:pinterest"
-    },
-    {
-        "duration": "87.91625089361702",
-        "name": "v8.browsing_desktop/browse:media:tumblr"
-    },
-    {
-        "duration": "89.56385866666665",
-        "name": "v8.browsing_desktop/browse:media:youtube"
-    },
-    {
-        "duration": "103.68791027083334",
-        "name": "v8.browsing_desktop/browse:news:nytimes"
-    },
-    {
-        "duration": "67.63039980851065",
-        "name": "v8.browsing_desktop/browse:news:reddit"
-    },
-    {
-        "duration": "54.44260460416667",
-        "name": "v8.browsing_desktop/browse:search:google"
-    },
-    {
-        "duration": "39.74619089583333",
-        "name": "v8.browsing_desktop/browse:search:google_india"
-    },
-    {
-        "duration": "85.31877243750002",
-        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "89.43720446808508",
-        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "54.41831144680851",
-        "name": "v8.browsing_desktop/browse:social:twitter"
-    },
-    {
-        "duration": "92.0575536875",
-        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll"
-    },
-    {
-        "duration": "80.51424258333334",
-        "name": "v8.browsing_desktop/browse:tools:earth"
-    },
-    {
-        "duration": "97.14442145945945",
-        "name": "v8.runtime_stats.top_25/AdsAMPAds"
-    },
-    {
-        "duration": "29.729230166666664",
-        "name": "v8.runtime_stats.top_25/AdsAMPAds_cold"
-    },
-    {
-        "duration": "34.9926115",
-        "name": "v8.runtime_stats.top_25/AdsAMPAds_hot"
-    },
-    {
-        "duration": "32.39964375",
-        "name": "v8.runtime_stats.top_25/AdsAMPAds_warm"
-    },
-    {
-        "duration": "96.42089545945947",
-        "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds"
-    },
-    {
-        "duration": "29.414083916666666",
-        "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_cold"
-    },
-    {
-        "duration": "34.80956675",
-        "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_hot"
-    },
-    {
-        "duration": "32.14541033333334",
-        "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_warm"
-    },
-    {
-        "duration": "92.17025148648649",
-        "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage"
-    },
-    {
-        "duration": "28.346466999999993",
-        "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_cold"
-    },
-    {
-        "duration": "33.075604000000006",
-        "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_hot"
-    },
-    {
-        "duration": "30.69868266666666",
-        "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_warm"
-    },
-    {
-        "duration": "96.06170851351352",
-        "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds"
-    },
-    {
-        "duration": "29.37112508333333",
-        "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_cold"
-    },
-    {
-        "duration": "34.54637533333334",
-        "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_hot"
-    },
-    {
-        "duration": "32.05573441666667",
-        "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_warm"
-    },
-    {
-        "duration": "94.00267735135134",
-        "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots"
-    },
-    {
-        "duration": "28.880959083333337",
-        "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_cold"
-    },
-    {
-        "duration": "33.73918333333334",
-        "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_hot"
-    },
-    {
-        "duration": "31.344064916666667",
-        "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_warm"
-    },
-    {
-        "duration": "92.93597578378377",
-        "name": "v8.runtime_stats.top_25/AdsOnScreenDetection"
-    },
-    {
-        "duration": "28.546094166666673",
-        "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_cold"
-    },
-    {
-        "duration": "33.50051224999999",
-        "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_hot"
-    },
-    {
-        "duration": "31.022034333333334",
-        "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_warm"
-    },
-    {
-        "duration": "95.10616805405405",
-        "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage"
-    },
-    {
-        "duration": "29.261946583333337",
-        "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_cold"
-    },
-    {
-        "duration": "34.23020808333334",
-        "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_hot"
-    },
-    {
-        "duration": "31.54063533333333",
-        "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_warm"
-    },
-    {
-        "duration": "93.33202454054053",
-        "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage"
-    },
-    {
-        "duration": "28.650283",
-        "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_cold"
-    },
-    {
-        "duration": "33.506005333333334",
-        "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_hot"
-    },
-    {
-        "duration": "31.095669250000004",
-        "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_warm"
-    },
-    {
-        "duration": "155.63492613513515",
-        "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering"
-    },
-    {
-        "duration": "39.865687666666666",
-        "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_cold"
-    },
-    {
-        "duration": "64.03284491666666",
-        "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_hot"
-    },
-    {
-        "duration": "51.8574805",
-        "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_warm"
-    },
-    {
-        "duration": "114.03603259459456",
-        "name": "v8.runtime_stats.top_25/http://edition.cnn.com"
-    },
-    {
-        "duration": "33.18535966666667",
-        "name": "v8.runtime_stats.top_25/http://edition.cnn.com_cold"
-    },
-    {
-        "duration": "42.32551608333333",
-        "name": "v8.runtime_stats.top_25/http://edition.cnn.com_hot"
-    },
-    {
-        "duration": "38.07854458333335",
-        "name": "v8.runtime_stats.top_25/http://edition.cnn.com_warm"
-    },
-    {
-        "duration": "96.81748883783786",
-        "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0"
-    },
-    {
-        "duration": "29.264677083333336",
-        "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_cold"
-    },
-    {
-        "duration": "34.99812791666667",
-        "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_hot"
-    },
-    {
-        "duration": "32.36807408333333",
-        "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_warm"
-    },
-    {
-        "duration": "99.97180462162163",
-        "name": "v8.runtime_stats.top_25/http://inbox.google.com"
-    },
-    {
-        "duration": "30.33580808333333",
-        "name": "v8.runtime_stats.top_25/http://inbox.google.com_cold"
-    },
-    {
-        "duration": "36.22618824999999",
-        "name": "v8.runtime_stats.top_25/http://inbox.google.com_hot"
-    },
-    {
-        "duration": "33.349916416666666",
-        "name": "v8.runtime_stats.top_25/http://inbox.google.com_warm"
-    },
-    {
-        "duration": "99.80595805405406",
-        "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo"
-    },
-    {
-        "duration": "30.027694499999996",
-        "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_cold"
-    },
-    {
-        "duration": "36.240547666666664",
-        "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_hot"
-    },
-    {
-        "duration": "33.37330683333334",
-        "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_warm"
-    },
-    {
-        "duration": "99.73722910810812",
-        "name": "v8.runtime_stats.top_25/http://meta.discourse.org"
-    },
-    {
-        "duration": "30.05347858333333",
-        "name": "v8.runtime_stats.top_25/http://meta.discourse.org_cold"
-    },
-    {
-        "duration": "36.06603175",
-        "name": "v8.runtime_stats.top_25/http://meta.discourse.org_hot"
-    },
-    {
-        "duration": "33.46276591666667",
-        "name": "v8.runtime_stats.top_25/http://meta.discourse.org_warm"
-    },
-    {
-        "duration": "93.38376099999999",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular"
-    },
-    {
-        "duration": "28.571734083333336",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_cold"
-    },
-    {
-        "duration": "33.60504158333333",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_hot"
-    },
-    {
-        "duration": "31.220284333333336",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_warm"
-    },
-    {
-        "duration": "92.38412478378378",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone"
-    },
-    {
-        "duration": "28.249208166666666",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_cold"
-    },
-    {
-        "duration": "33.194025249999996",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_hot"
-    },
-    {
-        "duration": "30.753574083333334",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_warm"
-    },
-    {
-        "duration": "93.51561732432434",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember"
-    },
-    {
-        "duration": "28.658664416666664",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_cold"
-    },
-    {
-        "duration": "33.6754805",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_hot"
-    },
-    {
-        "duration": "31.067731916666663",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_warm"
-    },
-    {
-        "duration": "92.66144502702704",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery"
-    },
-    {
-        "duration": "28.302838749999996",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_cold"
-    },
-    {
-        "duration": "33.339811499999996",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_hot"
-    },
-    {
-        "duration": "30.992167416666664",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_warm"
-    },
-    {
-        "duration": "92.06579132432432",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla"
-    },
-    {
-        "duration": "28.204714",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_cold"
-    },
-    {
-        "duration": "33.097395",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_hot"
-    },
-    {
-        "duration": "30.73535383333334",
-        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_warm"
-    },
-    {
-        "duration": "100.02539016216217",
-        "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io"
-    },
-    {
-        "duration": "30.516179083333338",
-        "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_cold"
-    },
-    {
-        "duration": "36.08806791666667",
-        "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_hot"
-    },
-    {
-        "duration": "33.51132666666667",
-        "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_warm"
-    },
-    {
-        "duration": "101.03594343243242",
-        "name": "v8.runtime_stats.top_25/http://weibo.com"
-    },
-    {
-        "duration": "30.590286833333337",
-        "name": "v8.runtime_stats.top_25/http://weibo.com_cold"
-    },
-    {
-        "duration": "36.40851008333333",
-        "name": "v8.runtime_stats.top_25/http://weibo.com_hot"
-    },
-    {
-        "duration": "33.953025749999995",
-        "name": "v8.runtime_stats.top_25/http://weibo.com_warm"
-    },
-    {
-        "duration": "98.4698321081081",
-        "name": "v8.runtime_stats.top_25/http://world.taobao.com"
-    },
-    {
-        "duration": "29.82549391666667",
-        "name": "v8.runtime_stats.top_25/http://world.taobao.com_cold"
-    },
-    {
-        "duration": "35.55721225",
-        "name": "v8.runtime_stats.top_25/http://world.taobao.com_hot"
-    },
-    {
-        "duration": "32.89413749999999",
-        "name": "v8.runtime_stats.top_25/http://world.taobao.com_warm"
-    },
-    {
-        "duration": "95.28652145945946",
-        "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8"
-    },
-    {
-        "duration": "29.03061083333333",
-        "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_cold"
-    },
-    {
-        "duration": "34.421959333333334",
-        "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_hot"
-    },
-    {
-        "duration": "31.7086845",
-        "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_warm"
-    },
-    {
-        "duration": "95.40279559459456",
-        "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8"
-    },
-    {
-        "duration": "28.96401933333333",
-        "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_cold"
-    },
-    {
-        "duration": "34.48381808333333",
-        "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_hot"
-    },
-    {
-        "duration": "31.824438416666666",
-        "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_warm"
-    },
-    {
-        "duration": "93.04050781081082",
-        "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine"
-    },
-    {
-        "duration": "28.466535333333336",
-        "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_cold"
-    },
-    {
-        "duration": "33.459131000000006",
-        "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_hot"
-    },
-    {
-        "duration": "30.996298",
-        "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_warm"
-    },
-    {
-        "duration": "109.93758048648648",
-        "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8"
-    },
-    {
-        "duration": "32.617603",
-        "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_cold"
-    },
-    {
-        "duration": "40.61102758333333",
-        "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_hot"
-    },
-    {
-        "duration": "36.71621008333333",
-        "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_warm"
-    },
-    {
-        "duration": "96.93371078378377",
-        "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest"
-    },
-    {
-        "duration": "29.584513666666663",
-        "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_cold"
-    },
-    {
-        "duration": "34.86897208333334",
-        "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_hot"
-    },
-    {
-        "duration": "32.33233433333333",
-        "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_warm"
-    },
-    {
-        "duration": "105.6353258918919",
-        "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae"
-    },
-    {
-        "duration": "31.704007999999998",
-        "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_cold"
-    },
-    {
-        "duration": "38.44192133333333",
-        "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_hot"
-    },
-    {
-        "duration": "35.266108666666675",
-        "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_warm"
-    },
-    {
-        "duration": "100.80386881081078",
-        "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular"
-    },
-    {
-        "duration": "29.98101083333334",
-        "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_cold"
-    },
-    {
-        "duration": "36.88019533333333",
-        "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_hot"
-    },
-    {
-        "duration": "33.678251749999994",
-        "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_warm"
-    },
-    {
-        "duration": "200.40316264864867",
-        "name": "v8.runtime_stats.top_25/http://www.qq.com"
-    },
-    {
-        "duration": "59.918794166666665",
-        "name": "v8.runtime_stats.top_25/http://www.qq.com_cold"
-    },
-    {
-        "duration": "71.86164641666667",
-        "name": "v8.runtime_stats.top_25/http://www.qq.com_hot"
-    },
-    {
-        "duration": "66.33229741666666",
-        "name": "v8.runtime_stats.top_25/http://www.qq.com_warm"
-    },
-    {
-        "duration": "97.67206075675672",
-        "name": "v8.runtime_stats.top_25/http://www.reddit.com"
-    },
-    {
-        "duration": "29.609107249999997",
-        "name": "v8.runtime_stats.top_25/http://www.reddit.com_cold"
-    },
-    {
-        "duration": "35.44513908333334",
-        "name": "v8.runtime_stats.top_25/http://www.reddit.com_hot"
-    },
-    {
-        "duration": "32.586310833333336",
-        "name": "v8.runtime_stats.top_25/http://www.reddit.com_warm"
-    },
-    {
-        "duration": "100.50913637837837",
-        "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13"
-    },
-    {
-        "duration": "30.053586583333338",
-        "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_cold"
-    },
-    {
-        "duration": "36.88432958333334",
-        "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_hot"
-    },
-    {
-        "duration": "33.484170416666664",
-        "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_warm"
-    },
-    {
-        "duration": "98.73035354054052",
-        "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill"
-    },
-    {
-        "duration": "29.815212833333334",
-        "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_cold"
-    },
-    {
-        "duration": "35.93708175",
-        "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_hot"
-    },
-    {
-        "duration": "32.922468583333334",
-        "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_warm"
-    },
-    {
-        "duration": "95.90420835135136",
-        "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp"
-    },
-    {
-        "duration": "29.225590166666667",
-        "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_cold"
-    },
-    {
-        "duration": "34.610729750000004",
-        "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_hot"
-    },
-    {
-        "duration": "32.097509166666676",
-        "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_warm"
-    },
-    {
-        "duration": "95.26409272972974",
-        "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8"
-    },
-    {
-        "duration": "29.04770075",
-        "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_cold"
-    },
-    {
-        "duration": "34.34823366666666",
-        "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_hot"
-    },
-    {
-        "duration": "31.74964683333333",
-        "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_warm"
-    },
-    {
-        "duration": "137.48639548648646",
-        "name": "v8.runtime_stats.top_25/https://adwords.google.com"
-    },
-    {
-        "duration": "38.430442",
-        "name": "v8.runtime_stats.top_25/https://adwords.google.com_cold"
-    },
-    {
-        "duration": "49.790647416666665",
-        "name": "v8.runtime_stats.top_25/https://adwords.google.com_hot"
-    },
-    {
-        "duration": "47.17048416666668",
-        "name": "v8.runtime_stats.top_25/https://adwords.google.com_warm"
-    },
-    {
-        "duration": "91.78008037837836",
-        "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3"
-    },
-    {
-        "duration": "28.183452833333334",
-        "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_cold"
-    },
-    {
-        "duration": "32.95587441666667",
-        "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_hot"
-    },
-    {
-        "duration": "30.56099966666667",
-        "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_warm"
-    },
-    {
-        "duration": "117.0475531081081",
-        "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit"
-    },
-    {
-        "duration": "33.136618250000005",
-        "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_cold"
-    },
-    {
-        "duration": "45.009847916666665",
-        "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_hot"
-    },
-    {
-        "duration": "39.443937999999996",
-        "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_warm"
-    },
-    {
-        "duration": "98.97496070270269",
-        "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira"
-    },
-    {
-        "duration": "29.721123833333333",
-        "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_cold"
-    },
-    {
-        "duration": "36.00557833333334",
-        "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_hot"
-    },
-    {
-        "duration": "33.2247205",
-        "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_warm"
-    },
-    {
-        "duration": "98.38347883783787",
-        "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8"
-    },
-    {
-        "duration": "33.11177825000001",
-        "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_cold"
-    },
-    {
-        "duration": "34.0202655",
-        "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_hot"
-    },
-    {
-        "duration": "31.313557333333332",
-        "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_warm"
-    },
-    {
-        "duration": "98.42558037837837",
-        "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/"
-    },
-    {
-        "duration": "29.832574499999996",
-        "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_cold"
-    },
-    {
-        "duration": "35.43170141666666",
-        "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_hot"
-    },
-    {
-        "duration": "33.052616",
-        "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_warm"
-    },
-    {
-        "duration": "107.81936718918917",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com"
-    },
-    {
-        "duration": "112.82846540540541",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg"
-    },
-    {
-        "duration": "34.544785749999996",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_cold"
-    },
-    {
-        "duration": "41.18494391666667",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_hot"
-    },
-    {
-        "duration": "38.32313566666667",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_warm"
-    },
-    {
-        "duration": "32.282142416666666",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com_cold"
-    },
-    {
-        "duration": "39.43684891666667",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com_hot"
-    },
-    {
-        "duration": "36.179239",
-        "name": "v8.runtime_stats.top_25/https://www.youtube.com_warm"
-    },
-    {
-        "duration": "46.53080114285716",
-        "name": "wasm/WasmSpaceBuggy"
-    },
-    {
-        "duration": "193.2716814081633",
-        "name": "wasm/WasmStylizedRenderer"
-    },
-    {
-        "duration": "163.7476094897959",
-        "name": "wasm/WasmSunTemple"
-    },
-    {
-        "duration": "63.74297829591837",
-        "name": "wasm/WasmTanks"
-    },
-    {
-        "duration": "168.84810285714286",
-        "name": "wasm/WasmZenGarden"
-    },
-    {
-        "duration": "63.809078653061206",
-        "name": "webrtc/10s_datachannel_transfer"
-    },
-    {
-        "duration": "20.1357622244898",
-        "name": "webrtc/canvas_capture_peer_connection"
-    },
-    {
-        "duration": "29.863458000000005",
-        "name": "webrtc/codec_constraints_h264"
-    },
-    {
-        "duration": "29.897266938775516",
-        "name": "webrtc/codec_constraints_vp8"
-    },
-    {
-        "duration": "29.8573076122449",
-        "name": "webrtc/codec_constraints_vp9"
-    },
-    {
-        "duration": "18.758063346938776",
-        "name": "webrtc/hd_local_stream_10s"
-    },
-    {
-        "duration": "47.2713806734694",
-        "name": "webrtc/multiple_peerconnections"
-    },
-    {
-        "duration": "50.00918455102041",
-        "name": "webrtc/pause_play_peerconnections"
-    }
-]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/pixel2_story_timing.json b/tools/perf/core/shard_maps/timing_data/pixel2_story_timing.json
deleted file mode 100644
index 78c4d02..0000000
--- a/tools/perf/core/shard_maps/timing_data/pixel2_story_timing.json
+++ /dev/null
@@ -1,7178 +0,0 @@
-[
-    {
-        "duration": "13.587834459595967",
-        "name": "blink_perf.bindings/append-child.html"
-    },
-    {
-        "duration": "11.239760772727273",
-        "name": "blink_perf.bindings/create-element.html"
-    },
-    {
-        "duration": "10.513632752525254",
-        "name": "blink_perf.bindings/document-implementation.html"
-    },
-    {
-        "duration": "10.551911207070708",
-        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
-    },
-    {
-        "duration": "10.931322707070706",
-        "name": "blink_perf.bindings/first-child.html"
-    },
-    {
-        "duration": "9.23210519191919",
-        "name": "blink_perf.bindings/gc-forest.html"
-    },
-    {
-        "duration": "11.045180338383839",
-        "name": "blink_perf.bindings/gc-mini-tree.html"
-    },
-    {
-        "duration": "23.378834999999995",
-        "name": "blink_perf.bindings/gc-tree.html"
-    },
-    {
-        "duration": "10.512732318181815",
-        "name": "blink_perf.bindings/get-attribute-rare.html"
-    },
-    {
-        "duration": "10.587690656565657",
-        "name": "blink_perf.bindings/get-attribute.html"
-    },
-    {
-        "duration": "10.47878205050505",
-        "name": "blink_perf.bindings/get-element-by-id.html"
-    },
-    {
-        "duration": "10.406168404040406",
-        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
-    },
-    {
-        "duration": "10.74813076767677",
-        "name": "blink_perf.bindings/id-getter.html"
-    },
-    {
-        "duration": "10.317548954545456",
-        "name": "blink_perf.bindings/id-setter.html"
-    },
-    {
-        "duration": "11.335273121212122",
-        "name": "blink_perf.bindings/indexed-getter.html"
-    },
-    {
-        "duration": "10.637710944444445",
-        "name": "blink_perf.bindings/insert-before.html"
-    },
-    {
-        "duration": "11.303045530303036",
-        "name": "blink_perf.bindings/named-property-enumerator.html"
-    },
-    {
-        "duration": "24.28999279797978",
-        "name": "blink_perf.bindings/node-list-access.html"
-    },
-    {
-        "duration": "10.139387459595964",
-        "name": "blink_perf.bindings/node-type.html"
-    },
-    {
-        "duration": "5.555044205050507",
-        "name": "blink_perf.bindings/post-message.html"
-    },
-    {
-        "duration": "11.060310050505048",
-        "name": "blink_perf.bindings/sequence-conversion-array.html"
-    },
-    {
-        "duration": "10.545383222222227",
-        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
-    },
-    {
-        "duration": "5.280190547474746",
-        "name": "blink_perf.bindings/serialize-array.html"
-    },
-    {
-        "duration": "4.688366777777778",
-        "name": "blink_perf.bindings/serialize-long-string.html"
-    },
-    {
-        "duration": "7.858090982828284",
-        "name": "blink_perf.bindings/serialize-map.html"
-    },
-    {
-        "duration": "4.677039381818182",
-        "name": "blink_perf.bindings/serialize-nested-array.html"
-    },
-    {
-        "duration": "10.418247141414142",
-        "name": "blink_perf.bindings/set-attribute-rare.html"
-    },
-    {
-        "duration": "10.441846237373738",
-        "name": "blink_perf.bindings/set-attribute.html"
-    },
-    {
-        "duration": "16.636086989899",
-        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
-    },
-    {
-        "duration": "19.868374999999993",
-        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
-    },
-    {
-        "duration": "7.604728265656568",
-        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
-    },
-    {
-        "duration": "7.652917726262627",
-        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
-    },
-    {
-        "duration": "11.006937772727271",
-        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
-    },
-    {
-        "duration": "10.509213696969693",
-        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
-    },
-    {
-        "duration": "10.426587333333336",
-        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
-    },
-    {
-        "duration": "10.290047454545457",
-        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
-    },
-    {
-        "duration": "10.85639308080808",
-        "name": "blink_perf.bindings/undefined-first-child.html"
-    },
-    {
-        "duration": "10.454334262626265",
-        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
-    },
-    {
-        "duration": "10.928417515151517",
-        "name": "blink_perf.bindings/undefined-id-getter.html"
-    },
-    {
-        "duration": "14.261299287878785",
-        "name": "blink_perf.canvas/createImageBitmapFromImageData.html"
-    },
-    {
-        "duration": "6.163865483838386",
-        "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "11.50101952020202",
-        "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "7.985047120202021",
-        "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html"
-    },
-    {
-        "duration": "5.540703202020201",
-        "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "5.5437108626262654",
-        "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "6.375386761616162",
-        "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "11.201917313131316",
-        "name": "blink_perf.canvas/drawimage-not-pixelaligned.html"
-    },
-    {
-        "duration": "10.790304272727276",
-        "name": "blink_perf.canvas/drawimage.html"
-    },
-    {
-        "duration": "10.964088464646464",
-        "name": "blink_perf.canvas/getImageData.html"
-    },
-    {
-        "duration": "11.512311712121218",
-        "name": "blink_perf.canvas/getImageDataColorManaged.html"
-    },
-    {
-        "duration": "10.6518346969697",
-        "name": "blink_perf.canvas/putImageData.html"
-    },
-    {
-        "duration": "9.449902575757578",
-        "name": "blink_perf.canvas/toBlob_duration.html"
-    },
-    {
-        "duration": "7.626968607070708",
-        "name": "blink_perf.canvas/toBlob_duration_jpeg.html"
-    },
-    {
-        "duration": "4.919188773737375",
-        "name": "blink_perf.canvas/transferFromImageBitmap.html"
-    },
-    {
-        "duration": "7.665410551515155",
-        "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html"
-    },
-    {
-        "duration": "11.812558378787879",
-        "name": "blink_perf.canvas/upload-video-to-sub-texture.html"
-    },
-    {
-        "duration": "5.227142781818179",
-        "name": "blink_perf.canvas/upload-video-to-texture.html"
-    },
-    {
-        "duration": "5.794870611111111",
-        "name": "blink_perf.canvas/upload-webgl-to-texture.html"
-    },
-    {
-        "duration": "18.521025863636353",
-        "name": "blink_perf.css/AttributeDescendantSelector.html"
-    },
-    {
-        "duration": "11.221627323232319",
-        "name": "blink_perf.css/CSSPropertySetterGetter.html"
-    },
-    {
-        "duration": "11.396442313131308",
-        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
-    },
-    {
-        "duration": "10.91281670707071",
-        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
-    },
-    {
-        "duration": "8.941856525252529",
-        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
-    },
-    {
-        "duration": "8.949699303030306",
-        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
-    },
-    {
-        "duration": "8.935473520202024",
-        "name": "blink_perf.css/ChangeStyleElementSelector.html"
-    },
-    {
-        "duration": "8.974114702020204",
-        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
-    },
-    {
-        "duration": "9.015964196969696",
-        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
-    },
-    {
-        "duration": "8.985837772727272",
-        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
-    },
-    {
-        "duration": "9.00448770707071",
-        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
-    },
-    {
-        "duration": "8.92012490909091",
-        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
-    },
-    {
-        "duration": "8.954875803030305",
-        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
-    },
-    {
-        "duration": "8.964201434343432",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "9.059024328282831",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "12.217594186868688",
-        "name": "blink_perf.css/ChangeStyleShallowTree.html"
-    },
-    {
-        "duration": "8.97889354040404",
-        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
-    },
-    {
-        "duration": "9.011338863636357",
-        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
-    },
-    {
-        "duration": "8.98512898989899",
-        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
-    },
-    {
-        "duration": "8.994865939393941",
-        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
-    },
-    {
-        "duration": "9.002904818181822",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "9.058298247474747",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "14.897091777777783",
-        "name": "blink_perf.css/ClassDescendantSelector.html"
-    },
-    {
-        "duration": "17.425745151515148",
-        "name": "blink_perf.css/ClassInvalidation.html"
-    },
-    {
-        "duration": "14.821260959595966",
-        "name": "blink_perf.css/FocusUpdate.html"
-    },
-    {
-        "duration": "9.408519186868688",
-        "name": "blink_perf.css/LoadBootstrapBlog.html"
-    },
-    {
-        "duration": "9.493451419191919",
-        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
-    },
-    {
-        "duration": "10.104893717171716",
-        "name": "blink_perf.css/LoadSemanticPageExample.html"
-    },
-    {
-        "duration": "11.404276474747473",
-        "name": "blink_perf.css/PseudoClassSelectors.html"
-    },
-    {
-        "duration": "11.191480434343436",
-        "name": "blink_perf.css/SelectorCountScaling.html"
-    },
-    {
-        "duration": "15.021564171717177",
-        "name": "blink_perf.dom/addRange.html"
-    },
-    {
-        "duration": "5.192004298989899",
-        "name": "blink_perf.dom/delete-in-password-field.html"
-    },
-    {
-        "duration": "12.986810651515146",
-        "name": "blink_perf.dom/div-editable.html"
-    },
-    {
-        "duration": "4.725931592929295",
-        "name": "blink_perf.dom/inner_html_with_selection.html"
-    },
-    {
-        "duration": "18.564719050505037",
-        "name": "blink_perf.dom/long-sibling-list.html"
-    },
-    {
-        "duration": "7.644268638383838",
-        "name": "blink_perf.dom/modify-element-classname.html"
-    },
-    {
-        "duration": "6.274162549494948",
-        "name": "blink_perf.dom/modify-element-id.html"
-    },
-    {
-        "duration": "6.19380707070707",
-        "name": "blink_perf.dom/modify-element-title.html"
-    },
-    {
-        "duration": "5.033993405050505",
-        "name": "blink_perf.dom/move-down-with-hidden-elements.html"
-    },
-    {
-        "duration": "5.012133815151517",
-        "name": "blink_perf.dom/move-up-with-hidden-elements.html"
-    },
-    {
-        "duration": "4.748340553535356",
-        "name": "blink_perf.dom/remove_child_with_selection.html"
-    },
-    {
-        "duration": "11.165564272727275",
-        "name": "blink_perf.dom/select-multiple-add.html"
-    },
-    {
-        "duration": "10.74407486363636",
-        "name": "blink_perf.dom/select-single-add.html"
-    },
-    {
-        "duration": "10.823724530303025",
-        "name": "blink_perf.dom/select-single-remove.html"
-    },
-    {
-        "duration": "10.757548297979797",
-        "name": "blink_perf.dom/textarea-dom.html"
-    },
-    {
-        "duration": "9.943094131313135",
-        "name": "blink_perf.dom/textarea-edit.html"
-    },
-    {
-        "duration": "24.11383234343434",
-        "name": "blink_perf.events/EventsDispatching.html"
-    },
-    {
-        "duration": "11.818728691919198",
-        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html"
-    },
-    {
-        "duration": "25.892323040404037",
-        "name": "blink_perf.events/EventsDispatchingInShadowTrees.html"
-    },
-    {
-        "duration": "23.09532269696969",
-        "name": "blink_perf.events/hit-test-lots-of-layers.html"
-    },
-    {
-        "duration": "55.58050931818183",
-        "name": "blink_perf.image_decoder/decode-gif.html"
-    },
-    {
-        "duration": "19.149345666666665",
-        "name": "blink_perf.image_decoder/decode-jpeg.html"
-    },
-    {
-        "duration": "54.18863983333335",
-        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
-    },
-    {
-        "duration": "11.636440454545449",
-        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
-    },
-    {
-        "duration": "34.48308398484848",
-        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
-    },
-    {
-        "duration": "18.372660090909093",
-        "name": "blink_perf.image_decoder/decode-png-palette.html"
-    },
-    {
-        "duration": "58.33097940909092",
-        "name": "blink_perf.image_decoder/decode-png.html"
-    },
-    {
-        "duration": "19.64777596212121",
-        "name": "blink_perf.layout/ArabicLineLayout.html"
-    },
-    {
-        "duration": "4.963213977272727",
-        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
-    },
-    {
-        "duration": "10.629994174242427",
-        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
-    },
-    {
-        "duration": "10.580794931818179",
-        "name": "blink_perf.layout/add-remove-inline-floats.html"
-    },
-    {
-        "duration": "10.86555746969697",
-        "name": "blink_perf.layout/attach-inlines-2.html"
-    },
-    {
-        "duration": "10.70388356818182",
-        "name": "blink_perf.layout/attach-inlines.html"
-    },
-    {
-        "duration": "11.384574628787883",
-        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
-    },
-    {
-        "duration": "9.985921151515152",
-        "name": "blink_perf.layout/chapter-reflow-once-random.html"
-    },
-    {
-        "duration": "13.104293401515154",
-        "name": "blink_perf.layout/chapter-reflow-once.html"
-    },
-    {
-        "duration": "10.895307537878786",
-        "name": "blink_perf.layout/chapter-reflow-thrice.html"
-    },
-    {
-        "duration": "11.537742757575751",
-        "name": "blink_perf.layout/chapter-reflow-twice.html"
-    },
-    {
-        "duration": "10.986350462121209",
-        "name": "blink_perf.layout/chapter-reflow.html"
-    },
-    {
-        "duration": "6.242879622727272",
-        "name": "blink_perf.layout/character_fallback.html"
-    },
-    {
-        "duration": "5.1468045818181825",
-        "name": "blink_perf.layout/character_fallback_aat.html"
-    },
-    {
-        "duration": "11.507334712121212",
-        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
-    },
-    {
-        "duration": "11.540611484848487",
-        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
-    },
-    {
-        "duration": "10.91110896969697",
-        "name": "blink_perf.layout/flexbox-column-nowrap.html"
-    },
-    {
-        "duration": "10.928411007575756",
-        "name": "blink_perf.layout/flexbox-column-wrap.html"
-    },
-    {
-        "duration": "11.296202196969697",
-        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
-    },
-    {
-        "duration": "10.989775083333337",
-        "name": "blink_perf.layout/flexbox-lots-of-data.html"
-    },
-    {
-        "duration": "10.897983439393943",
-        "name": "blink_perf.layout/flexbox-row-nowrap.html"
-    },
-    {
-        "duration": "10.888513310606058",
-        "name": "blink_perf.layout/flexbox-row-wrap.html"
-    },
-    {
-        "duration": "10.582628280303027",
-        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
-    },
-    {
-        "duration": "19.5401828939394",
-        "name": "blink_perf.layout/floats_100_100.html"
-    },
-    {
-        "duration": "19.716073242424248",
-        "name": "blink_perf.layout/floats_100_100_nested.html"
-    },
-    {
-        "duration": "12.971180174242427",
-        "name": "blink_perf.layout/floats_10_1000.html"
-    },
-    {
-        "duration": "8.408518916666665",
-        "name": "blink_perf.layout/floats_20_100.html"
-    },
-    {
-        "duration": "9.570559174242424",
-        "name": "blink_perf.layout/floats_20_100_nested.html"
-    },
-    {
-        "duration": "6.523278657575755",
-        "name": "blink_perf.layout/floats_2_100.html"
-    },
-    {
-        "duration": "6.705957857575757",
-        "name": "blink_perf.layout/floats_2_100_nested.html"
-    },
-    {
-        "duration": "10.033174446969694",
-        "name": "blink_perf.layout/floats_50_100.html"
-    },
-    {
-        "duration": "10.537865871212121",
-        "name": "blink_perf.layout/floats_50_100_nested.html"
-    },
-    {
-        "duration": "10.527109765151517",
-        "name": "blink_perf.layout/hindi-line-layout.html"
-    },
-    {
-        "duration": "16.95332476515152",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
-    },
-    {
-        "duration": "15.619114992424244",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
-    },
-    {
-        "duration": "15.528479863636365",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
-    },
-    {
-        "duration": "4.95043504090909",
-        "name": "blink_perf.layout/latin-complex-text.html"
-    },
-    {
-        "duration": "6.4742363939393925",
-        "name": "blink_perf.layout/layers_overlap_2d.html"
-    },
-    {
-        "duration": "6.280976427272727",
-        "name": "blink_perf.layout/layers_overlap_3d.html"
-    },
-    {
-        "duration": "16.543198378787878",
-        "name": "blink_perf.layout/line-layout-line-height.html"
-    },
-    {
-        "duration": "10.257071500000004",
-        "name": "blink_perf.layout/line-layout-repeat-append.html"
-    },
-    {
-        "duration": "10.273773606060605",
-        "name": "blink_perf.layout/line-layout.html"
-    },
-    {
-        "duration": "5.165620595454546",
-        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
-    },
-    {
-        "duration": "5.157440471212122",
-        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
-    },
-    {
-        "duration": "8.964580810606058",
-        "name": "blink_perf.layout/long-line-nowrap.html"
-    },
-    {
-        "duration": "11.047249181818179",
-        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
-    },
-    {
-        "duration": "10.702090075757575",
-        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
-    },
-    {
-        "duration": "10.124141803030303",
-        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
-    },
-    {
-        "duration": "10.580219833333327",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
-    },
-    {
-        "duration": "10.573649484848485",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
-    },
-    {
-        "duration": "10.959451446969696",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
-    },
-    {
-        "duration": "10.973848098484845",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
-    },
-    {
-        "duration": "10.867170484848486",
-        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
-    },
-    {
-        "duration": "11.053059439393936",
-        "name": "blink_perf.layout/nested-grid.html"
-    },
-    {
-        "duration": "10.52026517424242",
-        "name": "blink_perf.layout/nested-percent-height-tables.html"
-    },
-    {
-        "duration": "89.81718410606062",
-        "name": "blink_perf.layout/subtree-detaching.html"
-    },
-    {
-        "duration": "6.711940390909089",
-        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
-    },
-    {
-        "duration": "8.342441642424241",
-        "name": "blink_perf.layout/word-break-break-all.html"
-    },
-    {
-        "duration": "8.331014356060606",
-        "name": "blink_perf.layout/word-break-break-word.html"
-    },
-    {
-        "duration": "8.352563537878785",
-        "name": "blink_perf.layout/word-wrap-break-word.html"
-    },
-    {
-        "duration": "16.583152613636365",
-        "name": "blink_perf.owp_storage/blob-perf-files.html"
-    },
-    {
-        "duration": "13.628787333333333",
-        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
-    },
-    {
-        "duration": "12.571781136363635",
-        "name": "blink_perf.owp_storage/blob-perf-shm.html"
-    },
-    {
-        "duration": "13.711734340909091",
-        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
-    },
-    {
-        "duration": "13.842072219696966",
-        "name": "blink_perf.owp_storage/idb-load-docs.html"
-    },
-    {
-        "duration": "18.452908878787873",
-        "name": "blink_perf.paint/appending-text.html"
-    },
-    {
-        "duration": "20.14564872727273",
-        "name": "blink_perf.paint/color-changes.html"
-    },
-    {
-        "duration": "17.033366530303027",
-        "name": "blink_perf.paint/complex-content-slow-scroll.html"
-    },
-    {
-        "duration": "18.775548151515153",
-        "name": "blink_perf.paint/containment-resize.html"
-    },
-    {
-        "duration": "17.199244500000002",
-        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
-    },
-    {
-        "duration": "20.08668865151515",
-        "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html"
-    },
-    {
-        "duration": "16.149292757575758",
-        "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html"
-    },
-    {
-        "duration": "21.706926530303026",
-        "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html"
-    },
-    {
-        "duration": "16.502104393939394",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html"
-    },
-    {
-        "duration": "19.82705331818182",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html"
-    },
-    {
-        "duration": "14.36117256060606",
-        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
-    },
-    {
-        "duration": "19.598705924242427",
-        "name": "blink_perf.paint/large-table-repaint.html"
-    },
-    {
-        "duration": "13.82645940151515",
-        "name": "blink_perf.paint/move-text-with-mask.html"
-    },
-    {
-        "duration": "17.178388666666667",
-        "name": "blink_perf.paint/paint-offset-changes.html"
-    },
-    {
-        "duration": "20.38152256060606",
-        "name": "blink_perf.paint/transform-changes.html"
-    },
-    {
-        "duration": "16.07976775",
-        "name": "blink_perf.parser/css-parser-yui.html"
-    },
-    {
-        "duration": "17.386472863636357",
-        "name": "blink_perf.parser/html-parser-threaded.html"
-    },
-    {
-        "duration": "21.853963757575755",
-        "name": "blink_perf.parser/html-parser.html"
-    },
-    {
-        "duration": "69.56353942424242",
-        "name": "blink_perf.parser/html5-full-render.html"
-    },
-    {
-        "duration": "10.662754901515152",
-        "name": "blink_perf.parser/iframe-append-remove.html"
-    },
-    {
-        "duration": "10.90224443181818",
-        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
-    },
-    {
-        "duration": "10.681960166666665",
-        "name": "blink_perf.parser/innerHTML-setter.html"
-    },
-    {
-        "duration": "10.807314674242424",
-        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
-    },
-    {
-        "duration": "10.831925674242424",
-        "name": "blink_perf.parser/query-selector-all-attribute.html"
-    },
-    {
-        "duration": "11.105091795454543",
-        "name": "blink_perf.parser/query-selector-all-class-deep.html"
-    },
-    {
-        "duration": "11.797537386363635",
-        "name": "blink_perf.parser/query-selector-all-class-first.html"
-    },
-    {
-        "duration": "13.218019272727274",
-        "name": "blink_perf.parser/query-selector-all-class-last.html"
-    },
-    {
-        "duration": "10.716051863636366",
-        "name": "blink_perf.parser/query-selector-all-class.html"
-    },
-    {
-        "duration": "11.206347242424238",
-        "name": "blink_perf.parser/query-selector-all-deep.html"
-    },
-    {
-        "duration": "11.634603977272725",
-        "name": "blink_perf.parser/query-selector-all-first.html"
-    },
-    {
-        "duration": "12.293061818181819",
-        "name": "blink_perf.parser/query-selector-all-id-deep.html"
-    },
-    {
-        "duration": "11.763428234848478",
-        "name": "blink_perf.parser/query-selector-all-id-first.html"
-    },
-    {
-        "duration": "12.396185719696971",
-        "name": "blink_perf.parser/query-selector-all-id-last.html"
-    },
-    {
-        "duration": "11.12444765909091",
-        "name": "blink_perf.parser/query-selector-all-last.html"
-    },
-    {
-        "duration": "11.03489540909091",
-        "name": "blink_perf.parser/query-selector-deep.html"
-    },
-    {
-        "duration": "11.344192545454547",
-        "name": "blink_perf.parser/query-selector-first.html"
-    },
-    {
-        "duration": "10.857783719696972",
-        "name": "blink_perf.parser/query-selector-id-deep.html"
-    },
-    {
-        "duration": "11.300387401515152",
-        "name": "blink_perf.parser/query-selector-id-last.html"
-    },
-    {
-        "duration": "11.262282765151513",
-        "name": "blink_perf.parser/query-selector-last.html"
-    },
-    {
-        "duration": "9.764694454545452",
-        "name": "blink_perf.parser/simple-url.html"
-    },
-    {
-        "duration": "11.125969931818183",
-        "name": "blink_perf.parser/textarea-parsing.html"
-    },
-    {
-        "duration": "9.993226863636364",
-        "name": "blink_perf.parser/tiny-innerHTML.html"
-    },
-    {
-        "duration": "12.57480140151515",
-        "name": "blink_perf.parser/url-parser.html"
-    },
-    {
-        "duration": "10.966182545454545",
-        "name": "blink_perf.parser/xml-parser.html"
-    },
-    {
-        "duration": "11.11586863939394",
-        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
-    },
-    {
-        "duration": "5.6611273136363645",
-        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
-    },
-    {
-        "duration": "5.653598109090908",
-        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
-    },
-    {
-        "duration": "4.90269429848485",
-        "name": "blink_perf.shadow_dom/shadow-style-share.html"
-    },
-    {
-        "duration": "5.130607460606059",
-        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
-    },
-    {
-        "duration": "5.361778798484848",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html"
-    },
-    {
-        "duration": "6.855338153030303",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html"
-    },
-    {
-        "duration": "10.22941062121212",
-        "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html"
-    },
-    {
-        "duration": "12.30337158333333",
-        "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html"
-    },
-    {
-        "duration": "5.288898934848485",
-        "name": "blink_perf.shadow_dom/v0-content-reprojection.html"
-    },
-    {
-        "duration": "5.001495753030303",
-        "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html"
-    },
-    {
-        "duration": "4.958998028787877",
-        "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html"
-    },
-    {
-        "duration": "5.261190475757573",
-        "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html"
-    },
-    {
-        "duration": "5.059986127272727",
-        "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html"
-    },
-    {
-        "duration": "23.265520636363636",
-        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
-    },
-    {
-        "duration": "4.782141246969698",
-        "name": "blink_perf.shadow_dom/v1-distribution.html"
-    },
-    {
-        "duration": "5.256581668181816",
-        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
-    },
-    {
-        "duration": "23.354278651515155",
-        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
-    },
-    {
-        "duration": "54.05395863636365",
-        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
-    },
-    {
-        "duration": "4.712703980303029",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
-    },
-    {
-        "duration": "4.862228392424241",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
-    },
-    {
-        "duration": "5.543714574242425",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
-    },
-    {
-        "duration": "4.813201033333331",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "4.849370819696972",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "5.04153889393939",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
-    },
-    {
-        "duration": "4.808243568181816",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "4.877508533333333",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "4.734194792424241",
-        "name": "blink_perf.shadow_dom/v1-slot-append.html"
-    },
-    {
-        "duration": "6.771816106060607",
-        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
-    },
-    {
-        "duration": "6.786325333333333",
-        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
-    },
-    {
-        "duration": "4.745192875757579",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
-    },
-    {
-        "duration": "4.73679453787879",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
-    },
-    {
-        "duration": "10.15372015454545",
-        "name": "blink_perf.svg/AzLizardBenjiPark.html"
-    },
-    {
-        "duration": "7.90432928030303",
-        "name": "blink_perf.svg/Bamboo.html"
-    },
-    {
-        "duration": "5.4649278712121205",
-        "name": "blink_perf.svg/Cactus.html"
-    },
-    {
-        "duration": "5.489333209090909",
-        "name": "blink_perf.svg/Cowboy.html"
-    },
-    {
-        "duration": "6.030909733333334",
-        "name": "blink_perf.svg/Cowboy_transform.html"
-    },
-    {
-        "duration": "5.087424456060604",
-        "name": "blink_perf.svg/CrawFishGanson.html"
-    },
-    {
-        "duration": "5.210256219696969",
-        "name": "blink_perf.svg/Debian.html"
-    },
-    {
-        "duration": "4.973094025757578",
-        "name": "blink_perf.svg/DropsOnABlade.html"
-    },
-    {
-        "duration": "5.004054616666668",
-        "name": "blink_perf.svg/FlowerFromMyGarden.html"
-    },
-    {
-        "duration": "5.298171553030302",
-        "name": "blink_perf.svg/FoodLeifLodahl.html"
-    },
-    {
-        "duration": "5.208752695454547",
-        "name": "blink_perf.svg/France.html"
-    },
-    {
-        "duration": "5.050560446969697",
-        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
-    },
-    {
-        "duration": "5.50171499242424",
-        "name": "blink_perf.svg/GearFlowers.html"
-    },
-    {
-        "duration": "5.1581381318181805",
-        "name": "blink_perf.svg/HarveyRayner.html"
-    },
-    {
-        "duration": "5.019907843939395",
-        "name": "blink_perf.svg/HereGear.html"
-    },
-    {
-        "duration": "8.52206115151515",
-        "name": "blink_perf.svg/MtSaintHelens.html"
-    },
-    {
-        "duration": "4.89660365757576",
-        "name": "blink_perf.svg/Samurai.html"
-    },
-    {
-        "duration": "66.42898866666665",
-        "name": "blink_perf.svg/SierpinskiCarpet.html"
-    },
-    {
-        "duration": "5.87822677878788",
-        "name": "blink_perf.svg/SvgCubics.html"
-    },
-    {
-        "duration": "6.239055715151516",
-        "name": "blink_perf.svg/SvgHitTesting.html"
-    },
-    {
-        "duration": "12.367562378787877",
-        "name": "blink_perf.svg/SvgNestedUse.html"
-    },
-    {
-        "duration": "5.184255339393942",
-        "name": "blink_perf.svg/UnderTheSee.html"
-    },
-    {
-        "duration": "6.130055104545458",
-        "name": "blink_perf.svg/WorldIso.html"
-    },
-    {
-        "duration": "7.972588556060606",
-        "name": "blink_perf.svg/Worldcup.html"
-    },
-    {
-        "duration": "39.69682522727274",
-        "name": "dromaeo/http://dromaeo.com?dom-attr"
-    },
-    {
-        "duration": "35.98756934848485",
-        "name": "dromaeo/http://dromaeo.com?dom-modify"
-    },
-    {
-        "duration": "50.600674757575746",
-        "name": "dromaeo/http://dromaeo.com?dom-query"
-    },
-    {
-        "duration": "30.81567275757576",
-        "name": "dromaeo/http://dromaeo.com?dom-traverse"
-    },
-    {
-        "duration": "17.253589454545455",
-        "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "9.67037065909091",
-        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "9.073332128787877",
-        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "278.7251378461538",
-        "name": "jetstream/http://browserbench.org/JetStream/"
-    },
-    {
-        "duration": "56.53709648484848",
-        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
-    },
-    {
-        "duration": "107.52323303846157",
-        "name": "loading.mobile/58Pic"
-    },
-    {
-        "duration": "100.05581913333332",
-        "name": "loading.mobile/58Pic_3g"
-    },
-    {
-        "duration": "167.60022638461533",
-        "name": "loading.mobile/Amazon"
-    },
-    {
-        "duration": "167.85247126666667",
-        "name": "loading.mobile/Amazon_3g"
-    },
-    {
-        "duration": "163.1113446461538",
-        "name": "loading.mobile/BOLNoticias"
-    },
-    {
-        "duration": "155.50695833333333",
-        "name": "loading.mobile/BOLNoticias_3g"
-    },
-    {
-        "duration": "122.19372130769231",
-        "name": "loading.mobile/Baidu"
-    },
-    {
-        "duration": "112.25818993333334",
-        "name": "loading.mobile/Baidu_3g"
-    },
-    {
-        "duration": "213.45433889230767",
-        "name": "loading.mobile/Bradesco"
-    },
-    {
-        "duration": "223.47369220000002",
-        "name": "loading.mobile/Bradesco_3g"
-    },
-    {
-        "duration": "146.79930493846152",
-        "name": "loading.mobile/Dailymotion"
-    },
-    {
-        "duration": "137.0027515333333",
-        "name": "loading.mobile/Dailymotion_3g"
-    },
-    {
-        "duration": "177.88518243076928",
-        "name": "loading.mobile/Dawn"
-    },
-    {
-        "duration": "165.98744533333334",
-        "name": "loading.mobile/Dawn_3g"
-    },
-    {
-        "duration": "313.36554194999997",
-        "name": "loading.mobile/DevOpera"
-    },
-    {
-        "duration": "30.505520733333324",
-        "name": "loading.mobile/DevOpera_cold"
-    },
-    {
-        "duration": "100.40028113333334",
-        "name": "loading.mobile/DevOpera_cold_3g"
-    },
-    {
-        "duration": "44.41601073333333",
-        "name": "loading.mobile/DevOpera_hot"
-    },
-    {
-        "duration": "52.763043333333336",
-        "name": "loading.mobile/DevOpera_hot_3g"
-    },
-    {
-        "duration": "37.16069986666666",
-        "name": "loading.mobile/DevOpera_warm"
-    },
-    {
-        "duration": "44.68267719999999",
-        "name": "loading.mobile/DevOpera_warm_3g"
-    },
-    {
-        "duration": "205.1364055538461",
-        "name": "loading.mobile/Dramaq"
-    },
-    {
-        "duration": "209.21178546666667",
-        "name": "loading.mobile/Dramaq_3g"
-    },
-    {
-        "duration": "116.40636109230768",
-        "name": "loading.mobile/EnquiryIndianRail"
-    },
-    {
-        "duration": "107.71191486666666",
-        "name": "loading.mobile/EnquiryIndianRail_3g"
-    },
-    {
-        "duration": "135.2013001384615",
-        "name": "loading.mobile/Facebook"
-    },
-    {
-        "duration": "121.79421633333332",
-        "name": "loading.mobile/Facebook_3g"
-    },
-    {
-        "duration": "396.71720212",
-        "name": "loading.mobile/FlipBoard"
-    },
-    {
-        "duration": "32.7583266",
-        "name": "loading.mobile/FlipBoard_cold"
-    },
-    {
-        "duration": "134.86177593333332",
-        "name": "loading.mobile/FlipBoard_cold_3g"
-    },
-    {
-        "duration": "52.17803086666666",
-        "name": "loading.mobile/FlipBoard_hot"
-    },
-    {
-        "duration": "65.38209073333333",
-        "name": "loading.mobile/FlipBoard_hot_3g"
-    },
-    {
-        "duration": "41.94588233333332",
-        "name": "loading.mobile/FlipBoard_warm"
-    },
-    {
-        "duration": "66.95657353333333",
-        "name": "loading.mobile/FlipBoard_warm_3g"
-    },
-    {
-        "duration": "410.6971056800001",
-        "name": "loading.mobile/FlipKart"
-    },
-    {
-        "duration": "39.56136826666666",
-        "name": "loading.mobile/FlipKart_cold"
-    },
-    {
-        "duration": "129.94245399999997",
-        "name": "loading.mobile/FlipKart_cold_3g"
-    },
-    {
-        "duration": "61.97186093333333",
-        "name": "loading.mobile/FlipKart_hot"
-    },
-    {
-        "duration": "68.49379706666667",
-        "name": "loading.mobile/FlipKart_hot_3g"
-    },
-    {
-        "duration": "49.4746306",
-        "name": "loading.mobile/FlipKart_warm"
-    },
-    {
-        "duration": "56.40376766666666",
-        "name": "loading.mobile/FlipKart_warm_3g"
-    },
-    {
-        "duration": "135.95217075384616",
-        "name": "loading.mobile/FranceTVInfo"
-    },
-    {
-        "duration": "127.35940079999997",
-        "name": "loading.mobile/FranceTVInfo_3g"
-    },
-    {
-        "duration": "172.8278667333333",
-        "name": "loading.mobile/G1_3g"
-    },
-    {
-        "duration": "324.2226966",
-        "name": "loading.mobile/GSShop"
-    },
-    {
-        "duration": "354.436104",
-        "name": "loading.mobile/GSShop_3g"
-    },
-    {
-        "duration": "116.25108245384618",
-        "name": "loading.mobile/GoogleBrazil"
-    },
-    {
-        "duration": "109.3250758",
-        "name": "loading.mobile/GoogleBrazil_3g"
-    },
-    {
-        "duration": "111.73103581538464",
-        "name": "loading.mobile/GoogleIndia"
-    },
-    {
-        "duration": "96.936955",
-        "name": "loading.mobile/GoogleIndia_3g"
-    },
-    {
-        "duration": "106.83934045384613",
-        "name": "loading.mobile/GoogleIndonesia"
-    },
-    {
-        "duration": "97.90354180000001",
-        "name": "loading.mobile/GoogleIndonesia_3g"
-    },
-    {
-        "duration": "142.3462195076923",
-        "name": "loading.mobile/GoogleRedirectToGoogleJapan"
-    },
-    {
-        "duration": "138.24982219999998",
-        "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g"
-    },
-    {
-        "duration": "165.1557994153846",
-        "name": "loading.mobile/Hongkiat"
-    },
-    {
-        "duration": "167.02218606666665",
-        "name": "loading.mobile/Hongkiat_3g"
-    },
-    {
-        "duration": "187.4672539230769",
-        "name": "loading.mobile/KapanLagi"
-    },
-    {
-        "duration": "184.01562186666663",
-        "name": "loading.mobile/KapanLagi_3g"
-    },
-    {
-        "duration": "234.05339158461538",
-        "name": "loading.mobile/Kaskus"
-    },
-    {
-        "duration": "226.97062653333333",
-        "name": "loading.mobile/Kaskus_3g"
-    },
-    {
-        "duration": "165.51583686153845",
-        "name": "loading.mobile/LocalMoxie"
-    },
-    {
-        "duration": "167.51700340000005",
-        "name": "loading.mobile/LocalMoxie_3g"
-    },
-    {
-        "duration": "91.88295398461538",
-        "name": "loading.mobile/Locanto"
-    },
-    {
-        "duration": "80.34943026666669",
-        "name": "loading.mobile/Locanto_3g"
-    },
-    {
-        "duration": "176.03035696923075",
-        "name": "loading.mobile/OLX"
-    },
-    {
-        "duration": "175.40800073333332",
-        "name": "loading.mobile/OLX_3g"
-    },
-    {
-        "duration": "120.53497514062502",
-        "name": "loading.mobile/QQNews"
-    },
-    {
-        "duration": "111.25076513333333",
-        "name": "loading.mobile/QQNews_3g"
-    },
-    {
-        "duration": "164.9188812769232",
-        "name": "loading.mobile/SlideShare"
-    },
-    {
-        "duration": "166.61505866666664",
-        "name": "loading.mobile/SlideShare_3g"
-    },
-    {
-        "duration": "259.37265744000007",
-        "name": "loading.mobile/Suumo"
-    },
-    {
-        "duration": "28.880256933333335",
-        "name": "loading.mobile/Suumo_cold"
-    },
-    {
-        "duration": "56.68194999999999",
-        "name": "loading.mobile/Suumo_cold_3g"
-    },
-    {
-        "duration": "39.46534646666667",
-        "name": "loading.mobile/Suumo_hot"
-    },
-    {
-        "duration": "51.51235079999999",
-        "name": "loading.mobile/Suumo_hot_3g"
-    },
-    {
-        "duration": "34.15940153333333",
-        "name": "loading.mobile/Suumo_warm"
-    },
-    {
-        "duration": "45.89467766666667",
-        "name": "loading.mobile/Suumo_warm_3g"
-    },
-    {
-        "duration": "228.9731369846154",
-        "name": "loading.mobile/Thairath"
-    },
-    {
-        "duration": "242.46081586666665",
-        "name": "loading.mobile/Thairath_3g"
-    },
-    {
-        "duration": "206.2408761230769",
-        "name": "loading.mobile/TheStar"
-    },
-    {
-        "duration": "197.96474146666665",
-        "name": "loading.mobile/TheStar_3g"
-    },
-    {
-        "duration": "181.3499239846154",
-        "name": "loading.mobile/TribunNews"
-    },
-    {
-        "duration": "171.7631786666667",
-        "name": "loading.mobile/TribunNews_3g"
-    },
-    {
-        "duration": "134.26954559230768",
-        "name": "loading.mobile/Twitter"
-    },
-    {
-        "duration": "127.48345793333334",
-        "name": "loading.mobile/Twitter_3g"
-    },
-    {
-        "duration": "325.2927588299999",
-        "name": "loading.mobile/VoiceMemos"
-    },
-    {
-        "duration": "30.396680333333332",
-        "name": "loading.mobile/VoiceMemos_cold"
-    },
-    {
-        "duration": "105.01340840000003",
-        "name": "loading.mobile/VoiceMemos_cold_3g"
-    },
-    {
-        "duration": "44.113669066666674",
-        "name": "loading.mobile/VoiceMemos_hot"
-    },
-    {
-        "duration": "55.35937126666668",
-        "name": "loading.mobile/VoiceMemos_hot_3g"
-    },
-    {
-        "duration": "36.93952906666666",
-        "name": "loading.mobile/VoiceMemos_warm"
-    },
-    {
-        "duration": "47.824252200000004",
-        "name": "loading.mobile/VoiceMemos_warm_3g"
-    },
-    {
-        "duration": "124.7222270923077",
-        "name": "loading.mobile/Wikipedia"
-    },
-    {
-        "duration": "120.58657446666666",
-        "name": "loading.mobile/Wikipedia_3g"
-    },
-    {
-        "duration": "160.604162765625",
-        "name": "loading.mobile/YahooNews"
-    },
-    {
-        "duration": "148.68260180000001",
-        "name": "loading.mobile/YahooNews_3g"
-    },
-    {
-        "duration": "135.5393666153846",
-        "name": "loading.mobile/Youtube"
-    },
-    {
-        "duration": "132.32437006666666",
-        "name": "loading.mobile/Youtube_3g"
-    },
-    {
-        "duration": "21.24939717171718",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4"
-    },
-    {
-        "duration": "26.03683221212121",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4"
-    },
-    {
-        "duration": "26.213318828282823",
-        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true"
-    },
-    {
-        "duration": "25.25627998989899",
-        "name": "media.mobile/mse.html?media=h264_video.mp4"
-    },
-    {
-        "duration": "34.82783053535353",
-        "name": "media.mobile/video.html?src=crowd.ogg&type=audio"
-    },
-    {
-        "duration": "32.279935878787875",
-        "name": "media.mobile/video.html?src=crowd1080_vp9.webm"
-    },
-    {
-        "duration": "19.281950464646467",
-        "name": "media.mobile/video.html?src=crowd1080_vp9.webm&seek"
-    },
-    {
-        "duration": "31.10666787878789",
-        "name": "media.mobile/video.html?src=crowd720_vp9.webm"
-    },
-    {
-        "duration": "33.848842010101016",
-        "name": "media.mobile/video.html?src=tulip2.m4a&type=audio"
-    },
-    {
-        "duration": "33.78299957575758",
-        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio"
-    },
-    {
-        "duration": "14.087182712121217",
-        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek"
-    },
-    {
-        "duration": "43.87389878787881",
-        "name": "media.mobile/video.html?src=tulip2.mp4"
-    },
-    {
-        "duration": "43.81735842424245",
-        "name": "media.mobile/video.html?src=tulip2.mp4&busyjs"
-    },
-    {
-        "duration": "16.790740762626264",
-        "name": "media.mobile/video.html?src=tulip2.mp4&seek"
-    },
-    {
-        "duration": "34.09435347474748",
-        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio"
-    },
-    {
-        "duration": "14.2713458989899",
-        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek"
-    },
-    {
-        "duration": "44.32619838383837",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm"
-    },
-    {
-        "duration": "27.980532454545454",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm&background"
-    },
-    {
-        "duration": "18.740082393939396",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm&seek"
-    },
-    {
-        "duration": "69.04647203030301",
-        "name": "media.mobile/video.html?src=tulip2.vp9.webm_Regular-3G"
-    },
-    {
-        "duration": "35.64098121212122",
-        "name": "media.mobile/video.html?src=tulip2.wav&type=audio"
-    },
-    {
-        "duration": "15.105394449494952",
-        "name": "media.mobile/video.html?src=tulip2.wav&type=audio&seek"
-    },
-    {
-        "duration": "313.13759565656574",
-        "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "263.0782863636363",
-        "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "95.39291023232323",
-        "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "92.56024308080808",
-        "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "94.59132239393936",
-        "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "94.0484232121212",
-        "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "94.66216905050506",
-        "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "93.96992194949492",
-        "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "93.44764560606058",
-        "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "94.74681208080806",
-        "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "93.63647751487876",
-        "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "95.51037868686869",
-        "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "106.27090719191922",
-        "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science"
-    },
-    {
-        "duration": "103.0880054545455",
-        "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html"
-    },
-    {
-        "duration": "105.25786681818181",
-        "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science"
-    },
-    {
-        "duration": "103.25233905050504",
-        "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google"
-    },
-    {
-        "duration": "103.99477319191917",
-        "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus"
-    },
-    {
-        "duration": "105.59880055555556",
-        "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google"
-    },
-    {
-        "duration": "103.90586176767677",
-        "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science"
-    },
-    {
-        "duration": "104.51037772727273",
-        "name": "memory.top_10_mobile/https_m_facebook_com_rihanna"
-    },
-    {
-        "duration": "103.8921435555555",
-        "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true"
-    },
-    {
-        "duration": "110.4933926161616",
-        "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science"
-    },
-    {
-        "duration": "57.676217898989904",
-        "name": "octane/http://chromium.github.io/octane/index.html?auto=1"
-    },
-    {
-        "duration": "17.790955383333333",
-        "name": "oortonline_tbmv2/http://oortonline.gl/#run"
-    },
-    {
-        "duration": "62.6399386",
-        "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom"
-    },
-    {
-        "duration": "64.39047839999999",
-        "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180"
-    },
-    {
-        "duration": "57.245820466666686",
-        "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404"
-    },
-    {
-        "duration": "65.23663941666668",
-        "name": "power.typical_10_mobile/http://m.facebook.com/barackobama"
-    },
-    {
-        "duration": "62.4100658",
-        "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486"
-    },
-    {
-        "duration": "62.212606083333334",
-        "name": "power.typical_10_mobile/http://m.ynet.co.il"
-    },
-    {
-        "duration": "62.68811421666666",
-        "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/"
-    },
-    {
-        "duration": "57.50153171666667",
-        "name": "power.typical_10_mobile/http://wapbaike.baidu.com/"
-    },
-    {
-        "duration": "58.97407369999999",
-        "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html"
-    },
-    {
-        "duration": "63.66980021666666",
-        "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html"
-    },
-    {
-        "duration": "62.37853528333333",
-        "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif"
-    },
-    {
-        "duration": "13.255696093220335",
-        "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html"
-    },
-    {
-        "duration": "19.50659640000001",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
-    },
-    {
-        "duration": "11.106294258333337",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
-    },
-    {
-        "duration": "14.895659566666668",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
-    },
-    {
-        "duration": "14.157721599999995",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
-    },
-    {
-        "duration": "9.645622133333337",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
-    },
-    {
-        "duration": "24.03670534999999",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
-    },
-    {
-        "duration": "12.601975141666667",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
-    },
-    {
-        "duration": "21.210229733333325",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
-    },
-    {
-        "duration": "17.8354892",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
-    },
-    {
-        "duration": "15.042138266666672",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
-    },
-    {
-        "duration": "19.209764999999997",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
-    },
-    {
-        "duration": "16.098406208333333",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
-    },
-    {
-        "duration": "21.713479950000004",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
-    },
-    {
-        "duration": "11.98567595833333",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
-    },
-    {
-        "duration": "9.01860170833333",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
-    },
-    {
-        "duration": "29.298682099999997",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
-    },
-    {
-        "duration": "20.98417083333333",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
-    },
-    {
-        "duration": "14.852985850000001",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
-    },
-    {
-        "duration": "11.922956708333329",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
-    },
-    {
-        "duration": "11.525540524999998",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
-    },
-    {
-        "duration": "28.58345276666667",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
-    },
-    {
-        "duration": "112.9260113833333",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
-    },
-    {
-        "duration": "85.72044521666668",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
-    },
-    {
-        "duration": "29.213187016666655",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
-    },
-    {
-        "duration": "29.341133315789467",
-        "name": "rendering.mobile/amazon_pinch"
-    },
-    {
-        "duration": "26.054161105263162",
-        "name": "rendering.mobile/amazon_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.99429996491227",
-        "name": "rendering.mobile/analog_clock_svg"
-    },
-    {
-        "duration": "29.347947263157884",
-        "name": "rendering.mobile/androidpolice_mobile"
-    },
-    {
-        "duration": "26.784817175438604",
-        "name": "rendering.mobile/androidpolice_mobile_sync_scroll"
-    },
-    {
-        "duration": "5.789607577083334",
-        "name": "rendering.mobile/animometer_webgl"
-    },
-    {
-        "duration": "5.263783063265305",
-        "name": "rendering.mobile/aquarium"
-    },
-    {
-        "duration": "38.12127053061224",
-        "name": "rendering.mobile/background_color_animation"
-    },
-    {
-        "duration": "27.543808551020412",
-        "name": "rendering.mobile/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "19.11436661538461",
-        "name": "rendering.mobile/baidu_mobile"
-    },
-    {
-        "duration": "17.533078961538468",
-        "name": "rendering.mobile/baidu_mobile_sync_scroll"
-    },
-    {
-        "duration": "26.33392405769231",
-        "name": "rendering.mobile/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "29.511901923076927",
-        "name": "rendering.mobile/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "29.662963538461536",
-        "name": "rendering.mobile/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "29.595483499999997",
-        "name": "rendering.mobile/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "29.36249467307693",
-        "name": "rendering.mobile/balls_javascript_canvas"
-    },
-    {
-        "duration": "29.094791038461537",
-        "name": "rendering.mobile/balls_javascript_css"
-    },
-    {
-        "duration": "35.82739665384614",
-        "name": "rendering.mobile/balls_svg_animations"
-    },
-    {
-        "duration": "36.06161625",
-        "name": "rendering.mobile/basic_stream"
-    },
-    {
-        "duration": "22.92474157692307",
-        "name": "rendering.mobile/bing_mobile"
-    },
-    {
-        "duration": "19.364980663461544",
-        "name": "rendering.mobile/bing_mobile_sync_scroll"
-    },
-    {
-        "duration": "9.050939483673469",
-        "name": "rendering.mobile/blob"
-    },
-    {
-        "duration": "38.10789823076924",
-        "name": "rendering.mobile/blogspot"
-    },
-    {
-        "duration": "36.52867684615384",
-        "name": "rendering.mobile/blogspot_desktop_gpu_raster"
-    },
-    {
-        "duration": "18.339349346153845",
-        "name": "rendering.mobile/blogspot_mobile"
-    },
-    {
-        "duration": "16.875009788461533",
-        "name": "rendering.mobile/blogspot_mobile_sync_scroll"
-    },
-    {
-        "duration": "39.9163040576923",
-        "name": "rendering.mobile/boingboing_mobile"
-    },
-    {
-        "duration": "27.020806153846145",
-        "name": "rendering.mobile/booking.com"
-    },
-    {
-        "duration": "25.03820176923076",
-        "name": "rendering.mobile/booking.com_desktop_gpu_raster"
-    },
-    {
-        "duration": "18.99673567307693",
-        "name": "rendering.mobile/booking.com_mobile"
-    },
-    {
-        "duration": "20.16257765384615",
-        "name": "rendering.mobile/booking.com_mobile_sync_scroll"
-    },
-    {
-        "duration": "32.48449505263157",
-        "name": "rendering.mobile/booking_pinch"
-    },
-    {
-        "duration": "29.438815052631586",
-        "name": "rendering.mobile/booking_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.655240461538476",
-        "name": "rendering.mobile/bouncing_balls_15"
-    },
-    {
-        "duration": "20.108891999999994",
-        "name": "rendering.mobile/bouncing_balls_shadow"
-    },
-    {
-        "duration": "20.029719096153844",
-        "name": "rendering.mobile/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "21.08235580769231",
-        "name": "rendering.mobile/bouncing_gradient_circles"
-    },
-    {
-        "duration": "17.23781751923077",
-        "name": "rendering.mobile/bouncing_png_images"
-    },
-    {
-        "duration": "28.91448932692308",
-        "name": "rendering.mobile/bouncing_svg_images"
-    },
-    {
-        "duration": "27.072729212765957",
-        "name": "rendering.mobile/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "27.006038404255314",
-        "name": "rendering.mobile/canvas_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.397579787234037",
-        "name": "rendering.mobile/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "26.821318085106377",
-        "name": "rendering.mobile/canvas_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.60649959574468",
-        "name": "rendering.mobile/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "27.081017680851065",
-        "name": "rendering.mobile/canvas_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.917157702127653",
-        "name": "rendering.mobile/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "27.19769036170213",
-        "name": "rendering.mobile/canvas_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.000487382978733",
-        "name": "rendering.mobile/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "27.39826714893617",
-        "name": "rendering.mobile/canvas_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.040289723404253",
-        "name": "rendering.mobile/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "25.127854063829787",
-        "name": "rendering.mobile/canvas_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.769509148936173",
-        "name": "rendering.mobile/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "23.037095063829785",
-        "name": "rendering.mobile/canvas_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "22.36634774468086",
-        "name": "rendering.mobile/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "21.282437765957447",
-        "name": "rendering.mobile/canvas_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.102009574468084",
-        "name": "rendering.mobile/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "19.991859702127655",
-        "name": "rendering.mobile/canvas_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.59968059574468",
-        "name": "rendering.mobile/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.724215148936167",
-        "name": "rendering.mobile/canvas_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "22.665043211538457",
-        "name": "rendering.mobile/canvas_animation_no_clear"
-    },
-    {
-        "duration": "20.004008923076924",
-        "name": "rendering.mobile/canvas_arcs"
-    },
-    {
-        "duration": "19.293225596153846",
-        "name": "rendering.mobile/canvas_font_cycler"
-    },
-    {
-        "duration": "19.717842923076926",
-        "name": "rendering.mobile/canvas_lines"
-    },
-    {
-        "duration": "21.068836134615385",
-        "name": "rendering.mobile/canvas_to_blob"
-    },
-    {
-        "duration": "28.634411230769235",
-        "name": "rendering.mobile/capitolvolkswagen_mobile"
-    },
-    {
-        "duration": "27.89577171153847",
-        "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll"
-    },
-    {
-        "duration": "22.20602420454546",
-        "name": "rendering.mobile/card_expansion"
-    },
-    {
-        "duration": "24.270744568181826",
-        "name": "rendering.mobile/card_expansion_animated"
-    },
-    {
-        "duration": "23.783354977272733",
-        "name": "rendering.mobile/card_expansion_images_text"
-    },
-    {
-        "duration": "21.67107145454546",
-        "name": "rendering.mobile/card_flying"
-    },
-    {
-        "duration": "14.112007053191492",
-        "name": "rendering.mobile/cats_unscaled"
-    },
-    {
-        "duration": "13.057023691489356",
-        "name": "rendering.mobile/cats_viewport_width"
-    },
-    {
-        "duration": "24.80217840384616",
-        "name": "rendering.mobile/chip_tune"
-    },
-    {
-        "duration": "45.16864417307693",
-        "name": "rendering.mobile/cnn_article_mobile"
-    },
-    {
-        "duration": "44.43502398076925",
-        "name": "rendering.mobile/cnn_article_mobile_sync_scroll"
-    },
-    {
-        "duration": "21.052123038461538",
-        "name": "rendering.mobile/cnn_mobile"
-    },
-    {
-        "duration": "21.35466438461539",
-        "name": "rendering.mobile/cnn_mobile_sync_scroll"
-    },
-    {
-        "duration": "39.44312235555555",
-        "name": "rendering.mobile/cnn_pathological"
-    },
-    {
-        "duration": "38.93837584210526",
-        "name": "rendering.mobile/cnn_pinch"
-    },
-    {
-        "duration": "37.80607400000001",
-        "name": "rendering.mobile/cnn_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.57825884615384",
-        "name": "rendering.mobile/compositor_heavy_animation"
-    },
-    {
-        "duration": "22.743929886363638",
-        "name": "rendering.mobile/coordinated_animation"
-    },
-    {
-        "duration": "26.348093365384617",
-        "name": "rendering.mobile/crafty_mind"
-    },
-    {
-        "duration": "28.8859227254902",
-        "name": "rendering.mobile/css_animations_many_keyframes"
-    },
-    {
-        "duration": "27.852970647058818",
-        "name": "rendering.mobile/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "28.577126196078428",
-        "name": "rendering.mobile/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "27.70570245098039",
-        "name": "rendering.mobile/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "34.880054",
-        "name": "rendering.mobile/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "26.37174911764706",
-        "name": "rendering.mobile/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "30.593213352941184",
-        "name": "rendering.mobile/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "31.59856996078432",
-        "name": "rendering.mobile/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "62.4097879215686",
-        "name": "rendering.mobile/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "48.35077492156863",
-        "name": "rendering.mobile/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "58.57746405882355",
-        "name": "rendering.mobile/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "49.00698280392157",
-        "name": "rendering.mobile/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "89.23013015686276",
-        "name": "rendering.mobile/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "62.35913450980394",
-        "name": "rendering.mobile/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "56.83898917647059",
-        "name": "rendering.mobile/css_transitions_inline_style"
-    },
-    {
-        "duration": "46.702051647058816",
-        "name": "rendering.mobile/css_transitions_new_element"
-    },
-    {
-        "duration": "39.39574711764706",
-        "name": "rendering.mobile/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "28.938629745098048",
-        "name": "rendering.mobile/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "39.834643431372555",
-        "name": "rendering.mobile/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "46.25937050980392",
-        "name": "rendering.mobile/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "39.04988656862745",
-        "name": "rendering.mobile/css_transitions_style_element"
-    },
-    {
-        "duration": "29.638031901960787",
-        "name": "rendering.mobile/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "32.94149964705881",
-        "name": "rendering.mobile/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "50.93289684313722",
-        "name": "rendering.mobile/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "86.36406637254902",
-        "name": "rendering.mobile/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "74.41728568627452",
-        "name": "rendering.mobile/css_transitions_updating_class"
-    },
-    {
-        "duration": "65.3003653137255",
-        "name": "rendering.mobile/css_value_type_color"
-    },
-    {
-        "duration": "95.2882173137255",
-        "name": "rendering.mobile/css_value_type_filter"
-    },
-    {
-        "duration": "42.54464109803922",
-        "name": "rendering.mobile/css_value_type_length"
-    },
-    {
-        "duration": "312.9624935882353",
-        "name": "rendering.mobile/css_value_type_length_complex"
-    },
-    {
-        "duration": "29.799692980392155",
-        "name": "rendering.mobile/css_value_type_length_simple"
-    },
-    {
-        "duration": "41.55756037254903",
-        "name": "rendering.mobile/css_value_type_path"
-    },
-    {
-        "duration": "56.018719411764714",
-        "name": "rendering.mobile/css_value_type_shadow"
-    },
-    {
-        "duration": "49.159544627450984",
-        "name": "rendering.mobile/css_value_type_transform_complex"
-    },
-    {
-        "duration": "91.97470168627453",
-        "name": "rendering.mobile/css_value_type_transform_simple"
-    },
-    {
-        "duration": "103.99900092156862",
-        "name": "rendering.mobile/cuteoverload_mobile"
-    },
-    {
-        "duration": "69.52930352941175",
-        "name": "rendering.mobile/deviantart_mobile"
-    },
-    {
-        "duration": "34.253059529411765",
-        "name": "rendering.mobile/deviantart_mobile_sync_scroll"
-    },
-    {
-        "duration": "5.727505841666669",
-        "name": "rendering.mobile/dynamic_cube_map"
-    },
-    {
-        "duration": "5.756727175000001",
-        "name": "rendering.mobile/earth"
-    },
-    {
-        "duration": "19.097833647058824",
-        "name": "rendering.mobile/ebay"
-    },
-    {
-        "duration": "17.46403050980392",
-        "name": "rendering.mobile/ebay_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.7893034117647",
-        "name": "rendering.mobile/ebay_mobile"
-    },
-    {
-        "duration": "23.730393901960788",
-        "name": "rendering.mobile/ebay_mobile_sync_scroll"
-    },
-    {
-        "duration": "32.782306421052624",
-        "name": "rendering.mobile/ebay_pinch"
-    },
-    {
-        "duration": "31.169536789473682",
-        "name": "rendering.mobile/ebay_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.7939034",
-        "name": "rendering.mobile/ebay_scroll"
-    },
-    {
-        "duration": "25.995283450980388",
-        "name": "rendering.mobile/effect_games"
-    },
-    {
-        "duration": "16.48990105882353",
-        "name": "rendering.mobile/espn"
-    },
-    {
-        "duration": "14.723379882352944",
-        "name": "rendering.mobile/espn_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.37457115909092",
-        "name": "rendering.mobile/espn_pathological"
-    },
-    {
-        "duration": "37.27421952631579",
-        "name": "rendering.mobile/espn_pinch"
-    },
-    {
-        "duration": "36.618955578947364",
-        "name": "rendering.mobile/espn_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.20366414583334",
-        "name": "rendering.mobile/extra_large_texture_uploads"
-    },
-    {
-        "duration": "28.336947372549016",
-        "name": "rendering.mobile/facebook"
-    },
-    {
-        "duration": "28.340273764705884",
-        "name": "rendering.mobile/facebook_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.06542843137255",
-        "name": "rendering.mobile/facebook_mobile"
-    },
-    {
-        "duration": "23.437752019607842",
-        "name": "rendering.mobile/facebook_mobile_sync_scroll"
-    },
-    {
-        "duration": "29.869838368421053",
-        "name": "rendering.mobile/facebook_pinch"
-    },
-    {
-        "duration": "26.997607421052642",
-        "name": "rendering.mobile/facebook_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.636915647058824",
-        "name": "rendering.mobile/fill_shapes"
-    },
-    {
-        "duration": "26.264729235294116",
-        "name": "rendering.mobile/filter_terrain_svg"
-    },
-    {
-        "duration": "36.097841",
-        "name": "rendering.mobile/flickr_scroll"
-    },
-    {
-        "duration": "22.28931472727273",
-        "name": "rendering.mobile/font_wipe"
-    },
-    {
-        "duration": "20.006805529411757",
-        "name": "rendering.mobile/geo_apis"
-    },
-    {
-        "duration": "35.30246139215687",
-        "name": "rendering.mobile/gmail"
-    },
-    {
-        "duration": "35.01093390196079",
-        "name": "rendering.mobile/gmail_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.7940074736842",
-        "name": "rendering.mobile/gmail_pinch"
-    },
-    {
-        "duration": "36.09664731578946",
-        "name": "rendering.mobile/gmail_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.382879215686273",
-        "name": "rendering.mobile/google_calendar"
-    },
-    {
-        "duration": "27.911785274509803",
-        "name": "rendering.mobile/google_calendar_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.246936842105264",
-        "name": "rendering.mobile/google_calendar_pinch"
-    },
-    {
-        "duration": "30.351618315789473",
-        "name": "rendering.mobile/google_calendar_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "49.629602019607844",
-        "name": "rendering.mobile/google_docs"
-    },
-    {
-        "duration": "50.03094049019606",
-        "name": "rendering.mobile/google_docs_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.84461336842106",
-        "name": "rendering.mobile/google_image_pinch"
-    },
-    {
-        "duration": "30.827028157894734",
-        "name": "rendering.mobile/google_image_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "36.53977588235295",
-        "name": "rendering.mobile/google_image_search"
-    },
-    {
-        "duration": "35.945629705882354",
-        "name": "rendering.mobile/google_image_search_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.36629375",
-        "name": "rendering.mobile/google_news_ios"
-    },
-    {
-        "duration": "32.51577392156864",
-        "name": "rendering.mobile/google_news_mobile"
-    },
-    {
-        "duration": "31.875256058823524",
-        "name": "rendering.mobile/google_news_mobile_sync_scroll"
-    },
-    {
-        "duration": "42.13466994117646",
-        "name": "rendering.mobile/google_plus"
-    },
-    {
-        "duration": "42.25526937254901",
-        "name": "rendering.mobile/google_plus_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.080830686274503",
-        "name": "rendering.mobile/google_plus_mobile"
-    },
-    {
-        "duration": "26.284100647058825",
-        "name": "rendering.mobile/google_plus_mobile_sync_scroll"
-    },
-    {
-        "duration": "28.81550836842105",
-        "name": "rendering.mobile/google_search_pinch"
-    },
-    {
-        "duration": "26.24149342105264",
-        "name": "rendering.mobile/google_search_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.073119392156865",
-        "name": "rendering.mobile/google_web_search"
-    },
-    {
-        "duration": "17.341037480392156",
-        "name": "rendering.mobile/google_web_search_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.949745431372552",
-        "name": "rendering.mobile/google_web_search_mobile"
-    },
-    {
-        "duration": "18.878674196078432",
-        "name": "rendering.mobile/google_web_search_mobile_sync_scroll"
-    },
-    {
-        "duration": "22.140670901960792",
-        "name": "rendering.mobile/gsp.ro_mobile"
-    },
-    {
-        "duration": "20.770584627450976",
-        "name": "rendering.mobile/gsp.ro_mobile_sync_scroll"
-    },
-    {
-        "duration": "25.15886615909091",
-        "name": "rendering.mobile/guardian_pathological"
-    },
-    {
-        "duration": "33.64647917647059",
-        "name": "rendering.mobile/guimark_vector_chart"
-    },
-    {
-        "duration": "22.404259",
-        "name": "rendering.mobile/gws_boogie_expansion"
-    },
-    {
-        "duration": "22.82478286363636",
-        "name": "rendering.mobile/gws_google_expansion"
-    },
-    {
-        "duration": "23.573140039215684",
-        "name": "rendering.mobile/hakim"
-    },
-    {
-        "duration": "23.67961047727272",
-        "name": "rendering.mobile/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "40.20451971153846",
-        "name": "rendering.mobile/ie_chalkboard"
-    },
-    {
-        "duration": "37.40646729411764",
-        "name": "rendering.mobile/ie_pirate_mark"
-    },
-    {
-        "duration": "34.56065447727272",
-        "name": "rendering.mobile/infinite_scrolling"
-    },
-    {
-        "duration": "25.087927882352936",
-        "name": "rendering.mobile/jarro_doverson"
-    },
-    {
-        "duration": "25.72107784313726",
-        "name": "rendering.mobile/kevs_3d"
-    },
-    {
-        "duration": "27.672757176470583",
-        "name": "rendering.mobile/keyframed_animations"
-    },
-    {
-        "duration": "27.27932883333334",
-        "name": "rendering.mobile/large_texture_uploads"
-    },
-    {
-        "duration": "38.64680811363636",
-        "name": "rendering.mobile/latimes_pathological"
-    },
-    {
-        "duration": "21.519666823529416",
-        "name": "rendering.mobile/linkedin"
-    },
-    {
-        "duration": "19.588728901960785",
-        "name": "rendering.mobile/linkedin_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.789640333333338",
-        "name": "rendering.mobile/linkedin_mobile"
-    },
-    {
-        "duration": "24.039456725490197",
-        "name": "rendering.mobile/linkedin_mobile_sync_scroll"
-    },
-    {
-        "duration": "31.232848886363623",
-        "name": "rendering.mobile/linkedin_pathological"
-    },
-    {
-        "duration": "29.03943236842105",
-        "name": "rendering.mobile/linkedin_pinch"
-    },
-    {
-        "duration": "26.51477815789474",
-        "name": "rendering.mobile/linkedin_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.159037045454546",
-        "name": "rendering.mobile/list_animation_simple"
-    },
-    {
-        "duration": "33.570327704545456",
-        "name": "rendering.mobile/list_recycle_transform"
-    },
-    {
-        "duration": "24.95482347058823",
-        "name": "rendering.mobile/man_in_blue"
-    },
-    {
-        "duration": "34.02968207843137",
-        "name": "rendering.mobile/many_images"
-    },
-    {
-        "duration": "5.782965824999999",
-        "name": "rendering.mobile/many_planets_deep"
-    },
-    {
-        "duration": "45.03647960416666",
-        "name": "rendering.mobile/maps_perf_test"
-    },
-    {
-        "duration": "23.74194879545455",
-        "name": "rendering.mobile/mask_transition_animation"
-    },
-    {
-        "duration": "22.41856390909091",
-        "name": "rendering.mobile/masonry"
-    },
-    {
-        "duration": "30.51278116666667",
-        "name": "rendering.mobile/medium_texture_uploads"
-    },
-    {
-        "duration": "22.695113607843144",
-        "name": "rendering.mobile/megi_dish"
-    },
-    {
-        "duration": "25.943913156862738",
-        "name": "rendering.mobile/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "22.455089882352937",
-        "name": "rendering.mobile/microsoft_fireflies"
-    },
-    {
-        "duration": "23.54788215686274",
-        "name": "rendering.mobile/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "23.493530450980394",
-        "name": "rendering.mobile/microsoft_snow"
-    },
-    {
-        "duration": "23.219627117647057",
-        "name": "rendering.mobile/microsoft_speed_reading"
-    },
-    {
-        "duration": "23.499787274509803",
-        "name": "rendering.mobile/microsoft_tweet_map"
-    },
-    {
-        "duration": "31.540959156862744",
-        "name": "rendering.mobile/microsoft_video_city"
-    },
-    {
-        "duration": "22.5547732745098",
-        "name": "rendering.mobile/microsoft_worker_fountains"
-    },
-    {
-        "duration": "21.640479843137257",
-        "name": "rendering.mobile/mix_10k"
-    },
-    {
-        "duration": "30.384050117647053",
-        "name": "rendering.mobile/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "26.928567196078436",
-        "name": "rendering.mobile/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "35.021297156862744",
-        "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "30.09406009803922",
-        "name": "rendering.mobile/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "16.961271019607846",
-        "name": "rendering.mobile/mlb_mobile"
-    },
-    {
-        "duration": "16.818421470588234",
-        "name": "rendering.mobile/mlb_mobile_sync_scroll"
-    },
-    {
-        "duration": "19.65778802272727",
-        "name": "rendering.mobile/mobile_news_sandbox"
-    },
-    {
-        "duration": "32.061840843137254",
-        "name": "rendering.mobile/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "33.59855758823529",
-        "name": "rendering.mobile/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "90.84168896078432",
-        "name": "rendering.mobile/motion_mark_focus"
-    },
-    {
-        "duration": "5.838184987500001",
-        "name": "rendering.mobile/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "39.17759592",
-        "name": "rendering.mobile/nyc_gov_scroll"
-    },
-    {
-        "duration": "90.55883611764708",
-        "name": "rendering.mobile/nytimes_mobile"
-    },
-    {
-        "duration": "36.87142461999999",
-        "name": "rendering.mobile/nytimes_scroll"
-    },
-    {
-        "duration": "43.029484215686274",
-        "name": "rendering.mobile/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "24.978122318181818",
-        "name": "rendering.mobile/parallax_effect"
-    },
-    {
-        "duration": "5.729800233333333",
-        "name": "rendering.mobile/particles"
-    },
-    {
-        "duration": "35.96384186363637",
-        "name": "rendering.mobile/pbs_pathological"
-    },
-    {
-        "duration": "18.698105659090917",
-        "name": "rendering.mobile/physical_simulation"
-    },
-    {
-        "duration": "34.868267882352946",
-        "name": "rendering.mobile/pinterest"
-    },
-    {
-        "duration": "35.50329182352941",
-        "name": "rendering.mobile/pinterest_mobile"
-    },
-    {
-        "duration": "35.755550529411764",
-        "name": "rendering.mobile/pinterest_mobile_sync_scroll"
-    },
-    {
-        "duration": "19.942987352941177",
-        "name": "rendering.mobile/put_get_image_data"
-    },
-    {
-        "duration": "27.471840680851074",
-        "name": "rendering.mobile/raf"
-    },
-    {
-        "duration": "27.10564119148935",
-        "name": "rendering.mobile/raf_animation"
-    },
-    {
-        "duration": "26.623981",
-        "name": "rendering.mobile/raf_canvas"
-    },
-    {
-        "duration": "27.818764765957443",
-        "name": "rendering.mobile/raf_touch_animation"
-    },
-    {
-        "duration": "37.62733470454546",
-        "name": "rendering.mobile/recode_pathological"
-    },
-    {
-        "duration": "31.272377620000007",
-        "name": "rendering.mobile/reddit_mobile"
-    },
-    {
-        "duration": "23.60933108",
-        "name": "rendering.mobile/runway"
-    },
-    {
-        "duration": "5.779116644680851",
-        "name": "rendering.mobile/san_angeles"
-    },
-    {
-        "duration": "23.33717570212767",
-        "name": "rendering.mobile/second_batch_js_heavy"
-    },
-    {
-        "duration": "19.00569394680851",
-        "name": "rendering.mobile/second_batch_js_light"
-    },
-    {
-        "duration": "19.227557914893612",
-        "name": "rendering.mobile/second_batch_js_medium"
-    },
-    {
-        "duration": "25.762527740000007",
-        "name": "rendering.mobile/sfgate_mobile"
-    },
-    {
-        "duration": "24.90392328",
-        "name": "rendering.mobile/sfgate_mobile_sync_scroll"
-    },
-    {
-        "duration": "33.32818961363636",
-        "name": "rendering.mobile/silk_finance"
-    },
-    {
-        "duration": "27.714919085106377",
-        "name": "rendering.mobile/simple_text_page"
-    },
-    {
-        "duration": "20.273325297872343",
-        "name": "rendering.mobile/simple_touch_drag"
-    },
-    {
-        "duration": "30.410717419999997",
-        "name": "rendering.mobile/slashdot_mobile"
-    },
-    {
-        "duration": "19.92312593181818",
-        "name": "rendering.mobile/slide_drawer"
-    },
-    {
-        "duration": "31.247145595744673",
-        "name": "rendering.mobile/small_texture_uploads"
-    },
-    {
-        "duration": "27.84613124",
-        "name": "rendering.mobile/smash_cat"
-    },
-    {
-        "duration": "21.271625399999998",
-        "name": "rendering.mobile/spielzeugz"
-    },
-    {
-        "duration": "21.500537977272725",
-        "name": "rendering.mobile/sticky_using_webkit"
-    },
-    {
-        "duration": "37.67723186363636",
-        "name": "rendering.mobile/stress_hidey_bars"
-    },
-    {
-        "duration": "21.773221379999995",
-        "name": "rendering.mobile/stroke_shapes"
-    },
-    {
-        "duration": "35.17739097727272",
-        "name": "rendering.mobile/svg_icon_raster"
-    },
-    {
-        "duration": "15.973672056818184",
-        "name": "rendering.mobile/swipe_action"
-    },
-    {
-        "duration": "22.639817386363635",
-        "name": "rendering.mobile/swipe_to_dismiss"
-    },
-    {
-        "duration": "28.249280021276597",
-        "name": "rendering.mobile/sync_scroll_offset"
-    },
-    {
-        "duration": "52.06401728571429",
-        "name": "rendering.mobile/techcrunch"
-    },
-    {
-        "duration": "50.450015729166644",
-        "name": "rendering.mobile/techcrunch_desktop_gpu_raster"
-    },
-    {
-        "duration": "22.023380520000003",
-        "name": "rendering.mobile/techcrunch_mobile"
-    },
-    {
-        "duration": "20.880047679999997",
-        "name": "rendering.mobile/techcrunch_mobile_sync_scroll"
-    },
-    {
-        "duration": "28.75954887234042",
-        "name": "rendering.mobile/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "27.917519063829786",
-        "name": "rendering.mobile/text_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.96455504255319",
-        "name": "rendering.mobile/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "28.7507625106383",
-        "name": "rendering.mobile/text_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.368394659574463",
-        "name": "rendering.mobile/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "29.043803765957442",
-        "name": "rendering.mobile/text_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.981438489361697",
-        "name": "rendering.mobile/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "29.57334987234043",
-        "name": "rendering.mobile/text_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "31.613731702127648",
-        "name": "rendering.mobile/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "30.03895289361703",
-        "name": "rendering.mobile/text_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.9882345319149",
-        "name": "rendering.mobile/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "27.152157127659567",
-        "name": "rendering.mobile/text_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.801533914893618",
-        "name": "rendering.mobile/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "24.43239946808511",
-        "name": "rendering.mobile/text_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "23.962020787234046",
-        "name": "rendering.mobile/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "22.54777455319149",
-        "name": "rendering.mobile/text_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "22.579263042553183",
-        "name": "rendering.mobile/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "21.360744446808507",
-        "name": "rendering.mobile/text_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "21.25218210638298",
-        "name": "rendering.mobile/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "19.872735212765953",
-        "name": "rendering.mobile/text_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.340021510638298",
-        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "25.27512465957447",
-        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.401923127659572",
-        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "25.572935531914897",
-        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.913665765957443",
-        "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "25.751572255319147",
-        "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.251759170212765",
-        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "25.982612297872336",
-        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.41671306382979",
-        "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "26.191134659574477",
-        "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.21561491489361",
-        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "25.19680744680851",
-        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.514229957446815",
-        "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "22.684990957446807",
-        "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.40954712765958",
-        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "20.9911140212766",
-        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.235782361702128",
-        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "22.946062893617018",
-        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.06416429787234",
-        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.120105276595744",
-        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.434260999999996",
-        "name": "rendering.mobile/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "20.451995744680847",
-        "name": "rendering.mobile/text_hover_05000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.338325744680848",
-        "name": "rendering.mobile/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "20.36557768085106",
-        "name": "rendering.mobile/text_hover_10000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.42906182978724",
-        "name": "rendering.mobile/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "20.225606999999993",
-        "name": "rendering.mobile/text_hover_15000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.514491638297866",
-        "name": "rendering.mobile/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "20.15768878723404",
-        "name": "rendering.mobile/text_hover_20000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "20.371316680851066",
-        "name": "rendering.mobile/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "20.351732659574466",
-        "name": "rendering.mobile/text_hover_30000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "19.09484661702128",
-        "name": "rendering.mobile/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "19.063366063829786",
-        "name": "rendering.mobile/text_hover_40000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "17.82487268085107",
-        "name": "rendering.mobile/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "17.649837170212766",
-        "name": "rendering.mobile/text_hover_50000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "17.016724255319147",
-        "name": "rendering.mobile/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "17.045624085106386",
-        "name": "rendering.mobile/text_hover_60000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "16.325106170212766",
-        "name": "rendering.mobile/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "16.15029017021277",
-        "name": "rendering.mobile/text_hover_75000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "15.717707478723403",
-        "name": "rendering.mobile/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "15.656940042553193",
-        "name": "rendering.mobile/text_hover_90000_pixels_per_second_desktop_gpu_raster"
-    },
-    {
-        "duration": "35.984204260000006",
-        "name": "rendering.mobile/theverge_article_mobile"
-    },
-    {
-        "duration": "35.29241742",
-        "name": "rendering.mobile/theverge_article_mobile_sync_scroll"
-    },
-    {
-        "duration": "22.780288679999998",
-        "name": "rendering.mobile/theverge_mobile"
-    },
-    {
-        "duration": "22.930250240000007",
-        "name": "rendering.mobile/theverge_mobile_sync_scroll"
-    },
-    {
-        "duration": "26.544942022727277",
-        "name": "rendering.mobile/toggle_drawer"
-    },
-    {
-        "duration": "28.50480059574467",
-        "name": "rendering.mobile/touch_handler_scrolling"
-    },
-    {
-        "duration": "31.102286799999987",
-        "name": "rendering.mobile/transform_transitions"
-    },
-    {
-        "duration": "30.33988155999999",
-        "name": "rendering.mobile/transform_transitions_js_block"
-    },
-    {
-        "duration": "25.10539366",
-        "name": "rendering.mobile/twitter"
-    },
-    {
-        "duration": "22.97974698",
-        "name": "rendering.mobile/twitter_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.890595166666664",
-        "name": "rendering.mobile/twitter_pinch"
-    },
-    {
-        "duration": "30.604881777777777",
-        "name": "rendering.mobile/twitter_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.859755818181824",
-        "name": "rendering.mobile/update_history_state"
-    },
-    {
-        "duration": "38.74125613999998",
-        "name": "rendering.mobile/usatoday_mobile"
-    },
-    {
-        "duration": "36.088973460000005",
-        "name": "rendering.mobile/usatoday_mobile_sync_scroll"
-    },
-    {
-        "duration": "24.87695840909091",
-        "name": "rendering.mobile/vertical_expansion"
-    },
-    {
-        "duration": "30.792588680851072",
-        "name": "rendering.mobile/weather.com"
-    },
-    {
-        "duration": "29.552285306122453",
-        "name": "rendering.mobile/weather.com_desktop_gpu_raster"
-    },
-    {
-        "duration": "44.86782222222221",
-        "name": "rendering.mobile/weather_pinch"
-    },
-    {
-        "duration": "41.68619666666667",
-        "name": "rendering.mobile/weather_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "29.660354239999993",
-        "name": "rendering.mobile/web_animation_value_type_color"
-    },
-    {
-        "duration": "28.24523242",
-        "name": "rendering.mobile/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "29.10765554000001",
-        "name": "rendering.mobile/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "29.656485439999987",
-        "name": "rendering.mobile/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "30.431331280000006",
-        "name": "rendering.mobile/web_animation_value_type_path"
-    },
-    {
-        "duration": "27.317870739999993",
-        "name": "rendering.mobile/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "27.893964299999997",
-        "name": "rendering.mobile/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "28.27138308",
-        "name": "rendering.mobile/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "30.748335559999997",
-        "name": "rendering.mobile/web_animations_many_keyframes"
-    },
-    {
-        "duration": "28.603182979999993",
-        "name": "rendering.mobile/web_animations_set_current_time"
-    },
-    {
-        "duration": "29.049554059999995",
-        "name": "rendering.mobile/web_animations_simultaneous"
-    },
-    {
-        "duration": "30.535248719999995",
-        "name": "rendering.mobile/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "27.133919939999995",
-        "name": "rendering.mobile/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "30.750542699999997",
-        "name": "rendering.mobile/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "33.813109419999996",
-        "name": "rendering.mobile/wikipedia"
-    },
-    {
-        "duration": "26.058306960000003",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "26.299913619999998",
-        "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll"
-    },
-    {
-        "duration": "33.68655296",
-        "name": "rendering.mobile/wikipedia_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.97258190000001",
-        "name": "rendering.mobile/wikipedia_mobile"
-    },
-    {
-        "duration": "26.32137323999999",
-        "name": "rendering.mobile/wikipedia_mobile_sync_scroll"
-    },
-    {
-        "duration": "40.7665784",
-        "name": "rendering.mobile/wordpress"
-    },
-    {
-        "duration": "38.93617841999999",
-        "name": "rendering.mobile/wordpress_desktop_gpu_raster"
-    },
-    {
-        "duration": "37.86740561999999",
-        "name": "rendering.mobile/wordpress_mobile"
-    },
-    {
-        "duration": "37.38060232000001",
-        "name": "rendering.mobile/wordpress_mobile_sync_scroll"
-    },
-    {
-        "duration": "37.94390764",
-        "name": "rendering.mobile/worldjournal_mobile"
-    },
-    {
-        "duration": "38.35215835999999",
-        "name": "rendering.mobile/worldjournal_mobile_sync_scroll"
-    },
-    {
-        "duration": "37.79652136363636",
-        "name": "rendering.mobile/wow_wiki_pathological"
-    },
-    {
-        "duration": "46.97339012244899",
-        "name": "rendering.mobile/wowwiki_mobile"
-    },
-    {
-        "duration": "46.21493371428571",
-        "name": "rendering.mobile/wowwiki_mobile_sync_scroll"
-    },
-    {
-        "duration": "22.069057200000003",
-        "name": "rendering.mobile/wsj_mobile"
-    },
-    {
-        "duration": "20.5240269",
-        "name": "rendering.mobile/wsj_mobile_sync_scroll"
-    },
-    {
-        "duration": "22.098378679999996",
-        "name": "rendering.mobile/yahoo_answers"
-    },
-    {
-        "duration": "20.501370100000003",
-        "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster"
-    },
-    {
-        "duration": "24.801385820000004",
-        "name": "rendering.mobile/yahoo_answers_mobile"
-    },
-    {
-        "duration": "26.4597648",
-        "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll"
-    },
-    {
-        "duration": "34.70652144",
-        "name": "rendering.mobile/yahoo_games"
-    },
-    {
-        "duration": "34.24327786",
-        "name": "rendering.mobile/yahoo_games_desktop_gpu_raster"
-    },
-    {
-        "duration": "39.32545022222222",
-        "name": "rendering.mobile/yahoo_games_pinch"
-    },
-    {
-        "duration": "36.93065950000001",
-        "name": "rendering.mobile/yahoo_games_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "26.889744900000004",
-        "name": "rendering.mobile/yahoo_news"
-    },
-    {
-        "duration": "25.210249879999996",
-        "name": "rendering.mobile/yahoo_news_desktop_gpu_raster"
-    },
-    {
-        "duration": "25.62603016000001",
-        "name": "rendering.mobile/yahoo_news_mobile"
-    },
-    {
-        "duration": "24.540794199999997",
-        "name": "rendering.mobile/yahoo_news_mobile_sync_scroll"
-    },
-    {
-        "duration": "38.6499435",
-        "name": "rendering.mobile/yahoo_news_pinch"
-    },
-    {
-        "duration": "35.24173011111111",
-        "name": "rendering.mobile/yahoo_news_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "27.506845780000003",
-        "name": "rendering.mobile/yahoo_sports"
-    },
-    {
-        "duration": "26.549425460000002",
-        "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster"
-    },
-    {
-        "duration": "33.326363318181805",
-        "name": "rendering.mobile/yahoo_sports_pathological"
-    },
-    {
-        "duration": "55.777929111111106",
-        "name": "rendering.mobile/yahoo_sports_pinch"
-    },
-    {
-        "duration": "52.34752677777778",
-        "name": "rendering.mobile/yahoo_sports_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "30.54288938888889",
-        "name": "rendering.mobile/youtube"
-    },
-    {
-        "duration": "30.332753904761915",
-        "name": "rendering.mobile/youtube_desktop_gpu_raster"
-    },
-    {
-        "duration": "17.257728",
-        "name": "rendering.mobile/youtube_mobile"
-    },
-    {
-        "duration": "15.70759307",
-        "name": "rendering.mobile/youtube_mobile_sync_scroll"
-    },
-    {
-        "duration": "34.53229438888889",
-        "name": "rendering.mobile/youtube_pinch"
-    },
-    {
-        "duration": "32.239342444444446",
-        "name": "rendering.mobile/youtube_pinch_desktop_gpu_raster"
-    },
-    {
-        "duration": "28.479548808510636",
-        "name": "rendering.mobile/yuv_decoding"
-    },
-    {
-        "duration": "29.71611604255319",
-        "name": "rendering.mobile/yuv_decoding_gpu_rasterization_and_decoding"
-    },
-    {
-        "duration": "32.35079602272726",
-        "name": "rendering.mobile/zdnet_pathological"
-    },
-    {
-        "duration": "22.948478863636357",
-        "name": "rendering.mobile/zoom_in_animation"
-    },
-    {
-        "duration": "18.799325103275866",
-        "name": "scheduler.tough_scheduling_cases/raf"
-    },
-    {
-        "duration": "19.206051087719295",
-        "name": "scheduler.tough_scheduling_cases/raf_animation"
-    },
-    {
-        "duration": "18.377707333333333",
-        "name": "scheduler.tough_scheduling_cases/raf_canvas"
-    },
-    {
-        "duration": "19.20640322807018",
-        "name": "scheduler.tough_scheduling_cases/raf_touch_animation"
-    },
-    {
-        "duration": "11.874989918181816",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy"
-    },
-    {
-        "duration": "11.683113199999998",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_light"
-    },
-    {
-        "duration": "11.851276027272727",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_medium"
-    },
-    {
-        "duration": "29.872416683333324",
-        "name": "scheduler.tough_scheduling_cases/simple_text_page"
-    },
-    {
-        "duration": "14.140314789473683",
-        "name": "scheduler.tough_scheduling_cases/simple_touch_drag"
-    },
-    {
-        "duration": "18.88684450909091",
-        "name": "scheduler.tough_scheduling_cases/sync_scroll_offset"
-    },
-    {
-        "duration": "19.297371916666673",
-        "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling"
-    },
-    {
-        "duration": "14.938089",
-        "name": "smoothness.gpu_rasterization.polymer/core_scroll_header_panel"
-    },
-    {
-        "duration": "18.91615",
-        "name": "smoothness.gpu_rasterization.polymer/paper_button"
-    },
-    {
-        "duration": "27.555199",
-        "name": "smoothness.gpu_rasterization.polymer/paper_calculator"
-    },
-    {
-        "duration": "23.664267",
-        "name": "smoothness.gpu_rasterization.polymer/paper_checkbox"
-    },
-    {
-        "duration": "18.841707",
-        "name": "smoothness.gpu_rasterization.polymer/paper_fab"
-    },
-    {
-        "duration": "43.18708",
-        "name": "smoothness.gpu_rasterization.polymer/paper_icon_button"
-    },
-    {
-        "duration": "20.55393",
-        "name": "smoothness.gpu_rasterization.polymer/paper_shadow"
-    },
-    {
-        "duration": "56.13814",
-        "name": "smoothness.gpu_rasterization.polymer/paper_tabs"
-    },
-    {
-        "duration": "14.650763",
-        "name": "smoothness.gpu_rasterization.polymer/paper_toggle_button"
-    },
-    {
-        "duration": "24.81473103030303",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "17.69833766666667",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "13.284247050505044",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/ebay"
-    },
-    {
-        "duration": "16.260108803030313",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/espn"
-    },
-    {
-        "duration": "19.716015373737374",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/facebook"
-    },
-    {
-        "duration": "30.54843738383838",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/gmail"
-    },
-    {
-        "duration": "18.927520373737373",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "28.270295404040414",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "21.80036748484849",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "26.115059040404045",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "13.011311494949497",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "16.765825737373728",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "24.87675916161616",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "19.43501411111111",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/twitter"
-    },
-    {
-        "duration": "16.953301833333327",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "23.511424575757577",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "22.052779939393943",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "15.078567",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "24.296289060606057",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "18.020234747474742",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "18.094719636363642",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "19.296133989898998",
-        "name": "smoothness.gpu_rasterization.top_25_smooth/youtube"
-    },
-    {
-        "duration": "22.071408696969684",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG"
-    },
-    {
-        "duration": "22.246296454545455",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG"
-    },
-    {
-        "duration": "24.591974010101023",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark"
-    },
-    {
-        "duration": "26.023366161616153",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus"
-    },
-    {
-        "duration": "21.864080090909095",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "22.275277202020206",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "24.57534975757575",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "26.052543727272727",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "26.766590575757576",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test"
-    },
-    {
-        "duration": "33.42531311111112",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard"
-    },
-    {
-        "duration": "21.027038525252525",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes"
-    },
-    {
-        "duration": "21.222493080808086",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes"
-    },
-    {
-        "duration": "26.922234545454554",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "33.29083424242425",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "20.898740303030305",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "21.072023646464643",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "20.457519626262627",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Blogger"
-    },
-    {
-        "duration": "20.234898565656568",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ESPN"
-    },
-    {
-        "duration": "17.716905282828282",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Facebook"
-    },
-    {
-        "duration": "17.521131757575752",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/LinkedIn"
-    },
-    {
-        "duration": "19.673153646464645",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Twitter"
-    },
-    {
-        "duration": "23.46269215151515",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Weather.com"
-    },
-    {
-        "duration": "17.135128101010096",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/amazon_pinch"
-    },
-    {
-        "duration": "20.052489999999985",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/blogspot_pinch"
-    },
-    {
-        "duration": "18.50391045454545",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/booking_pinch"
-    },
-    {
-        "duration": "20.944398686868684",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/cnn_pinch"
-    },
-    {
-        "duration": "18.376026101010098",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ebay_pinch"
-    },
-    {
-        "duration": "20.068561888888887",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/espn_pinch"
-    },
-    {
-        "duration": "17.35824208050505",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/facebook_pinch"
-    },
-    {
-        "duration": "21.377881696969705",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/gmail_pinch"
-    },
-    {
-        "duration": "20.00883534343434",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_calendar_pinch"
-    },
-    {
-        "duration": "18.033614686868678",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_image_pinch"
-    },
-    {
-        "duration": "23.226142202020192",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_search_pinch"
-    },
-    {
-        "duration": "18.611691414141408",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://booking.com"
-    },
-    {
-        "duration": "24.200457676767673",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com"
-    },
-    {
-        "duration": "21.442634242424248",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://news.yahoo.com"
-    },
-    {
-        "duration": "23.978675454545474",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://sports.yahoo.com/"
-    },
-    {
-        "duration": "17.163681292929297",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.amazon.com"
-    },
-    {
-        "duration": "21.11834083838384",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.cnn.com"
-    },
-    {
-        "duration": "18.500673303030307",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.ebay.com"
-    },
-    {
-        "duration": "20.12547411111111",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.youtube.com"
-    },
-    {
-        "duration": "21.599045060606063",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "23.52236257575757",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "20.186037191919194",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "18.223816474747473",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch"
-    },
-    {
-        "duration": "17.155473969696963",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/linkedin_pinch"
-    },
-    {
-        "duration": "19.42624984848485",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/twitter_pinch"
-    },
-    {
-        "duration": "23.373945161616167",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/weather_pinch"
-    },
-    {
-        "duration": "24.168533020202016",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_games_pinch"
-    },
-    {
-        "duration": "21.526567000000007",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_news_pinch"
-    },
-    {
-        "duration": "23.818035292929284",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_sports_pinch"
-    },
-    {
-        "duration": "19.822346323232324",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/youtube_pinch"
-    },
-    {
-        "duration": "18.507448818181825",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.646058151515152",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.67110256565657",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.686313020202018",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.720366909090913",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.362337030303028",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.141212919191922",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.0306944090909",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.287694404040403",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.50915887878788",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "29.52484534343435",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "19.545956444444453",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "19.334000777777785",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.40894502020201",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "19.360452080808074",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.8572618989899",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.496166333333328",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.449881121212119",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.503100601010102",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.804428499999998",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.274340212121217",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.259447555555553",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.33203639393939",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.336211111111112",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.339763494949494",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.88479071717172",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.365232181818183",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.383536575757578",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.37222653030303",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.85775982323233",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.05117803030303",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.44442062626263",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.491643818181817",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.44029223232323",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.4738447979798",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.093403171717178",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.773262585858587",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "14.913316646464654",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.102246196969702",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.437218060606059",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "26.569065852459005",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "26.629028147540986",
-        "name": "smoothness.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "16.53914413636364",
-        "name": "smoothness.key_mobile_sites_smooth/androidpolice"
-    },
-    {
-        "duration": "13.291175718181815",
-        "name": "smoothness.key_mobile_sites_smooth/baidu"
-    },
-    {
-        "duration": "12.237363636363638",
-        "name": "smoothness.key_mobile_sites_smooth/bing"
-    },
-    {
-        "duration": "14.365715415254241",
-        "name": "smoothness.key_mobile_sites_smooth/blogspot"
-    },
-    {
-        "duration": "24.812816169491523",
-        "name": "smoothness.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "12.958837654545453",
-        "name": "smoothness.key_mobile_sites_smooth/booking.com"
-    },
-    {
-        "duration": "24.33851395",
-        "name": "smoothness.key_mobile_sites_smooth/capitolvolkswagen"
-    },
-    {
-        "duration": "15.18539076363636",
-        "name": "smoothness.key_mobile_sites_smooth/cnn"
-    },
-    {
-        "duration": "30.0165683220339",
-        "name": "smoothness.key_mobile_sites_smooth/cnn_article"
-    },
-    {
-        "duration": "23.590496254237287",
-        "name": "smoothness.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "21.357222400000005",
-        "name": "smoothness.key_mobile_sites_smooth/deviantart"
-    },
-    {
-        "duration": "15.89577759090909",
-        "name": "smoothness.key_mobile_sites_smooth/ebay"
-    },
-    {
-        "duration": "15.979215499999999",
-        "name": "smoothness.key_mobile_sites_smooth/facebook"
-    },
-    {
-        "duration": "21.41754853333333",
-        "name": "smoothness.key_mobile_sites_smooth/google_news"
-    },
-    {
-        "duration": "17.745036381818185",
-        "name": "smoothness.key_mobile_sites_smooth/google_plus"
-    },
-    {
-        "duration": "13.544446727272723",
-        "name": "smoothness.key_mobile_sites_smooth/google_web_search"
-    },
-    {
-        "duration": "14.588915345454541",
-        "name": "smoothness.key_mobile_sites_smooth/gsp.ro"
-    },
-    {
-        "duration": "16.675895533333332",
-        "name": "smoothness.key_mobile_sites_smooth/linkedin"
-    },
-    {
-        "duration": "12.726080918181815",
-        "name": "smoothness.key_mobile_sites_smooth/mlb"
-    },
-    {
-        "duration": "17.255912881355933",
-        "name": "smoothness.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "21.782283267857142",
-        "name": "smoothness.key_mobile_sites_smooth/pinterest"
-    },
-    {
-        "duration": "20.882384271186442",
-        "name": "smoothness.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "17.950470527272728",
-        "name": "smoothness.key_mobile_sites_smooth/sfgate"
-    },
-    {
-        "duration": "19.428483915254244",
-        "name": "smoothness.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "14.26479439090909",
-        "name": "smoothness.key_mobile_sites_smooth/techcrunch"
-    },
-    {
-        "duration": "15.692550409090913",
-        "name": "smoothness.key_mobile_sites_smooth/theverge"
-    },
-    {
-        "duration": "22.655533066666667",
-        "name": "smoothness.key_mobile_sites_smooth/theverge_article"
-    },
-    {
-        "duration": "21.96348992592593",
-        "name": "smoothness.key_mobile_sites_smooth/usatoday"
-    },
-    {
-        "duration": "18.137424877192977",
-        "name": "smoothness.key_mobile_sites_smooth/wikipedia"
-    },
-    {
-        "duration": "18.142369593220337",
-        "name": "smoothness.key_mobile_sites_smooth/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "21.20393466101695",
-        "name": "smoothness.key_mobile_sites_smooth/wordpress"
-    },
-    {
-        "duration": "19.768529454545455",
-        "name": "smoothness.key_mobile_sites_smooth/worldjournal"
-    },
-    {
-        "duration": "27.002991305084752",
-        "name": "smoothness.key_mobile_sites_smooth/wowwiki"
-    },
-    {
-        "duration": "14.532464472727272",
-        "name": "smoothness.key_mobile_sites_smooth/wsj"
-    },
-    {
-        "duration": "17.25935281666667",
-        "name": "smoothness.key_mobile_sites_smooth/yahoo_answers"
-    },
-    {
-        "duration": "16.786935727272727",
-        "name": "smoothness.key_mobile_sites_smooth/yahoo_news"
-    },
-    {
-        "duration": "13.40610516666667",
-        "name": "smoothness.key_mobile_sites_smooth/youtube"
-    },
-    {
-        "duration": "25.359990737704916",
-        "name": "smoothness.key_silk_cases/basic_stream"
-    },
-    {
-        "duration": "16.37147265573771",
-        "name": "smoothness.key_silk_cases/card_expansion"
-    },
-    {
-        "duration": "17.447161639344266",
-        "name": "smoothness.key_silk_cases/card_expansion_animated"
-    },
-    {
-        "duration": "17.716525114754095",
-        "name": "smoothness.key_silk_cases/card_expansion_images_text"
-    },
-    {
-        "duration": "16.31518052459017",
-        "name": "smoothness.key_silk_cases/card_flying"
-    },
-    {
-        "duration": "17.861628114754097",
-        "name": "smoothness.key_silk_cases/coordinated_animation"
-    },
-    {
-        "duration": "17.843532426229512",
-        "name": "smoothness.key_silk_cases/font_wipe"
-    },
-    {
-        "duration": "18.894321262295083",
-        "name": "smoothness.key_silk_cases/google_news_ios"
-    },
-    {
-        "duration": "18.105140180327872",
-        "name": "smoothness.key_silk_cases/gws_boogie_expansion"
-    },
-    {
-        "duration": "18.616162852459027",
-        "name": "smoothness.key_silk_cases/gws_google_expansion"
-    },
-    {
-        "duration": "17.38313752459016",
-        "name": "smoothness.key_silk_cases/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "22.869229426229506",
-        "name": "smoothness.key_silk_cases/infinite_scrolling"
-    },
-    {
-        "duration": "14.918027991803275",
-        "name": "smoothness.key_silk_cases/list_animation_simple"
-    },
-    {
-        "duration": "26.942414672131147",
-        "name": "smoothness.key_silk_cases/list_recycle_transform"
-    },
-    {
-        "duration": "16.686518245901638",
-        "name": "smoothness.key_silk_cases/mask_transition_animation"
-    },
-    {
-        "duration": "16.928695688524595",
-        "name": "smoothness.key_silk_cases/masonry"
-    },
-    {
-        "duration": "15.259632737704917",
-        "name": "smoothness.key_silk_cases/mobile_news_sandbox"
-    },
-    {
-        "duration": "17.517494147540983",
-        "name": "smoothness.key_silk_cases/parallax_effect"
-    },
-    {
-        "duration": "14.755297639344262",
-        "name": "smoothness.key_silk_cases/physical_simulation"
-    },
-    {
-        "duration": "24.119664426229516",
-        "name": "smoothness.key_silk_cases/silk_finance"
-    },
-    {
-        "duration": "15.970722868852462",
-        "name": "smoothness.key_silk_cases/sticky_using_webkit"
-    },
-    {
-        "duration": "26.26587440983606",
-        "name": "smoothness.key_silk_cases/stress_hidey_bars"
-    },
-    {
-        "duration": "25.750074213114747",
-        "name": "smoothness.key_silk_cases/svg_icon_raster"
-    },
-    {
-        "duration": "12.902936049180326",
-        "name": "smoothness.key_silk_cases/swipe_action"
-    },
-    {
-        "duration": "16.33346949180328",
-        "name": "smoothness.key_silk_cases/swipe_to_dismiss"
-    },
-    {
-        "duration": "20.306419754098368",
-        "name": "smoothness.key_silk_cases/toggle_drawer"
-    },
-    {
-        "duration": "18.311884672131153",
-        "name": "smoothness.key_silk_cases/update_history_state"
-    },
-    {
-        "duration": "17.131549540983606",
-        "name": "smoothness.key_silk_cases/vertical_expansion"
-    },
-    {
-        "duration": "16.476652081967217",
-        "name": "smoothness.key_silk_cases/zoom_in_animation"
-    },
-    {
-        "duration": "28.821596590163935",
-        "name": "smoothness.maps/maps_perf_test"
-    },
-    {
-        "duration": "28.674610918032776",
-        "name": "smoothness.pathological_mobile_sites/cnn_pathological"
-    },
-    {
-        "duration": "20.24299862295082",
-        "name": "smoothness.pathological_mobile_sites/espn_pathological"
-    },
-    {
-        "duration": "17.557712475409833",
-        "name": "smoothness.pathological_mobile_sites/guardian_pathological"
-    },
-    {
-        "duration": "34.125893313131314",
-        "name": "smoothness.pathological_mobile_sites/http://edition.cnn.com"
-    },
-    {
-        "duration": "21.165496929292935",
-        "name": "smoothness.pathological_mobile_sites/http://m.espn.go.com/nhl/rankings"
-    },
-    {
-        "duration": "24.303929666666658",
-        "name": "smoothness.pathological_mobile_sites/http://recode.net"
-    },
-    {
-        "duration": "23.769852070707078",
-        "name": "smoothness.pathological_mobile_sites/http://sports.yahoo.com/"
-    },
-    {
-        "duration": "23.95460922222222",
-        "name": "smoothness.pathological_mobile_sites/http://www.latimes.com"
-    },
-    {
-        "duration": "23.24269973737373",
-        "name": "smoothness.pathological_mobile_sites/http://www.pbs.org/newshour/bb/much-really-cost-live-city-like-seattle/#the-rundown"
-    },
-    {
-        "duration": "18.307695060606054",
-        "name": "smoothness.pathological_mobile_sites/http://www.theguardian.com/politics/2015/mar/09/ed-balls-tory-spending-plans-nhs-charging"
-    },
-    {
-        "duration": "24.52768088888889",
-        "name": "smoothness.pathological_mobile_sites/http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria"
-    },
-    {
-        "duration": "21.474880676767675",
-        "name": "smoothness.pathological_mobile_sites/http://www.zdnet.com"
-    },
-    {
-        "duration": "21.462242555555555",
-        "name": "smoothness.pathological_mobile_sites/https://www.linkedin.com/in/linustorvalds"
-    },
-    {
-        "duration": "23.825132131147544",
-        "name": "smoothness.pathological_mobile_sites/latimes_pathological"
-    },
-    {
-        "duration": "20.733113622950818",
-        "name": "smoothness.pathological_mobile_sites/linkedin_pathological"
-    },
-    {
-        "duration": "22.28273478688524",
-        "name": "smoothness.pathological_mobile_sites/pbs_pathological"
-    },
-    {
-        "duration": "23.086000836065573",
-        "name": "smoothness.pathological_mobile_sites/recode_pathological"
-    },
-    {
-        "duration": "23.744039098360652",
-        "name": "smoothness.pathological_mobile_sites/wow_wiki_pathological"
-    },
-    {
-        "duration": "22.60097137704919",
-        "name": "smoothness.pathological_mobile_sites/yahoo_sports_pathological"
-    },
-    {
-        "duration": "20.430695229508185",
-        "name": "smoothness.pathological_mobile_sites/zdnet_pathological"
-    },
-    {
-        "duration": "31.095673180327864",
-        "name": "smoothness.simple_mobile_sites/ebay_scroll"
-    },
-    {
-        "duration": "25.098881000000002",
-        "name": "smoothness.simple_mobile_sites/flickr_scroll"
-    },
-    {
-        "duration": "26.060939696969683",
-        "name": "smoothness.simple_mobile_sites/http://m.nytimes.com/"
-    },
-    {
-        "duration": "31.32089277777777",
-        "name": "smoothness.simple_mobile_sites/http://www.ebay.co.uk/"
-    },
-    {
-        "duration": "26.259290949494947",
-        "name": "smoothness.simple_mobile_sites/http://www.nyc.gov"
-    },
-    {
-        "duration": "25.429110333333316",
-        "name": "smoothness.simple_mobile_sites/https://www.flickr.com/"
-    },
-    {
-        "duration": "26.21302401639344",
-        "name": "smoothness.simple_mobile_sites/nyc_gov_scroll"
-    },
-    {
-        "duration": "25.879720360655746",
-        "name": "smoothness.simple_mobile_sites/nytimes_scroll"
-    },
-    {
-        "duration": "12.30919037878788",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/amazon"
-    },
-    {
-        "duration": "17.553353626262624",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/androidpolice"
-    },
-    {
-        "duration": "13.419487333333336",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/baidu"
-    },
-    {
-        "duration": "12.35000406565657",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/bing"
-    },
-    {
-        "duration": "14.588684181818179",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/blogspot"
-    },
-    {
-        "duration": "26.629666191919195",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "12.98962581313131",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/booking.com"
-    },
-    {
-        "duration": "25.129272292929294",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/capitolvolkswagen"
-    },
-    {
-        "duration": "15.469489843434344",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn"
-    },
-    {
-        "duration": "32.38077446464647",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn_article"
-    },
-    {
-        "duration": "25.60486985858586",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "21.313415727272734",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/deviantart"
-    },
-    {
-        "duration": "16.256086060606055",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/ebay"
-    },
-    {
-        "duration": "23.20500197979798",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/espn"
-    },
-    {
-        "duration": "16.32861003030304",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/facebook"
-    },
-    {
-        "duration": "14.802518469696972",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/forecast.io"
-    },
-    {
-        "duration": "21.317157606060597",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_news"
-    },
-    {
-        "duration": "19.805972242424232",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_plus"
-    },
-    {
-        "duration": "13.828701045454547",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_web_search"
-    },
-    {
-        "duration": "14.843548909090911",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/gsp.ro"
-    },
-    {
-        "duration": "17.13667131313131",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/linkedin"
-    },
-    {
-        "duration": "12.860879126262624",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/mlb"
-    },
-    {
-        "duration": "17.460176787878783",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "22.94758834343435",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/pinterest"
-    },
-    {
-        "duration": "20.98797042424242",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "18.45800221212121",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/sfgate"
-    },
-    {
-        "duration": "19.94021547474747",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "14.559818661616161",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/techcrunch"
-    },
-    {
-        "duration": "16.004070919191925",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge"
-    },
-    {
-        "duration": "22.836122060606062",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge_article"
-    },
-    {
-        "duration": "13.172477782828281",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/twitter"
-    },
-    {
-        "duration": "21.683123101010096",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/usatoday"
-    },
-    {
-        "duration": "18.283508696969697",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia"
-    },
-    {
-        "duration": "18.263198434343437",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia_delayed_scroll_start"
-    },
-    {
-        "duration": "21.93877677777777",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wordpress"
-    },
-    {
-        "duration": "20.825173404040413",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/worldjournal"
-    },
-    {
-        "duration": "27.130637929292934",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wowwiki"
-    },
-    {
-        "duration": "14.661252787878787",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wsj"
-    },
-    {
-        "duration": "18.171624353535357",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_answers"
-    },
-    {
-        "duration": "17.091449030303032",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_news"
-    },
-    {
-        "duration": "13.579494898989902",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth/youtube"
-    },
-    {
-        "duration": "25.046911303030296",
-        "name": "smoothness.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "17.37225661616163",
-        "name": "smoothness.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "12.80938446464646",
-        "name": "smoothness.top_25_smooth/ebay"
-    },
-    {
-        "duration": "15.779602202020206",
-        "name": "smoothness.top_25_smooth/espn"
-    },
-    {
-        "duration": "20.048795929292922",
-        "name": "smoothness.top_25_smooth/facebook"
-    },
-    {
-        "duration": "24.951335727272728",
-        "name": "smoothness.top_25_smooth/gmail"
-    },
-    {
-        "duration": "18.869747686868696",
-        "name": "smoothness.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "28.923561282828267",
-        "name": "smoothness.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "22.120960626262626",
-        "name": "smoothness.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "26.418621020202036",
-        "name": "smoothness.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "13.20374604040404",
-        "name": "smoothness.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "16.266582000000003",
-        "name": "smoothness.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "21.153775717171715",
-        "name": "smoothness.top_25_smooth/pinterest"
-    },
-    {
-        "duration": "24.788411272727274",
-        "name": "smoothness.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "18.91154121212121",
-        "name": "smoothness.top_25_smooth/twitter"
-    },
-    {
-        "duration": "16.4054206919192",
-        "name": "smoothness.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "23.213889505050503",
-        "name": "smoothness.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "22.27848776767677",
-        "name": "smoothness.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "14.596352338383838",
-        "name": "smoothness.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "24.10144237373737",
-        "name": "smoothness.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "17.48463835353535",
-        "name": "smoothness.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "17.747225151515146",
-        "name": "smoothness.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "19.60449215151515",
-        "name": "smoothness.top_25_smooth/youtube"
-    },
-    {
-        "duration": "27.04536781818182",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html"
-    },
-    {
-        "duration": "22.456082111111108",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html"
-    },
-    {
-        "duration": "22.534815787878802",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html"
-    },
-    {
-        "duration": "22.52919038383839",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html"
-    },
-    {
-        "duration": "22.43159716161616",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html"
-    },
-    {
-        "duration": "22.454406262626275",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html"
-    },
-    {
-        "duration": "22.426331535353533",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html"
-    },
-    {
-        "duration": "22.458929676767674",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html"
-    },
-    {
-        "duration": "22.401501545454547",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html"
-    },
-    {
-        "duration": "22.406789909090914",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html"
-    },
-    {
-        "duration": "22.549943171717167",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html"
-    },
-    {
-        "duration": "21.923174557377042",
-        "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "21.85514444444445",
-        "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html"
-    },
-    {
-        "duration": "22.44665429508197",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "22.286494262626267",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html"
-    },
-    {
-        "duration": "22.57624036065575",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "22.297481767676768",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html"
-    },
-    {
-        "duration": "22.488254622950816",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "22.225520010101018",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html"
-    },
-    {
-        "duration": "20.932041327868856",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas"
-    },
-    {
-        "duration": "20.892632616161613",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html"
-    },
-    {
-        "duration": "21.126268836065574",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css"
-    },
-    {
-        "duration": "20.999826545454553",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css.html"
-    },
-    {
-        "duration": "26.701714885245888",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations"
-    },
-    {
-        "duration": "26.597550686868686",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations.html"
-    },
-    {
-        "duration": "21.343014101010095",
-        "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200"
-    },
-    {
-        "duration": "22.020698459016398",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes"
-    },
-    {
-        "duration": "22.083971262626275",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "22.952134747474748",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "22.359438050505048",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "22.42862556565656",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "22.33996149494949",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "22.232475754098363",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "22.707320868852456",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "22.16799822950819",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "22.176333786885248",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "24.100041747474748",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "23.35224656565657",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "23.59784304040403",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "23.550403656565656",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "21.300982606557373",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "21.352403010101003",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "23.610044540983605",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "24.273761786885252",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "23.5560451147541",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "23.93363522222221",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "22.201258151515145",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "23.34559153535355",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "23.310823323232324",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "23.575668704918037",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "23.453082032786885",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "24.093794278688524",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "22.332709983606552",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "23.37103018032786",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "22.533571852459012",
-        "name": "smoothness.tough_animation_cases/css_transitions_inline_style"
-    },
-    {
-        "duration": "23.259156983606555",
-        "name": "smoothness.tough_animation_cases/css_transitions_new_element"
-    },
-    {
-        "duration": "23.372676656565666",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "22.69614324242424",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "22.715541161616162",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "22.561160545454534",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "22.355516030303033",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "22.712755676767678",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "22.83893402020201",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "22.80539458585859",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "22.765675655737706",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "22.564853245901634",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "22.75068975409835",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "22.41470508080808",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "22.35842371717172",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "22.550059090909095",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "22.49970381818182",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "22.78685416393442",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "22.64483332786886",
-        "name": "smoothness.tough_animation_cases/css_transitions_style_element"
-    },
-    {
-        "duration": "22.651829590163928",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "22.432310721311477",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "22.505301868852452",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "22.76856439344262",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "22.64673163934427",
-        "name": "smoothness.tough_animation_cases/css_transitions_updating_class"
-    },
-    {
-        "duration": "21.704338229508192",
-        "name": "smoothness.tough_animation_cases/css_value_type_color"
-    },
-    {
-        "duration": "21.591275212121204",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.58429938383838",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.25076870491803",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter"
-    },
-    {
-        "duration": "21.213075878787883",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.47085027868853",
-        "name": "smoothness.tough_animation_cases/css_value_type_length"
-    },
-    {
-        "duration": "21.28950224242425",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.378793010101017",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.81602663934426",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex"
-    },
-    {
-        "duration": "21.741128161616164",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.800361777777773",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.80552524590165",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple"
-    },
-    {
-        "duration": "21.814812707070704",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.76607248484849",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.843382000000002",
-        "name": "smoothness.tough_animation_cases/css_value_type_path"
-    },
-    {
-        "duration": "21.668360090909086",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.68115701010101",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.093255442622944",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow"
-    },
-    {
-        "duration": "20.95892668686868",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "20.898138292929293",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.37288601639345",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex"
-    },
-    {
-        "duration": "21.297352010101005",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.361086353535356",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.49146072131148",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple"
-    },
-    {
-        "duration": "21.48650625252525",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "21.542096949494955",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "21.179604016393437",
-        "name": "smoothness.tough_animation_cases/keyframed_animations"
-    },
-    {
-        "duration": "21.16444153535355",
-        "name": "smoothness.tough_animation_cases/keyframed_animations.html"
-    },
-    {
-        "duration": "21.068441163934427",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "20.978088626262632",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html"
-    },
-    {
-        "duration": "21.02356952459016",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "21.0166183030303",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html"
-    },
-    {
-        "duration": "21.983963295081967",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "20.83310868852459",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "20.870298393939397",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html"
-    },
-    {
-        "duration": "21.98198574747475",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html"
-    },
-    {
-        "duration": "27.327474363636362",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html"
-    },
-    {
-        "duration": "27.89716124590164",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "21.987142080808084",
-        "name": "smoothness.tough_animation_cases/transform_transition_js_block.html"
-    },
-    {
-        "duration": "20.940191786885247",
-        "name": "smoothness.tough_animation_cases/transform_transitions"
-    },
-    {
-        "duration": "20.9394409090909",
-        "name": "smoothness.tough_animation_cases/transform_transitions.html"
-    },
-    {
-        "duration": "21.949484999999996",
-        "name": "smoothness.tough_animation_cases/transform_transitions_js_block"
-    },
-    {
-        "duration": "21.567496622950816",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_color"
-    },
-    {
-        "duration": "21.487963852459007",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "21.7911168852459",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "21.813014000000003",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "21.780180508196732",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_path"
-    },
-    {
-        "duration": "21.0838273114754",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "21.444138983606557",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "21.748571262295087",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "23.66700586885245",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes"
-    },
-    {
-        "duration": "23.78068638383839",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "21.543867918032785",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time"
-    },
-    {
-        "duration": "21.60836641414143",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316"
-    },
-    {
-        "duration": "22.524585508196722",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous"
-    },
-    {
-        "duration": "22.720181323232318",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316"
-    },
-    {
-        "duration": "23.505437098360655",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "23.353811707070708",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316"
-    },
-    {
-        "duration": "21.386591688524586",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "21.399232565656565",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "23.24874341414142",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316"
-    },
-    {
-        "duration": "23.409907245901646",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "22.018705404040404",
-        "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html"
-    },
-    {
-        "duration": "16.105503581967213",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_15"
-    },
-    {
-        "duration": "17.28932118032787",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow"
-    },
-    {
-        "duration": "16.051860098360653",
-        "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "15.649400016393441",
-        "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles"
-    },
-    {
-        "duration": "15.525153090163935",
-        "name": "smoothness.tough_canvas_cases/bouncing_png_images"
-    },
-    {
-        "duration": "22.835854540983604",
-        "name": "smoothness.tough_canvas_cases/bouncing_svg_images"
-    },
-    {
-        "duration": "15.895966147540987",
-        "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear"
-    },
-    {
-        "duration": "15.80449435245902",
-        "name": "smoothness.tough_canvas_cases/canvas_arcs"
-    },
-    {
-        "duration": "15.616654877049179",
-        "name": "smoothness.tough_canvas_cases/canvas_font_cycler"
-    },
-    {
-        "duration": "15.735745081967213",
-        "name": "smoothness.tough_canvas_cases/canvas_lines"
-    },
-    {
-        "duration": "15.936453622950818",
-        "name": "smoothness.tough_canvas_cases/canvas_to_blob"
-    },
-    {
-        "duration": "16.138249836065572",
-        "name": "smoothness.tough_canvas_cases/chip_tune"
-    },
-    {
-        "duration": "16.349343655737705",
-        "name": "smoothness.tough_canvas_cases/crafty_mind"
-    },
-    {
-        "duration": "16.084336631147544",
-        "name": "smoothness.tough_canvas_cases/effect_games"
-    },
-    {
-        "duration": "15.630610270491806",
-        "name": "smoothness.tough_canvas_cases/fill_shapes"
-    },
-    {
-        "duration": "22.03807560655738",
-        "name": "smoothness.tough_canvas_cases/geo_apis"
-    },
-    {
-        "duration": "16.11863257377049",
-        "name": "smoothness.tough_canvas_cases/hakim"
-    },
-    {
-        "duration": "22.211645585858573",
-        "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM"
-    },
-    {
-        "duration": "16.232983545454555",
-        "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/"
-    },
-    {
-        "duration": "16.39818360606061",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html"
-    },
-    {
-        "duration": "16.47651023232323",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html"
-    },
-    {
-        "duration": "15.828248590909089",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html"
-    },
-    {
-        "duration": "17.71002109090909",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html"
-    },
-    {
-        "duration": "16.561532848484845",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html"
-    },
-    {
-        "duration": "16.286886555555554",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/"
-    },
-    {
-        "duration": "16.001509656565656",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html"
-    },
-    {
-        "duration": "16.98685219191919",
-        "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/"
-    },
-    {
-        "duration": "16.067574818181814",
-        "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169"
-    },
-    {
-        "duration": "15.701819767676767",
-        "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html"
-    },
-    {
-        "duration": "15.878640116161616",
-        "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html"
-    },
-    {
-        "duration": "15.970756161616164",
-        "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/"
-    },
-    {
-        "duration": "16.159435075757578",
-        "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html"
-    },
-    {
-        "duration": "16.334891929292922",
-        "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html"
-    },
-    {
-        "duration": "16.157329565656564",
-        "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/"
-    },
-    {
-        "duration": "16.281470419191916",
-        "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html"
-    },
-    {
-        "duration": "15.856684000000003",
-        "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/"
-    },
-    {
-        "duration": "16.354321050505053",
-        "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/"
-    },
-    {
-        "duration": "16.985144721311467",
-        "name": "smoothness.tough_canvas_cases/jarro_doverson"
-    },
-    {
-        "duration": "16.234797221311467",
-        "name": "smoothness.tough_canvas_cases/kevs_3d"
-    },
-    {
-        "duration": "15.973522327868858",
-        "name": "smoothness.tough_canvas_cases/man_in_blue"
-    },
-    {
-        "duration": "22.102537081967213",
-        "name": "smoothness.tough_canvas_cases/many_images"
-    },
-    {
-        "duration": "15.95385218032787",
-        "name": "smoothness.tough_canvas_cases/megi_dish"
-    },
-    {
-        "duration": "17.711289098360652",
-        "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "16.493513803278685",
-        "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "16.268253278688523",
-        "name": "smoothness.tough_canvas_cases/microsoft_snow"
-    },
-    {
-        "duration": "15.853337098360658",
-        "name": "smoothness.tough_canvas_cases/microsoft_speed_reading"
-    },
-    {
-        "duration": "16.289367631147538",
-        "name": "smoothness.tough_canvas_cases/microsoft_tweet_map"
-    },
-    {
-        "duration": "16.35075617213115",
-        "name": "smoothness.tough_canvas_cases/microsoft_video_city"
-    },
-    {
-        "duration": "15.776083418032787",
-        "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains"
-    },
-    {
-        "duration": "16.115658991803276",
-        "name": "smoothness.tough_canvas_cases/mix_10k"
-    },
-    {
-        "duration": "15.817121426229507",
-        "name": "smoothness.tough_canvas_cases/put_get_image_data"
-    },
-    {
-        "duration": "15.825464983606556",
-        "name": "smoothness.tough_canvas_cases/runway"
-    },
-    {
-        "duration": "16.180551254098365",
-        "name": "smoothness.tough_canvas_cases/smash_cat"
-    },
-    {
-        "duration": "15.689207368852458",
-        "name": "smoothness.tough_canvas_cases/spielzeugz"
-    },
-    {
-        "duration": "16.113895852459013",
-        "name": "smoothness.tough_canvas_cases/stroke_shapes"
-    },
-    {
-        "duration": "16.10038631313131",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html"
-    },
-    {
-        "duration": "15.780741131313123",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html"
-    },
-    {
-        "duration": "17.43734721212121",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image"
-    },
-    {
-        "duration": "16.112110808080804",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15"
-    },
-    {
-        "duration": "15.964707287878785",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html"
-    },
-    {
-        "duration": "16.146996626262617",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html"
-    },
-    {
-        "duration": "15.85691740909091",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html"
-    },
-    {
-        "duration": "15.618912782828282",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html"
-    },
-    {
-        "duration": "23.098944424242422",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html"
-    },
-    {
-        "duration": "15.89293042424242",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html"
-    },
-    {
-        "duration": "15.847867282828279",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html"
-    },
-    {
-        "duration": "15.873840070707063",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html"
-    },
-    {
-        "duration": "15.870807106060607",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html"
-    },
-    {
-        "duration": "16.11391834343435",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html"
-    },
-    {
-        "duration": "21.345023229508197",
-        "name": "smoothness.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "21.162696704918034",
-        "name": "smoothness.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "24.441053295081964",
-        "name": "smoothness.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "25.979630672131137",
-        "name": "smoothness.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "16.190615245762718",
-        "name": "smoothness.tough_image_decode_cases/cats_unscaled"
-    },
-    {
-        "duration": "10.54116988135593",
-        "name": "smoothness.tough_image_decode_cases/cats_viewport_width"
-    },
-    {
-        "duration": "16.296360999999997",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html"
-    },
-    {
-        "duration": "10.575817",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html"
-    },
-    {
-        "duration": "26.831801852459034",
-        "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "31.684677295081965",
-        "name": "smoothness.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "20.92570716393442",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "21.056270688524588",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "17.146070540983605",
-        "name": "smoothness.tough_pinch_zoom_cases/amazon_pinch"
-    },
-    {
-        "duration": "19.850274710526318",
-        "name": "smoothness.tough_pinch_zoom_cases/blogspot_pinch"
-    },
-    {
-        "duration": "18.49401318032787",
-        "name": "smoothness.tough_pinch_zoom_cases/booking_pinch"
-    },
-    {
-        "duration": "21.084434262295087",
-        "name": "smoothness.tough_pinch_zoom_cases/cnn_pinch"
-    },
-    {
-        "duration": "18.379349803278693",
-        "name": "smoothness.tough_pinch_zoom_cases/ebay_pinch"
-    },
-    {
-        "duration": "20.200942409836053",
-        "name": "smoothness.tough_pinch_zoom_cases/espn_pinch"
-    },
-    {
-        "duration": "17.63264106557377",
-        "name": "smoothness.tough_pinch_zoom_cases/facebook_pinch"
-    },
-    {
-        "duration": "21.4984471147541",
-        "name": "smoothness.tough_pinch_zoom_cases/gmail_pinch"
-    },
-    {
-        "duration": "20.04281475409835",
-        "name": "smoothness.tough_pinch_zoom_cases/google_calendar_pinch"
-    },
-    {
-        "duration": "18.136763098360667",
-        "name": "smoothness.tough_pinch_zoom_cases/google_image_pinch"
-    },
-    {
-        "duration": "23.29388478688525",
-        "name": "smoothness.tough_pinch_zoom_cases/google_search_pinch"
-    },
-    {
-        "duration": "17.182486180327864",
-        "name": "smoothness.tough_pinch_zoom_cases/linkedin_pinch"
-    },
-    {
-        "duration": "19.469438524590164",
-        "name": "smoothness.tough_pinch_zoom_cases/twitter_pinch"
-    },
-    {
-        "duration": "23.2429231147541",
-        "name": "smoothness.tough_pinch_zoom_cases/weather_pinch"
-    },
-    {
-        "duration": "23.956703868852465",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_games_pinch"
-    },
-    {
-        "duration": "21.698386409836072",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_news_pinch"
-    },
-    {
-        "duration": "24.05364109836066",
-        "name": "smoothness.tough_pinch_zoom_cases/yahoo_sports_pinch"
-    },
-    {
-        "duration": "19.869200295081964",
-        "name": "smoothness.tough_pinch_zoom_cases/youtube_pinch"
-    },
-    {
-        "duration": "18.847303540983606",
-        "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.966237606557375",
-        "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.829337442622954",
-        "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.8945316557377",
-        "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.831891114754093",
-        "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "22.047175098360658",
-        "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.157517475409836",
-        "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.142000122950817",
-        "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.368170516393441",
-        "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.655936918032785",
-        "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "24.06814372131148",
-        "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "19.860441967213116",
-        "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "19.96723924590164",
-        "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.933946262295077",
-        "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "19.913688163934424",
-        "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "18.18256631147541",
-        "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.56473468852459",
-        "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.486981516393447",
-        "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.515805024590163",
-        "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.883499098360659",
-        "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.36990908196722",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.42711316393443",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.318384360655735",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.366071901639344",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.465494442622962",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.83910228333333",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "16.4680272295082",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.51992467213115",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.494020770491804",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.936371377049179",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "17.633219672131148",
-        "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "17.790567606557378",
-        "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "17.757097770491804",
-        "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "17.85748234426229",
-        "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "17.76425598360656",
-        "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "16.546033532786886",
-        "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.175983098360652",
-        "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "14.473115811475411",
-        "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "13.628749483606551",
-        "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.192075713114756",
-        "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "27.354231813559316",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation"
-    },
-    {
-        "duration": "21.746200068965514",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "21.782055120689655",
-        "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads"
-    },
-    {
-        "duration": "21.037732224137937",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads"
-    },
-    {
-        "duration": "21.57695798275862",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads"
-    },
-    {
-        "duration": "21.706344499999997",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads"
-    },
-    {
-        "duration": "27.06156842622951",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.392097396551723",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.42507820689655",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.395451568965512",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.401603122807018",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.390622849999996",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.38537755932203",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.38091410526316",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.393001050847456",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.443340288135595",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.47187273333334",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html"
-    },
-    {
-        "duration": "4.368507578688524",
-        "name": "smoothness.tough_webgl_cases/animometer_webgl"
-    },
-    {
-        "duration": "4.3792165770491795",
-        "name": "smoothness.tough_webgl_cases/aquarium"
-    },
-    {
-        "duration": "4.382426836065574",
-        "name": "smoothness.tough_webgl_cases/aquarium_20k"
-    },
-    {
-        "duration": "4.3809500852459005",
-        "name": "smoothness.tough_webgl_cases/blob"
-    },
-    {
-        "duration": "4.374934229508197",
-        "name": "smoothness.tough_webgl_cases/dynamic_cube_map"
-    },
-    {
-        "duration": "4.394998470491803",
-        "name": "smoothness.tough_webgl_cases/earth"
-    },
-    {
-        "duration": "4.366718270491802",
-        "name": "smoothness.tough_webgl_cases/many_planets_deep"
-    },
-    {
-        "duration": "9.553684991803278",
-        "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "4.373657596721311",
-        "name": "smoothness.tough_webgl_cases/particles"
-    },
-    {
-        "duration": "4.3852163",
-        "name": "smoothness.tough_webgl_cases/san_angeles"
-    },
-    {
-        "duration": "34.003356393442616",
-        "name": "speedometer-future/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "33.654974033333325",
-        "name": "speedometer/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "58.918045393442625",
-        "name": "speedometer2-future/Speedometer2"
-    },
-    {
-        "duration": "57.894307721311485",
-        "name": "speedometer2/Speedometer2"
-    },
-    {
-        "duration": "149.79887113114754",
-        "name": "start_with_url.cold.startup_pages/about:blank"
-    },
-    {
-        "duration": "147.23244632786884",
-        "name": "start_with_url.cold.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "319.07762895081964",
-        "name": "start_with_url.warm.startup_pages/about:blank"
-    },
-    {
-        "duration": "322.5786071311477",
-        "name": "start_with_url.warm.startup_pages/http://bbc.co.uk"
-    },
-    {
-        "duration": "24.974968999999994",
-        "name": "system_health.common_mobile/background:media:imgur"
-    },
-    {
-        "duration": "25.595931166666666",
-        "name": "system_health.common_mobile/background:search:google"
-    },
-    {
-        "duration": "36.92547301639344",
-        "name": "system_health.common_mobile/background:social:facebook"
-    },
-    {
-        "duration": "38.616953366666664",
-        "name": "system_health.common_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "94.44720266666668",
-        "name": "system_health.common_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "34.010893499999995",
-        "name": "system_health.common_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "102.79069728333334",
-        "name": "system_health.common_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "64.71095096666664",
-        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "96.16659753333337",
-        "name": "system_health.common_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "118.95419955000001",
-        "name": "system_health.common_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "118.12141295",
-        "name": "system_health.common_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "75.36605991666667",
-        "name": "system_health.common_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "70.0767844",
-        "name": "system_health.common_mobile/browse:news:qq"
-    },
-    {
-        "duration": "62.60237110000002",
-        "name": "system_health.common_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "70.11665231666669",
-        "name": "system_health.common_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "91.54142686666663",
-        "name": "system_health.common_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "86.33546050000001",
-        "name": "system_health.common_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "44.1969528",
-        "name": "system_health.common_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "90.92550580000002",
-        "name": "system_health.common_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "248.16756949999998",
-        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "112.03981985",
-        "name": "system_health.common_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "110.19963486666671",
-        "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "137.20686766666668",
-        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "67.09152128333332",
-        "name": "system_health.common_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "94.99666576666665",
-        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "58.435897266666665",
-        "name": "system_health.common_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "21.540348583333333",
-        "name": "system_health.common_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "27.254568100000007",
-        "name": "system_health.common_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "21.926923833333337",
-        "name": "system_health.common_mobile/load:games:lazors"
-    },
-    {
-        "duration": "25.923831266666657",
-        "name": "system_health.common_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "24.881356949999997",
-        "name": "system_health.common_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "24.242558449999997",
-        "name": "system_health.common_mobile/load:media:google_images"
-    },
-    {
-        "duration": "25.042856083333337",
-        "name": "system_health.common_mobile/load:media:imgur"
-    },
-    {
-        "duration": "24.18735763333334",
-        "name": "system_health.common_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "24.020248750000004",
-        "name": "system_health.common_mobile/load:media:youtube"
-    },
-    {
-        "duration": "38.90185256666667",
-        "name": "system_health.common_mobile/load:news:cnn"
-    },
-    {
-        "duration": "29.061695499999995",
-        "name": "system_health.common_mobile/load:news:irctc"
-    },
-    {
-        "duration": "28.09110954999999",
-        "name": "system_health.common_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "24.00289666666666",
-        "name": "system_health.common_mobile/load:news:qq"
-    },
-    {
-        "duration": "24.346915949999996",
-        "name": "system_health.common_mobile/load:news:reddit"
-    },
-    {
-        "duration": "27.996436616666657",
-        "name": "system_health.common_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "24.291215083333334",
-        "name": "system_health.common_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "23.708367866666663",
-        "name": "system_health.common_mobile/load:search:baidu"
-    },
-    {
-        "duration": "25.024297316666665",
-        "name": "system_health.common_mobile/load:search:ebay"
-    },
-    {
-        "duration": "22.7154981",
-        "name": "system_health.common_mobile/load:search:google"
-    },
-    {
-        "duration": "24.73392836666667",
-        "name": "system_health.common_mobile/load:search:taobao"
-    },
-    {
-        "duration": "22.765068466666662",
-        "name": "system_health.common_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "23.097653766666667",
-        "name": "system_health.common_mobile/load:search:yandex"
-    },
-    {
-        "duration": "23.656330433333334",
-        "name": "system_health.common_mobile/load:social:twitter"
-    },
-    {
-        "duration": "22.963096716666666",
-        "name": "system_health.common_mobile/load:tools:docs"
-    },
-    {
-        "duration": "29.37227408333334",
-        "name": "system_health.common_mobile/load:tools:drive"
-    },
-    {
-        "duration": "26.37017631666668",
-        "name": "system_health.common_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "24.112650999999993",
-        "name": "system_health.common_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "29.871860683333338",
-        "name": "system_health.common_mobile/load:tools:weather"
-    },
-    {
-        "duration": "137.63500200000001",
-        "name": "system_health.common_mobile/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "135.997162",
-        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "69.03044967213118",
-        "name": "system_health.memory_mobile/background:media:imgur"
-    },
-    {
-        "duration": "71.42083867213114",
-        "name": "system_health.memory_mobile/background:search:google"
-    },
-    {
-        "duration": "74.95382201639342",
-        "name": "system_health.memory_mobile/background:social:facebook"
-    },
-    {
-        "duration": "88.00619837704916",
-        "name": "system_health.memory_mobile/background:tools:gmail"
-    },
-    {
-        "duration": "228.70283788333327",
-        "name": "system_health.memory_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "90.45646471666669",
-        "name": "system_health.memory_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "220.74425631147543",
-        "name": "system_health.memory_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "133.66095613333337",
-        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "206.38325358333324",
-        "name": "system_health.memory_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "240.9389626166667",
-        "name": "system_health.memory_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "168.6971696885246",
-        "name": "system_health.memory_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "149.61992381967212",
-        "name": "system_health.memory_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "143.87965306666663",
-        "name": "system_health.memory_mobile/browse:news:qq"
-    },
-    {
-        "duration": "144.53127243333333",
-        "name": "system_health.memory_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "140.8670915333333",
-        "name": "system_health.memory_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "151.60782647540987",
-        "name": "system_health.memory_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "158.2903343389831",
-        "name": "system_health.memory_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "92.204626852459",
-        "name": "system_health.memory_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "179.06597370491806",
-        "name": "system_health.memory_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "230.48076523333341",
-        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "253.41301766666678",
-        "name": "system_health.memory_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "209.26540096666662",
-        "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "208.02696093333333",
-        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "143.8900781",
-        "name": "system_health.memory_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "166.71923127868848",
-        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "130.56581421666667",
-        "name": "system_health.memory_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "72.90530713114755",
-        "name": "system_health.memory_mobile/load:chrome:blank"
-    },
-    {
-        "duration": "64.62599843333332",
-        "name": "system_health.memory_mobile/load:games:bubbles"
-    },
-    {
-        "duration": "65.29436446666668",
-        "name": "system_health.memory_mobile/load:games:lazors"
-    },
-    {
-        "duration": "79.31413863333334",
-        "name": "system_health.memory_mobile/load:games:spychase"
-    },
-    {
-        "duration": "71.02942026666668",
-        "name": "system_health.memory_mobile/load:media:dailymotion"
-    },
-    {
-        "duration": "68.52481141666667",
-        "name": "system_health.memory_mobile/load:media:facebook_photos"
-    },
-    {
-        "duration": "67.78902611666666",
-        "name": "system_health.memory_mobile/load:media:google_images"
-    },
-    {
-        "duration": "66.746272",
-        "name": "system_health.memory_mobile/load:media:imgur"
-    },
-    {
-        "duration": "67.90991743333333",
-        "name": "system_health.memory_mobile/load:media:soundcloud"
-    },
-    {
-        "duration": "68.60652006666668",
-        "name": "system_health.memory_mobile/load:media:youtube"
-    },
-    {
-        "duration": "81.14658734999998",
-        "name": "system_health.memory_mobile/load:news:cnn"
-    },
-    {
-        "duration": "67.90061683333334",
-        "name": "system_health.memory_mobile/load:news:irctc"
-    },
-    {
-        "duration": "71.87558824999999",
-        "name": "system_health.memory_mobile/load:news:nytimes"
-    },
-    {
-        "duration": "67.39154025",
-        "name": "system_health.memory_mobile/load:news:qq"
-    },
-    {
-        "duration": "68.88368848333333",
-        "name": "system_health.memory_mobile/load:news:reddit"
-    },
-    {
-        "duration": "69.72707446666668",
-        "name": "system_health.memory_mobile/load:news:washingtonpost"
-    },
-    {
-        "duration": "69.26048315000001",
-        "name": "system_health.memory_mobile/load:news:wikipedia"
-    },
-    {
-        "duration": "67.42002770000002",
-        "name": "system_health.memory_mobile/load:search:baidu"
-    },
-    {
-        "duration": "66.47678118333333",
-        "name": "system_health.memory_mobile/load:search:ebay"
-    },
-    {
-        "duration": "65.79356139999999",
-        "name": "system_health.memory_mobile/load:search:google"
-    },
-    {
-        "duration": "67.67027786666667",
-        "name": "system_health.memory_mobile/load:search:taobao"
-    },
-    {
-        "duration": "66.84180556666665",
-        "name": "system_health.memory_mobile/load:search:yahoo"
-    },
-    {
-        "duration": "66.70497881666667",
-        "name": "system_health.memory_mobile/load:search:yandex"
-    },
-    {
-        "duration": "66.95931826666667",
-        "name": "system_health.memory_mobile/load:social:twitter"
-    },
-    {
-        "duration": "67.10365841666666",
-        "name": "system_health.memory_mobile/load:tools:docs"
-    },
-    {
-        "duration": "70.41736001666668",
-        "name": "system_health.memory_mobile/load:tools:drive"
-    },
-    {
-        "duration": "69.28514498333334",
-        "name": "system_health.memory_mobile/load:tools:dropbox"
-    },
-    {
-        "duration": "68.54638874999999",
-        "name": "system_health.memory_mobile/load:tools:stackoverflow"
-    },
-    {
-        "duration": "73.36293383333333",
-        "name": "system_health.memory_mobile/load:tools:weather"
-    },
-    {
-        "duration": "882.0575373333334",
-        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "743.9074793333333",
-        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "35.79984774747476",
-        "name": "thread_times.key_idle_power_cases/animated-gif.html"
-    },
-    {
-        "duration": "42.88722106060608",
-        "name": "thread_times.key_idle_power_cases/blank.html"
-    },
-    {
-        "duration": "37.08725779797979",
-        "name": "thread_times.key_idle_power_cases/css-animation.html"
-    },
-    {
-        "duration": "40.58842495959595",
-        "name": "thread_times.key_idle_power_cases/request-animation-frame.html"
-    },
-    {
-        "duration": "37.88519412121212",
-        "name": "thread_times.key_idle_power_cases/set-timeout.html"
-    },
-    {
-        "duration": "107.98949859595956",
-        "name": "thread_times.key_idle_power_cases/set-timeout.html (Long Idle)"
-    },
-    {
-        "duration": "34.3025540909091",
-        "name": "thread_times.key_mobile_sites_smooth/boingboing"
-    },
-    {
-        "duration": "32.76085289898991",
-        "name": "thread_times.key_mobile_sites_smooth/cuteoverload"
-    },
-    {
-        "duration": "33.86383571717172",
-        "name": "thread_times.key_mobile_sites_smooth/nytimes"
-    },
-    {
-        "duration": "26.162444696969708",
-        "name": "thread_times.key_mobile_sites_smooth/reddit"
-    },
-    {
-        "duration": "24.492774050505044",
-        "name": "thread_times.key_mobile_sites_smooth/slashdot"
-    },
-    {
-        "duration": "27.06468106060606",
-        "name": "thread_times.key_noop_cases/no_op_raf.html"
-    },
-    {
-        "duration": "18.66574421212121",
-        "name": "thread_times.key_noop_cases/no_op_scroll.html"
-    },
-    {
-        "duration": "16.409880343434345",
-        "name": "thread_times.key_noop_cases/no_op_settimeout.html"
-    },
-    {
-        "duration": "21.924679494949487",
-        "name": "thread_times.key_noop_cases/no_op_touch_handler.html"
-    },
-    {
-        "duration": "17.999973836065575",
-        "name": "thread_times.key_silk_cases/card_expansion"
-    },
-    {
-        "duration": "19.75223260655737",
-        "name": "thread_times.key_silk_cases/card_expansion_animated"
-    },
-    {
-        "duration": "19.472481147540986",
-        "name": "thread_times.key_silk_cases/card_expansion_images_text"
-    },
-    {
-        "duration": "18.078055622950817",
-        "name": "thread_times.key_silk_cases/card_flying"
-    },
-    {
-        "duration": "18.715183967213108",
-        "name": "thread_times.key_silk_cases/coordinated_animation"
-    },
-    {
-        "duration": "17.75132306557377",
-        "name": "thread_times.key_silk_cases/font_wipe"
-    },
-    {
-        "duration": "17.744295808080818",
-        "name": "thread_times.key_silk_cases/font_wipe.html"
-    },
-    {
-        "duration": "21.50892396721312",
-        "name": "thread_times.key_silk_cases/google_news_ios"
-    },
-    {
-        "duration": "18.357626032786882",
-        "name": "thread_times.key_silk_cases/gws_boogie_expansion"
-    },
-    {
-        "duration": "18.89722509836066",
-        "name": "thread_times.key_silk_cases/gws_google_expansion"
-    },
-    {
-        "duration": "19.210452278688518",
-        "name": "thread_times.key_silk_cases/horizontal_vertical_expansion"
-    },
-    {
-        "duration": "32.41806385858585",
-        "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html"
-    },
-    {
-        "duration": "17.064412313131317",
-        "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html"
-    },
-    {
-        "duration": "14.458769035353551",
-        "name": "thread_times.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet"
-    },
-    {
-        "duration": "18.46020021212122",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/"
-    },
-    {
-        "duration": "18.0857585959596",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/"
-    },
-    {
-        "duration": "18.66951686868687",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/"
-    },
-    {
-        "duration": "19.552565777777783",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/"
-    },
-    {
-        "duration": "19.542680515151517",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/"
-    },
-    {
-        "duration": "20.312292262626265",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/"
-    },
-    {
-        "duration": "20.243373202020205",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/jx5De/14/show/"
-    },
-    {
-        "duration": "18.522802545454542",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/"
-    },
-    {
-        "duration": "18.74329997979798",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/"
-    },
-    {
-        "duration": "20.58765239393939",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/"
-    },
-    {
-        "duration": "18.32988457575758",
-        "name": "thread_times.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/"
-    },
-    {
-        "duration": "21.54538492929293",
-        "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll"
-    },
-    {
-        "duration": "15.727110186868687",
-        "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe"
-    },
-    {
-        "duration": "30.1632374040404",
-        "name": "thread_times.key_silk_cases/http://wiltzius.github.io/shape-shifter/"
-    },
-    {
-        "duration": "18.845124777777773",
-        "name": "thread_times.key_silk_cases/http://www.google.com/#q=google"
-    },
-    {
-        "duration": "18.277203818181828",
-        "name": "thread_times.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie"
-    },
-    {
-        "duration": "33.10727125252527",
-        "name": "thread_times.key_silk_cases/inbox_app.html?stress_hidey_bars"
-    },
-    {
-        "duration": "22.397924252525254",
-        "name": "thread_times.key_silk_cases/inbox_app.html?toggle_drawer"
-    },
-    {
-        "duration": "28.995927524590165",
-        "name": "thread_times.key_silk_cases/infinite_scrolling"
-    },
-    {
-        "duration": "29.16774575757576",
-        "name": "thread_times.key_silk_cases/infinite_scrolling.html"
-    },
-    {
-        "duration": "15.610924926229501",
-        "name": "thread_times.key_silk_cases/list_animation_simple"
-    },
-    {
-        "duration": "15.846582843434346",
-        "name": "thread_times.key_silk_cases/list_animation_simple.html"
-    },
-    {
-        "duration": "32.40474127868853",
-        "name": "thread_times.key_silk_cases/list_recycle_transform"
-    },
-    {
-        "duration": "19.10130004918033",
-        "name": "thread_times.key_silk_cases/mask_transition_animation"
-    },
-    {
-        "duration": "15.877968327868858",
-        "name": "thread_times.key_silk_cases/mobile_news_sandbox"
-    },
-    {
-        "duration": "20.373808196721313",
-        "name": "thread_times.key_silk_cases/parallax_effect"
-    },
-    {
-        "duration": "14.504173442622951",
-        "name": "thread_times.key_silk_cases/physical_simulation"
-    },
-    {
-        "duration": "20.409190313131322",
-        "name": "thread_times.key_silk_cases/pushState.html"
-    },
-    {
-        "duration": "29.045594967213116",
-        "name": "thread_times.key_silk_cases/silk_finance"
-    },
-    {
-        "duration": "29.623334151515152",
-        "name": "thread_times.key_silk_cases/silk_finance.html"
-    },
-    {
-        "duration": "16.9895437704918",
-        "name": "thread_times.key_silk_cases/sticky_using_webkit"
-    },
-    {
-        "duration": "32.90224080327868",
-        "name": "thread_times.key_silk_cases/stress_hidey_bars"
-    },
-    {
-        "duration": "30.270459868852456",
-        "name": "thread_times.key_silk_cases/svg_icon_raster"
-    },
-    {
-        "duration": "18.311246688524587",
-        "name": "thread_times.key_silk_cases/swipe_to_dismiss"
-    },
-    {
-        "duration": "22.519694803278693",
-        "name": "thread_times.key_silk_cases/toggle_drawer"
-    },
-    {
-        "duration": "20.24437518032787",
-        "name": "thread_times.key_silk_cases/update_history_state"
-    },
-    {
-        "duration": "20.346623163934428",
-        "name": "thread_times.key_silk_cases/vertical_expansion"
-    },
-    {
-        "duration": "18.589314819672136",
-        "name": "thread_times.key_silk_cases/zoom_in_animation"
-    },
-    {
-        "duration": "39.29848354545454",
-        "name": "thread_times.simple_mobile_sites/ebay_scroll"
-    },
-    {
-        "duration": "30.682887343434345",
-        "name": "thread_times.simple_mobile_sites/flickr_scroll"
-    },
-    {
-        "duration": "31.54496540404039",
-        "name": "thread_times.simple_mobile_sites/http://m.nytimes.com/"
-    },
-    {
-        "duration": "39.561392040404044",
-        "name": "thread_times.simple_mobile_sites/http://www.ebay.co.uk/"
-    },
-    {
-        "duration": "33.5069418282828",
-        "name": "thread_times.simple_mobile_sites/http://www.nyc.gov"
-    },
-    {
-        "duration": "30.465235626262622",
-        "name": "thread_times.simple_mobile_sites/https://www.flickr.com/"
-    },
-    {
-        "duration": "33.76200130303029",
-        "name": "thread_times.simple_mobile_sites/nyc_gov_scroll"
-    },
-    {
-        "duration": "31.59959693939394",
-        "name": "thread_times.simple_mobile_sites/nytimes_scroll"
-    },
-    {
-        "duration": "35.56198336065574",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION"
-    },
-    {
-        "duration": "32.15435601639345",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS"
-    },
-    {
-        "duration": "27.013010245901647",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE"
-    },
-    {
-        "duration": "29.97447018032787",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE"
-    },
-    {
-        "duration": "29.44411008196722",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "33.50462498360656",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "29.37349708196722",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "28.84416409836066",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "27.928630836065576",
-        "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "40.19413134426229",
-        "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "25.449655737704912",
-        "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "22.69886003278689",
-        "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "22.775494590163934",
-        "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "21.000251540983612",
-        "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "19.20413249180328",
-        "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "17.739757278688526",
-        "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "16.590688901639343",
-        "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "15.686084057377043",
-        "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "28.419994983606554",
-        "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "24.994728508196726",
-        "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "25.455224770491803",
-        "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "25.8692473442623",
-        "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "26.452714475409838",
-        "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "23.857618131147536",
-        "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "20.83381818032787",
-        "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "19.254617180327866",
-        "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "18.028861098360657",
-        "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "16.625232409836066",
-        "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "22.362297688524592",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "22.801194196721312",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "23.058994983606556",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "23.348151688524588",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "23.440361967213118",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "22.339080442622947",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "19.80756396721312",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "17.981644180327873",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "16.309696885245902",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "15.18703783606557",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "17.909988754098357",
-        "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.327462081967216",
-        "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "18.443906344262295",
-        "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.556158868852464",
-        "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.743114557377048",
-        "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "17.228211786885243",
-        "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.593335721311469",
-        "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "14.843192024590161",
-        "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "13.919484139344265",
-        "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "13.259781483606556",
-        "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "11.62648680327869",
-        "name": "tracing.tracing_with_background_memory_infra/Facebook"
-    },
-    {
-        "duration": "12.268152721311475",
-        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
-    },
-    {
-        "duration": "10.378211418032787",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
-    },
-    {
-        "duration": "10.544552270491808",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
-    },
-    {
-        "duration": "10.287894295081967",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
-    },
-    {
-        "duration": "10.545187467213117",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
-    },
-    {
-        "duration": "13.037905959016394",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
-    },
-    {
-        "duration": "16.039089139344263",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "13.429725614754101",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "105.41662453333336",
-        "name": "v8.browsing_mobile-future/browse:chrome:newtab"
-    },
-    {
-        "duration": "38.94349348333334",
-        "name": "v8.browsing_mobile-future/browse:chrome:omnibox"
-    },
-    {
-        "duration": "123.86885229508202",
-        "name": "v8.browsing_mobile-future/browse:media:facebook_photos"
-    },
-    {
-        "duration": "78.73990490000003",
-        "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "123.45371616666667",
-        "name": "v8.browsing_mobile-future/browse:media:imgur"
-    },
-    {
-        "duration": "134.32480450000006",
-        "name": "v8.browsing_mobile-future/browse:media:youtube"
-    },
-    {
-        "duration": "178.66558918032794",
-        "name": "v8.browsing_mobile-future/browse:news:cnn"
-    },
-    {
-        "duration": "96.6198143833333",
-        "name": "v8.browsing_mobile-future/browse:news:cricbuzz"
-    },
-    {
-        "duration": "82.94377130508472",
-        "name": "v8.browsing_mobile-future/browse:news:qq"
-    },
-    {
-        "duration": "73.82486696666668",
-        "name": "v8.browsing_mobile-future/browse:news:reddit"
-    },
-    {
-        "duration": "88.8525413",
-        "name": "v8.browsing_mobile-future/browse:news:washingtonpost"
-    },
-    {
-        "duration": "126.61729618032788",
-        "name": "v8.browsing_mobile-future/browse:shopping:amazon"
-    },
-    {
-        "duration": "112.14767894999997",
-        "name": "v8.browsing_mobile-future/browse:shopping:avito"
-    },
-    {
-        "duration": "53.97795329508197",
-        "name": "v8.browsing_mobile-future/browse:shopping:lazada"
-    },
-    {
-        "duration": "116.932776147541",
-        "name": "v8.browsing_mobile-future/browse:social:facebook"
-    },
-    {
-        "duration": "346.3331828333333",
-        "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "137.20034833333338",
-        "name": "v8.browsing_mobile-future/browse:social:instagram"
-    },
-    {
-        "duration": "147.67553700000005",
-        "name": "v8.browsing_mobile-future/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "168.0231745",
-        "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "77.82194965000004",
-        "name": "v8.browsing_mobile-future/browse:social:twitter"
-    },
-    {
-        "duration": "123.03254488524593",
-        "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "76.34013451666665",
-        "name": "v8.browsing_mobile-future/browse:tools:maps"
-    },
-    {
-        "duration": "105.47530078947368",
-        "name": "v8.browsing_mobile/browse:chrome:newtab"
-    },
-    {
-        "duration": "38.530946767857145",
-        "name": "v8.browsing_mobile/browse:chrome:omnibox"
-    },
-    {
-        "duration": "124.42940463934427",
-        "name": "v8.browsing_mobile/browse:media:facebook_photos"
-    },
-    {
-        "duration": "78.50806563793105",
-        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "123.84028077586207",
-        "name": "v8.browsing_mobile/browse:media:imgur"
-    },
-    {
-        "duration": "132.47249980392155",
-        "name": "v8.browsing_mobile/browse:media:youtube"
-    },
-    {
-        "duration": "179.8774849180328",
-        "name": "v8.browsing_mobile/browse:news:cnn"
-    },
-    {
-        "duration": "93.89134496610167",
-        "name": "v8.browsing_mobile/browse:news:cricbuzz"
-    },
-    {
-        "duration": "82.70660055357145",
-        "name": "v8.browsing_mobile/browse:news:qq"
-    },
-    {
-        "duration": "73.51167000000001",
-        "name": "v8.browsing_mobile/browse:news:reddit"
-    },
-    {
-        "duration": "88.70962062745097",
-        "name": "v8.browsing_mobile/browse:news:washingtonpost"
-    },
-    {
-        "duration": "123.76626196721311",
-        "name": "v8.browsing_mobile/browse:shopping:amazon"
-    },
-    {
-        "duration": "112.45641118032789",
-        "name": "v8.browsing_mobile/browse:shopping:avito"
-    },
-    {
-        "duration": "54.440948147540965",
-        "name": "v8.browsing_mobile/browse:shopping:lazada"
-    },
-    {
-        "duration": "117.23906829508196",
-        "name": "v8.browsing_mobile/browse:social:facebook"
-    },
-    {
-        "duration": "347.31532147540975",
-        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "135.43384913793105",
-        "name": "v8.browsing_mobile/browse:social:instagram"
-    },
-    {
-        "duration": "147.1208457142857",
-        "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll"
-    },
-    {
-        "duration": "167.05851574074075",
-        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "77.42943426923078",
-        "name": "v8.browsing_mobile/browse:social:twitter"
-    },
-    {
-        "duration": "122.23090967213116",
-        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "76.53326107017546",
-        "name": "v8.browsing_mobile/browse:tools:maps"
-    },
-    {
-        "duration": "27.498429590163944",
-        "name": "wasm/AsmJsZenGarden"
-    },
-    {
-        "duration": "64.15932316393443",
-        "name": "wasm/WasmSpaceBuggy"
-    },
-    {
-        "duration": "27.54625806557376",
-        "name": "wasm/WasmStylizedRenderer"
-    },
-    {
-        "duration": "27.556006065573772",
-        "name": "wasm/WasmSunTemple"
-    },
-    {
-        "duration": "48.98831089344265",
-        "name": "wasm/WasmTanks"
-    },
-    {
-        "duration": "27.51685060655738",
-        "name": "wasm/WasmZenGarden"
-    },
-    {
-        "duration": "21.52393575409837",
-        "name": "webrtc/10s_datachannel_transfer"
-    },
-    {
-        "duration": "27.097270950819677",
-        "name": "webrtc/canvas_capture_peer_connection"
-    },
-    {
-        "duration": "37.32259072131148",
-        "name": "webrtc/codec_constraints_h264"
-    },
-    {
-        "duration": "37.41315247540984",
-        "name": "webrtc/codec_constraints_vp8"
-    },
-    {
-        "duration": "37.29322452459017",
-        "name": "webrtc/codec_constraints_vp9"
-    },
-    {
-        "duration": "23.59042208196722",
-        "name": "webrtc/hd_local_stream_10s"
-    },
-    {
-        "duration": "44.92994696721313",
-        "name": "webrtc/multiple_peerconnections"
-    },
-    {
-        "duration": "67.37556847540985",
-        "name": "webrtc/pause_play_peerconnections"
-    }
-]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/pixel2_webview_story_timing.json b/tools/perf/core/shard_maps/timing_data/pixel2_webview_story_timing.json
deleted file mode 100644
index 0637a08..0000000
--- a/tools/perf/core/shard_maps/timing_data/pixel2_webview_story_timing.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/win10_highdpi_story_timing.json b/tools/perf/core/shard_maps/timing_data/win10_highdpi_story_timing.json
deleted file mode 100644
index 926fb67..0000000
--- a/tools/perf/core/shard_maps/timing_data/win10_highdpi_story_timing.json
+++ /dev/null
@@ -1,5694 +0,0 @@
-[
-    {
-        "duration": "11.850393969696968",
-        "name": "blink_perf.bindings/append-child.html"
-    },
-    {
-        "duration": "7.503030305050504",
-        "name": "blink_perf.bindings/create-element.html"
-    },
-    {
-        "duration": "7.061232335353535",
-        "name": "blink_perf.bindings/document-implementation.html"
-    },
-    {
-        "duration": "6.992949510101012",
-        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
-    },
-    {
-        "duration": "7.347151497979796",
-        "name": "blink_perf.bindings/first-child.html"
-    },
-    {
-        "duration": "4.708414115151515",
-        "name": "blink_perf.bindings/gc-forest.html"
-    },
-    {
-        "duration": "5.545252526262629",
-        "name": "blink_perf.bindings/gc-mini-tree.html"
-    },
-    {
-        "duration": "18.99659595454546",
-        "name": "blink_perf.bindings/gc-tree.html"
-    },
-    {
-        "duration": "7.001585893939394",
-        "name": "blink_perf.bindings/get-attribute-rare.html"
-    },
-    {
-        "duration": "6.866464659595958",
-        "name": "blink_perf.bindings/get-attribute.html"
-    },
-    {
-        "duration": "7.143535341414144",
-        "name": "blink_perf.bindings/get-element-by-id.html"
-    },
-    {
-        "duration": "7.149494988888891",
-        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
-    },
-    {
-        "duration": "7.219333329292931",
-        "name": "blink_perf.bindings/id-getter.html"
-    },
-    {
-        "duration": "7.05094947878788",
-        "name": "blink_perf.bindings/id-setter.html"
-    },
-    {
-        "duration": "7.556878797979798",
-        "name": "blink_perf.bindings/indexed-getter.html"
-    },
-    {
-        "duration": "7.310131305050505",
-        "name": "blink_perf.bindings/insert-before.html"
-    },
-    {
-        "duration": "6.887939412121213",
-        "name": "blink_perf.bindings/named-property-enumerator.html"
-    },
-    {
-        "duration": "27.610999989898996",
-        "name": "blink_perf.bindings/node-list-access.html"
-    },
-    {
-        "duration": "7.26337376060606",
-        "name": "blink_perf.bindings/node-type.html"
-    },
-    {
-        "duration": "1.7968686828282827",
-        "name": "blink_perf.bindings/post-message.html"
-    },
-    {
-        "duration": "7.661717124242425",
-        "name": "blink_perf.bindings/sequence-conversion-array.html"
-    },
-    {
-        "duration": "7.3084545494949475",
-        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
-    },
-    {
-        "duration": "1.9026363484848487",
-        "name": "blink_perf.bindings/serialize-array.html"
-    },
-    {
-        "duration": "1.5409899222222219",
-        "name": "blink_perf.bindings/serialize-long-string.html"
-    },
-    {
-        "duration": "3.620575752525252",
-        "name": "blink_perf.bindings/serialize-map.html"
-    },
-    {
-        "duration": "1.5426262717171717",
-        "name": "blink_perf.bindings/serialize-nested-array.html"
-    },
-    {
-        "duration": "7.164878775757574",
-        "name": "blink_perf.bindings/set-attribute-rare.html"
-    },
-    {
-        "duration": "7.086232339393941",
-        "name": "blink_perf.bindings/set-attribute.html"
-    },
-    {
-        "duration": "8.711626284848483",
-        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
-    },
-    {
-        "duration": "8.667202066666665",
-        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
-    },
-    {
-        "duration": "4.420757596969698",
-        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
-    },
-    {
-        "duration": "4.417585862626261",
-        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
-    },
-    {
-        "duration": "7.61487878888889",
-        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
-    },
-    {
-        "duration": "7.366828318181819",
-        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
-    },
-    {
-        "duration": "7.401202035353537",
-        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
-    },
-    {
-        "duration": "7.260484861616164",
-        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
-    },
-    {
-        "duration": "7.308474762626262",
-        "name": "blink_perf.bindings/undefined-first-child.html"
-    },
-    {
-        "duration": "7.252969692929292",
-        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
-    },
-    {
-        "duration": "7.418888872727273",
-        "name": "blink_perf.bindings/undefined-id-getter.html"
-    },
-    {
-        "duration": "11.99351506565657",
-        "name": "blink_perf.canvas/createImageBitmapFromImageData.html"
-    },
-    {
-        "duration": "5.392161610101013",
-        "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "17.696686878787883",
-        "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "1.6545252525252525",
-        "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html"
-    },
-    {
-        "duration": "3.823525252525255",
-        "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "3.017080819191919",
-        "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "6.37388890909091",
-        "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html"
-    },
-    {
-        "duration": "7.748656576767677",
-        "name": "blink_perf.canvas/drawimage-not-pixelaligned.html"
-    },
-    {
-        "duration": "7.711818157575754",
-        "name": "blink_perf.canvas/drawimage.html"
-    },
-    {
-        "duration": "8.3351515050505",
-        "name": "blink_perf.canvas/getImageData.html"
-    },
-    {
-        "duration": "9.162959662626266",
-        "name": "blink_perf.canvas/getImageDataColorManaged.html"
-    },
-    {
-        "duration": "7.991181814141414",
-        "name": "blink_perf.canvas/putImageData.html"
-    },
-    {
-        "duration": "3.4390606111111115",
-        "name": "blink_perf.canvas/toBlob_duration.html"
-    },
-    {
-        "duration": "3.1314141424242425",
-        "name": "blink_perf.canvas/toBlob_duration_jpeg.html"
-    },
-    {
-        "duration": "2.8016363484848474",
-        "name": "blink_perf.canvas/transferFromImageBitmap.html"
-    },
-    {
-        "duration": "4.1477070636363615",
-        "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html"
-    },
-    {
-        "duration": "9.509717176767674",
-        "name": "blink_perf.canvas/upload-video-to-sub-texture.html"
-    },
-    {
-        "duration": "5.225252510101009",
-        "name": "blink_perf.canvas/upload-video-to-texture.html"
-    },
-    {
-        "duration": "4.616656590909092",
-        "name": "blink_perf.canvas/upload-webgl-to-texture.html"
-    },
-    {
-        "duration": "17.54732321717172",
-        "name": "blink_perf.css/AttributeDescendantSelector.html"
-    },
-    {
-        "duration": "7.454040419191919",
-        "name": "blink_perf.css/CSSPropertySetterGetter.html"
-    },
-    {
-        "duration": "7.541232320202021",
-        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
-    },
-    {
-        "duration": "7.49953537070707",
-        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
-    },
-    {
-        "duration": "9.780232343434346",
-        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
-    },
-    {
-        "duration": "9.839747444444445",
-        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
-    },
-    {
-        "duration": "9.771737368686866",
-        "name": "blink_perf.css/ChangeStyleElementSelector.html"
-    },
-    {
-        "duration": "9.863494964646465",
-        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
-    },
-    {
-        "duration": "9.865535358585857",
-        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
-    },
-    {
-        "duration": "9.851525267676768",
-        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
-    },
-    {
-        "duration": "9.822818287878787",
-        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
-    },
-    {
-        "duration": "9.885919156565656",
-        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
-    },
-    {
-        "duration": "9.891959595959595",
-        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
-    },
-    {
-        "duration": "9.913959595959597",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "9.883121257575757",
-        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "11.224030257575759",
-        "name": "blink_perf.css/ChangeStyleShallowTree.html"
-    },
-    {
-        "duration": "9.839969737373737",
-        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
-    },
-    {
-        "duration": "9.850090934343438",
-        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
-    },
-    {
-        "duration": "9.815141373737374",
-        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
-    },
-    {
-        "duration": "9.8357778030303",
-        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
-    },
-    {
-        "duration": "9.846040414141413",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
-    },
-    {
-        "duration": "9.858818161616162",
-        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
-    },
-    {
-        "duration": "13.2593737929293",
-        "name": "blink_perf.css/ClassDescendantSelector.html"
-    },
-    {
-        "duration": "8.232151485858587",
-        "name": "blink_perf.css/ClassInvalidation.html"
-    },
-    {
-        "duration": "11.310818151515157",
-        "name": "blink_perf.css/FocusUpdate.html"
-    },
-    {
-        "duration": "10.18426263636364",
-        "name": "blink_perf.css/LoadBootstrapBlog.html"
-    },
-    {
-        "duration": "10.495717171717171",
-        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
-    },
-    {
-        "duration": "10.823444474747475",
-        "name": "blink_perf.css/LoadSemanticPageExample.html"
-    },
-    {
-        "duration": "7.283131309090906",
-        "name": "blink_perf.css/PseudoClassSelectors.html"
-    },
-    {
-        "duration": "8.728666646464646",
-        "name": "blink_perf.css/SelectorCountScaling.html"
-    },
-    {
-        "duration": "9.38569698989899",
-        "name": "blink_perf.dom/addRange.html"
-    },
-    {
-        "duration": "1.8826262464646466",
-        "name": "blink_perf.dom/delete-in-password-field.html"
-    },
-    {
-        "duration": "8.013191943434343",
-        "name": "blink_perf.dom/div-editable.html"
-    },
-    {
-        "duration": "1.5727474787878788",
-        "name": "blink_perf.dom/inner_html_with_selection.html"
-    },
-    {
-        "duration": "13.534444393939394",
-        "name": "blink_perf.dom/long-sibling-list.html"
-    },
-    {
-        "duration": "2.9950909232323233",
-        "name": "blink_perf.dom/modify-element-classname.html"
-    },
-    {
-        "duration": "2.2810403838383833",
-        "name": "blink_perf.dom/modify-element-id.html"
-    },
-    {
-        "duration": "2.2220202070707074",
-        "name": "blink_perf.dom/modify-element-title.html"
-    },
-    {
-        "duration": "1.8530303070707068",
-        "name": "blink_perf.dom/move-down-with-hidden-elements.html"
-    },
-    {
-        "duration": "1.847515156565657",
-        "name": "blink_perf.dom/move-up-with-hidden-elements.html"
-    },
-    {
-        "duration": "1.6623838454545452",
-        "name": "blink_perf.dom/remove_child_with_selection.html"
-    },
-    {
-        "duration": "7.947080776767676",
-        "name": "blink_perf.dom/select-multiple-add.html"
-    },
-    {
-        "duration": "7.714585844444445",
-        "name": "blink_perf.dom/select-single-add.html"
-    },
-    {
-        "duration": "7.574060588888886",
-        "name": "blink_perf.dom/select-single-remove.html"
-    },
-    {
-        "duration": "7.631686892929295",
-        "name": "blink_perf.dom/textarea-dom.html"
-    },
-    {
-        "duration": "7.594121206060608",
-        "name": "blink_perf.dom/textarea-edit.html"
-    },
-    {
-        "duration": "11.794242449494957",
-        "name": "blink_perf.events/EventsDispatching.html"
-    },
-    {
-        "duration": "8.782060611111111",
-        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html"
-    },
-    {
-        "duration": "17.686515191919188",
-        "name": "blink_perf.events/EventsDispatchingInShadowTrees.html"
-    },
-    {
-        "duration": "12.499262626262626",
-        "name": "blink_perf.events/hit-test-lots-of-layers.html"
-    },
-    {
-        "duration": "26.816121191919198",
-        "name": "blink_perf.image_decoder/decode-gif.html"
-    },
-    {
-        "duration": "12.437606065656563",
-        "name": "blink_perf.image_decoder/decode-jpeg.html"
-    },
-    {
-        "duration": "20.71432328282828",
-        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
-    },
-    {
-        "duration": "10.967606060606066",
-        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
-    },
-    {
-        "duration": "16.038262636363637",
-        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
-    },
-    {
-        "duration": "13.17494951010101",
-        "name": "blink_perf.image_decoder/decode-png-palette.html"
-    },
-    {
-        "duration": "22.422646474747474",
-        "name": "blink_perf.image_decoder/decode-png.html"
-    },
-    {
-        "duration": "10.346727231313135",
-        "name": "blink_perf.layout/ArabicLineLayout.html"
-    },
-    {
-        "duration": "1.7740606232323235",
-        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
-    },
-    {
-        "duration": "7.433686874747477",
-        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
-    },
-    {
-        "duration": "9.038999989898988",
-        "name": "blink_perf.layout/add-remove-inline-floats.html"
-    },
-    {
-        "duration": "7.782555541414139",
-        "name": "blink_perf.layout/attach-inlines-2.html"
-    },
-    {
-        "duration": "6.916434344444441",
-        "name": "blink_perf.layout/attach-inlines.html"
-    },
-    {
-        "duration": "8.818939409090907",
-        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
-    },
-    {
-        "duration": "7.058555546464645",
-        "name": "blink_perf.layout/chapter-reflow-once-random.html"
-    },
-    {
-        "duration": "11.631515146464645",
-        "name": "blink_perf.layout/chapter-reflow-once.html"
-    },
-    {
-        "duration": "8.252636358585859",
-        "name": "blink_perf.layout/chapter-reflow-thrice.html"
-    },
-    {
-        "duration": "9.146969696969697",
-        "name": "blink_perf.layout/chapter-reflow-twice.html"
-    },
-    {
-        "duration": "7.202787881818181",
-        "name": "blink_perf.layout/chapter-reflow.html"
-    },
-    {
-        "duration": "3.785010107070708",
-        "name": "blink_perf.layout/character_fallback.html"
-    },
-    {
-        "duration": "1.761636367676767",
-        "name": "blink_perf.layout/character_fallback_aat.html"
-    },
-    {
-        "duration": "9.153333383838385",
-        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
-    },
-    {
-        "duration": "8.867464601010102",
-        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
-    },
-    {
-        "duration": "7.394404016161617",
-        "name": "blink_perf.layout/flexbox-column-nowrap.html"
-    },
-    {
-        "duration": "7.3503333595959575",
-        "name": "blink_perf.layout/flexbox-column-wrap.html"
-    },
-    {
-        "duration": "7.447797966666665",
-        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
-    },
-    {
-        "duration": "8.92109093434344",
-        "name": "blink_perf.layout/flexbox-lots-of-data.html"
-    },
-    {
-        "duration": "7.423585860606059",
-        "name": "blink_perf.layout/flexbox-row-nowrap.html"
-    },
-    {
-        "duration": "7.443919146464647",
-        "name": "blink_perf.layout/flexbox-row-wrap.html"
-    },
-    {
-        "duration": "7.0987171858585825",
-        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
-    },
-    {
-        "duration": "10.22315144949495",
-        "name": "blink_perf.layout/floats_100_100.html"
-    },
-    {
-        "duration": "10.37197977777778",
-        "name": "blink_perf.layout/floats_100_100_nested.html"
-    },
-    {
-        "duration": "6.6620505242424235",
-        "name": "blink_perf.layout/floats_10_1000.html"
-    },
-    {
-        "duration": "3.8134242444444433",
-        "name": "blink_perf.layout/floats_20_100.html"
-    },
-    {
-        "duration": "4.40039394949495",
-        "name": "blink_perf.layout/floats_20_100_nested.html"
-    },
-    {
-        "duration": "2.6902727252525263",
-        "name": "blink_perf.layout/floats_2_100.html"
-    },
-    {
-        "duration": "2.59917171010101",
-        "name": "blink_perf.layout/floats_2_100_nested.html"
-    },
-    {
-        "duration": "4.655959621212122",
-        "name": "blink_perf.layout/floats_50_100.html"
-    },
-    {
-        "duration": "4.946272719191921",
-        "name": "blink_perf.layout/floats_50_100_nested.html"
-    },
-    {
-        "duration": "7.37470706767677",
-        "name": "blink_perf.layout/hindi-line-layout.html"
-    },
-    {
-        "duration": "8.054393930303032",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
-    },
-    {
-        "duration": "8.07083837272727",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
-    },
-    {
-        "duration": "8.042878797979794",
-        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
-    },
-    {
-        "duration": "2.1921616101010097",
-        "name": "blink_perf.layout/latin-complex-text.html"
-    },
-    {
-        "duration": "2.2805151494949496",
-        "name": "blink_perf.layout/layers_overlap_2d.html"
-    },
-    {
-        "duration": "2.429404044444445",
-        "name": "blink_perf.layout/layers_overlap_3d.html"
-    },
-    {
-        "duration": "8.19663632929293",
-        "name": "blink_perf.layout/line-layout-line-height.html"
-    },
-    {
-        "duration": "7.075939392929294",
-        "name": "blink_perf.layout/line-layout-repeat-append.html"
-    },
-    {
-        "duration": "6.896232329292933",
-        "name": "blink_perf.layout/line-layout.html"
-    },
-    {
-        "duration": "1.871707065656565",
-        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
-    },
-    {
-        "duration": "1.8789899060606055",
-        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
-    },
-    {
-        "duration": "4.291020178787881",
-        "name": "blink_perf.layout/long-line-nowrap.html"
-    },
-    {
-        "duration": "7.373666650505051",
-        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
-    },
-    {
-        "duration": "7.205080817171718",
-        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
-    },
-    {
-        "duration": "6.775323247474749",
-        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
-    },
-    {
-        "duration": "6.982080831313131",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
-    },
-    {
-        "duration": "6.8465555575757575",
-        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
-    },
-    {
-        "duration": "7.449464638383838",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
-    },
-    {
-        "duration": "7.475888897979797",
-        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
-    },
-    {
-        "duration": "7.267888906060605",
-        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
-    },
-    {
-        "duration": "7.475646456565656",
-        "name": "blink_perf.layout/nested-grid.html"
-    },
-    {
-        "duration": "13.373424222222223",
-        "name": "blink_perf.layout/nested-percent-height-tables.html"
-    },
-    {
-        "duration": "51.49417173737374",
-        "name": "blink_perf.layout/subtree-detaching.html"
-    },
-    {
-        "duration": "3.2012020222222217",
-        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
-    },
-    {
-        "duration": "3.6646363545454532",
-        "name": "blink_perf.layout/word-break-break-all.html"
-    },
-    {
-        "duration": "3.6936363767676763",
-        "name": "blink_perf.layout/word-break-break-word.html"
-    },
-    {
-        "duration": "3.676686871717171",
-        "name": "blink_perf.layout/word-wrap-break-word.html"
-    },
-    {
-        "duration": "16.762747515151517",
-        "name": "blink_perf.owp_storage/blob-perf-files.html"
-    },
-    {
-        "duration": "13.229030308080814",
-        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
-    },
-    {
-        "duration": "11.21367677777778",
-        "name": "blink_perf.owp_storage/blob-perf-shm.html"
-    },
-    {
-        "duration": "13.202757575757579",
-        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
-    },
-    {
-        "duration": "13.640363621212112",
-        "name": "blink_perf.owp_storage/idb-load-docs.html"
-    },
-    {
-        "duration": "15.165838393939385",
-        "name": "blink_perf.paint/appending-text.html"
-    },
-    {
-        "duration": "18.154292888888886",
-        "name": "blink_perf.paint/color-changes.html"
-    },
-    {
-        "duration": "15.968030323232323",
-        "name": "blink_perf.paint/complex-content-slow-scroll.html"
-    },
-    {
-        "duration": "14.979959611111113",
-        "name": "blink_perf.paint/containment-resize.html"
-    },
-    {
-        "duration": "14.792070792929291",
-        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
-    },
-    {
-        "duration": "17.22665655050505",
-        "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html"
-    },
-    {
-        "duration": "13.958747515151517",
-        "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html"
-    },
-    {
-        "duration": "18.175282888888884",
-        "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html"
-    },
-    {
-        "duration": "14.828252525252523",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html"
-    },
-    {
-        "duration": "15.417383808080803",
-        "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html"
-    },
-    {
-        "duration": "12.91895964646464",
-        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
-    },
-    {
-        "duration": "16.062979787878792",
-        "name": "blink_perf.paint/large-table-repaint.html"
-    },
-    {
-        "duration": "12.312777813131316",
-        "name": "blink_perf.paint/move-text-with-mask.html"
-    },
-    {
-        "duration": "15.015868671717183",
-        "name": "blink_perf.paint/paint-offset-changes.html"
-    },
-    {
-        "duration": "22.637676777777777",
-        "name": "blink_perf.paint/transform-changes.html"
-    },
-    {
-        "duration": "12.351939388888892",
-        "name": "blink_perf.parser/css-parser-yui.html"
-    },
-    {
-        "duration": "8.697979802020201",
-        "name": "blink_perf.parser/html-parser-threaded.html"
-    },
-    {
-        "duration": "8.278222220202018",
-        "name": "blink_perf.parser/html-parser.html"
-    },
-    {
-        "duration": "30.700020222222232",
-        "name": "blink_perf.parser/html5-full-render.html"
-    },
-    {
-        "duration": "7.544000017171716",
-        "name": "blink_perf.parser/iframe-append-remove.html"
-    },
-    {
-        "duration": "7.621343428282833",
-        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
-    },
-    {
-        "duration": "7.559676770707072",
-        "name": "blink_perf.parser/innerHTML-setter.html"
-    },
-    {
-        "duration": "7.635333327272731",
-        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
-    },
-    {
-        "duration": "7.638040404040406",
-        "name": "blink_perf.parser/query-selector-all-attribute.html"
-    },
-    {
-        "duration": "7.448040404040405",
-        "name": "blink_perf.parser/query-selector-all-class-deep.html"
-    },
-    {
-        "duration": "8.480606086868688",
-        "name": "blink_perf.parser/query-selector-all-class-first.html"
-    },
-    {
-        "duration": "7.625232344444444",
-        "name": "blink_perf.parser/query-selector-all-class-last.html"
-    },
-    {
-        "duration": "7.734909056565658",
-        "name": "blink_perf.parser/query-selector-all-class.html"
-    },
-    {
-        "duration": "7.500252520202022",
-        "name": "blink_perf.parser/query-selector-all-deep.html"
-    },
-    {
-        "duration": "8.422525242424243",
-        "name": "blink_perf.parser/query-selector-all-first.html"
-    },
-    {
-        "duration": "8.888929287878788",
-        "name": "blink_perf.parser/query-selector-all-id-deep.html"
-    },
-    {
-        "duration": "8.438505045454548",
-        "name": "blink_perf.parser/query-selector-all-id-first.html"
-    },
-    {
-        "duration": "8.758565631313129",
-        "name": "blink_perf.parser/query-selector-all-id-last.html"
-    },
-    {
-        "duration": "7.8251817989899",
-        "name": "blink_perf.parser/query-selector-all-last.html"
-    },
-    {
-        "duration": "7.367333302020204",
-        "name": "blink_perf.parser/query-selector-deep.html"
-    },
-    {
-        "duration": "7.505080811111112",
-        "name": "blink_perf.parser/query-selector-first.html"
-    },
-    {
-        "duration": "7.6685151373737375",
-        "name": "blink_perf.parser/query-selector-id-deep.html"
-    },
-    {
-        "duration": "7.786606049494947",
-        "name": "blink_perf.parser/query-selector-id-last.html"
-    },
-    {
-        "duration": "7.820717184848486",
-        "name": "blink_perf.parser/query-selector-last.html"
-    },
-    {
-        "duration": "7.127505044444442",
-        "name": "blink_perf.parser/simple-url.html"
-    },
-    {
-        "duration": "7.969050519191919",
-        "name": "blink_perf.parser/textarea-parsing.html"
-    },
-    {
-        "duration": "7.375707046464646",
-        "name": "blink_perf.parser/tiny-innerHTML.html"
-    },
-    {
-        "duration": "8.140353505050504",
-        "name": "blink_perf.parser/url-parser.html"
-    },
-    {
-        "duration": "7.283313124242421",
-        "name": "blink_perf.parser/xml-parser.html"
-    },
-    {
-        "duration": "6.846858553535351",
-        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
-    },
-    {
-        "duration": "2.1604242494949495",
-        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
-    },
-    {
-        "duration": "2.247525258585859",
-        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
-    },
-    {
-        "duration": "1.7050100969696969",
-        "name": "blink_perf.shadow_dom/shadow-style-share.html"
-    },
-    {
-        "duration": "1.845171706060606",
-        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
-    },
-    {
-        "duration": "1.8806767696969697",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html"
-    },
-    {
-        "duration": "2.3220000030303027",
-        "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html"
-    },
-    {
-        "duration": "3.549929286868687",
-        "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html"
-    },
-    {
-        "duration": "3.72138383939394",
-        "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html"
-    },
-    {
-        "duration": "1.8872121323232323",
-        "name": "blink_perf.shadow_dom/v0-content-reprojection.html"
-    },
-    {
-        "duration": "1.7125656595959595",
-        "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html"
-    },
-    {
-        "duration": "1.6809494969696972",
-        "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html"
-    },
-    {
-        "duration": "1.8918383858585852",
-        "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html"
-    },
-    {
-        "duration": "1.6916767545454545",
-        "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html"
-    },
-    {
-        "duration": "15.806242424242424",
-        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
-    },
-    {
-        "duration": "1.557040394949495",
-        "name": "blink_perf.shadow_dom/v1-distribution.html"
-    },
-    {
-        "duration": "1.5849595979797981",
-        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
-    },
-    {
-        "duration": "15.818939388888895",
-        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
-    },
-    {
-        "duration": "34.10340404040405",
-        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
-    },
-    {
-        "duration": "1.557636360606061",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
-    },
-    {
-        "duration": "1.6170303202020204",
-        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
-    },
-    {
-        "duration": "2.021121210101009",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
-    },
-    {
-        "duration": "1.619555562626263",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "1.6222121282828281",
-        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "1.922232313131314",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
-    },
-    {
-        "duration": "1.644686852525253",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
-    },
-    {
-        "duration": "1.6638686757575765",
-        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
-    },
-    {
-        "duration": "1.537151526262626",
-        "name": "blink_perf.shadow_dom/v1-slot-append.html"
-    },
-    {
-        "duration": "3.097868685858586",
-        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
-    },
-    {
-        "duration": "3.1138484858585858",
-        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
-    },
-    {
-        "duration": "1.5417878868686872",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
-    },
-    {
-        "duration": "1.5514242424242422",
-        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
-    },
-    {
-        "duration": "6.111989913131314",
-        "name": "blink_perf.svg/AzLizardBenjiPark.html"
-    },
-    {
-        "duration": "3.1386868707070703",
-        "name": "blink_perf.svg/Bamboo.html"
-    },
-    {
-        "duration": "1.9351615979797978",
-        "name": "blink_perf.svg/Cactus.html"
-    },
-    {
-        "duration": "1.92946465050505",
-        "name": "blink_perf.svg/Cowboy.html"
-    },
-    {
-        "duration": "3.5596262606060614",
-        "name": "blink_perf.svg/Cowboy_transform.html"
-    },
-    {
-        "duration": "1.7019495030303027",
-        "name": "blink_perf.svg/CrawFishGanson.html"
-    },
-    {
-        "duration": "1.82923231111111",
-        "name": "blink_perf.svg/Debian.html"
-    },
-    {
-        "duration": "1.687525247474747",
-        "name": "blink_perf.svg/DropsOnABlade.html"
-    },
-    {
-        "duration": "1.6795252494949497",
-        "name": "blink_perf.svg/FlowerFromMyGarden.html"
-    },
-    {
-        "duration": "1.7643434343434345",
-        "name": "blink_perf.svg/FoodLeifLodahl.html"
-    },
-    {
-        "duration": "1.8458787737373734",
-        "name": "blink_perf.svg/France.html"
-    },
-    {
-        "duration": "1.681121228282829",
-        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
-    },
-    {
-        "duration": "1.9306161727272715",
-        "name": "blink_perf.svg/GearFlowers.html"
-    },
-    {
-        "duration": "1.7340505010101013",
-        "name": "blink_perf.svg/HarveyRayner.html"
-    },
-    {
-        "duration": "1.6850404030303028",
-        "name": "blink_perf.svg/HereGear.html"
-    },
-    {
-        "duration": "3.464868684848484",
-        "name": "blink_perf.svg/MtSaintHelens.html"
-    },
-    {
-        "duration": "1.6374949545454545",
-        "name": "blink_perf.svg/Samurai.html"
-    },
-    {
-        "duration": "33.12736360606062",
-        "name": "blink_perf.svg/SierpinskiCarpet.html"
-    },
-    {
-        "duration": "2.9998282838383847",
-        "name": "blink_perf.svg/SvgCubics.html"
-    },
-    {
-        "duration": "2.2271919171717167",
-        "name": "blink_perf.svg/SvgHitTesting.html"
-    },
-    {
-        "duration": "7.960595973737375",
-        "name": "blink_perf.svg/SvgNestedUse.html"
-    },
-    {
-        "duration": "1.749494947474748",
-        "name": "blink_perf.svg/UnderTheSee.html"
-    },
-    {
-        "duration": "2.033676784848485",
-        "name": "blink_perf.svg/WorldIso.html"
-    },
-    {
-        "duration": "3.0995959636363635",
-        "name": "blink_perf.svg/Worldcup.html"
-    },
-    {
-        "duration": "33.415434343434335",
-        "name": "dromaeo/http://dromaeo.com?dom-attr"
-    },
-    {
-        "duration": "32.56941414141415",
-        "name": "dromaeo/http://dromaeo.com?dom-modify"
-    },
-    {
-        "duration": "48.42508080808082",
-        "name": "dromaeo/http://dromaeo.com?dom-query"
-    },
-    {
-        "duration": "27.969899020202007",
-        "name": "dromaeo/http://dromaeo.com?dom-traverse"
-    },
-    {
-        "duration": "17.245101030303033",
-        "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "2.9755353363636363",
-        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "2.4593737363636365",
-        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
-    },
-    {
-        "duration": "202.85856565656562",
-        "name": "jetstream/http://browserbench.org/JetStream/"
-    },
-    {
-        "duration": "29.93683835353535",
-        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
-    },
-    {
-        "duration": "115.79520204040404",
-        "name": "loading.desktop/24h"
-    },
-    {
-        "duration": "49.01622222222222",
-        "name": "loading.desktop/24h_cold"
-    },
-    {
-        "duration": "61.295221888888896",
-        "name": "loading.desktop/24h_warm"
-    },
-    {
-        "duration": "0.00150001045",
-        "name": "loading.desktop/2ch"
-    },
-    {
-        "duration": "152.7568586565656",
-        "name": "loading.desktop/AirBnB"
-    },
-    {
-        "duration": "57.07977777777777",
-        "name": "loading.desktop/AirBnB_cold"
-    },
-    {
-        "duration": "84.44122222222224",
-        "name": "loading.desktop/AirBnB_warm"
-    },
-    {
-        "duration": "81.5796161414141",
-        "name": "loading.desktop/Aljayyash"
-    },
-    {
-        "duration": "36.66333344444445",
-        "name": "loading.desktop/Aljayyash_cold"
-    },
-    {
-        "duration": "42.017",
-        "name": "loading.desktop/Aljayyash_warm"
-    },
-    {
-        "duration": "177.77539391919194",
-        "name": "loading.desktop/AllRecipes"
-    },
-    {
-        "duration": "72.87233333333333",
-        "name": "loading.desktop/AllRecipes_cold"
-    },
-    {
-        "duration": "100.69244444444445",
-        "name": "loading.desktop/AllRecipes_warm"
-    },
-    {
-        "duration": "157.9158888484848",
-        "name": "loading.desktop/ArsTechnica"
-    },
-    {
-        "duration": "64.47455544444445",
-        "name": "loading.desktop/ArsTechnica_cold"
-    },
-    {
-        "duration": "92.54277777777777",
-        "name": "loading.desktop/ArsTechnica_warm"
-    },
-    {
-        "duration": "80.38057576767677",
-        "name": "loading.desktop/Baidu"
-    },
-    {
-        "duration": "37.15155555555556",
-        "name": "loading.desktop/Baidu_cold"
-    },
-    {
-        "duration": "42.347111",
-        "name": "loading.desktop/Baidu_warm"
-    },
-    {
-        "duration": "152.58226263636365",
-        "name": "loading.desktop/Bhaskar"
-    },
-    {
-        "duration": "60.74755544444444",
-        "name": "loading.desktop/Bhaskar_cold"
-    },
-    {
-        "duration": "82.68355555555556",
-        "name": "loading.desktop/Bhaskar_warm"
-    },
-    {
-        "duration": "113.17770705050503",
-        "name": "loading.desktop/Chosun"
-    },
-    {
-        "duration": "46.97222222222223",
-        "name": "loading.desktop/Chosun_cold"
-    },
-    {
-        "duration": "58.54900000000001",
-        "name": "loading.desktop/Chosun_warm"
-    },
-    {
-        "duration": "103.54197974747468",
-        "name": "loading.desktop/Colorado.edu"
-    },
-    {
-        "duration": "45.382222222222225",
-        "name": "loading.desktop/Colorado.edu_cold"
-    },
-    {
-        "duration": "55.10599988888888",
-        "name": "loading.desktop/Colorado.edu_warm"
-    },
-    {
-        "duration": "99.9402727272727",
-        "name": "loading.desktop/Danawa"
-    },
-    {
-        "duration": "43.295111222222225",
-        "name": "loading.desktop/Danawa_cold"
-    },
-    {
-        "duration": "54.21388866666666",
-        "name": "loading.desktop/Danawa_warm"
-    },
-    {
-        "duration": "98.89663635353534",
-        "name": "loading.desktop/Daum"
-    },
-    {
-        "duration": "43.68855555555555",
-        "name": "loading.desktop/Daum_cold"
-    },
-    {
-        "duration": "52.729111222222215",
-        "name": "loading.desktop/Daum_warm"
-    },
-    {
-        "duration": "119.02746457575762",
-        "name": "loading.desktop/Donga"
-    },
-    {
-        "duration": "48.79377788888889",
-        "name": "loading.desktop/Donga_cold"
-    },
-    {
-        "duration": "61.68666677777777",
-        "name": "loading.desktop/Donga_warm"
-    },
-    {
-        "duration": "140.52727272727267",
-        "name": "loading.desktop/Economist"
-    },
-    {
-        "duration": "58.543111111111116",
-        "name": "loading.desktop/Economist_cold"
-    },
-    {
-        "duration": "82.5615",
-        "name": "loading.desktop/Economist_warm"
-    },
-    {
-        "duration": "228.69829291919189",
-        "name": "loading.desktop/Elmundo"
-    },
-    {
-        "duration": "78.18244466666667",
-        "name": "loading.desktop/Elmundo_cold"
-    },
-    {
-        "duration": "150.45255555555556",
-        "name": "loading.desktop/Elmundo_warm"
-    },
-    {
-        "duration": "101.09244436363633",
-        "name": "loading.desktop/FC2Blog"
-    },
-    {
-        "duration": "43.44511122222223",
-        "name": "loading.desktop/FC2Blog_cold"
-    },
-    {
-        "duration": "53.314666555555554",
-        "name": "loading.desktop/FC2Blog_warm"
-    },
-    {
-        "duration": "0.0015001296499999998",
-        "name": "loading.desktop/FDA"
-    },
-    {
-        "duration": "111.08438397979803",
-        "name": "loading.desktop/FIFA"
-    },
-    {
-        "duration": "48.13266655555555",
-        "name": "loading.desktop/FIFA_cold"
-    },
-    {
-        "duration": "59.180888888888894",
-        "name": "loading.desktop/FIFA_warm"
-    },
-    {
-        "duration": "155.39663627272722",
-        "name": "loading.desktop/FarsNews"
-    },
-    {
-        "duration": "79.753889",
-        "name": "loading.desktop/FarsNews_cold"
-    },
-    {
-        "duration": "64.7131108888889",
-        "name": "loading.desktop/FarsNews_warm"
-    },
-    {
-        "duration": "101.7750504545455",
-        "name": "loading.desktop/Flickr"
-    },
-    {
-        "duration": "44.12544444444445",
-        "name": "loading.desktop/Flickr_cold"
-    },
-    {
-        "duration": "54.30866677777778",
-        "name": "loading.desktop/Flickr_warm"
-    },
-    {
-        "duration": "97.64360610101005",
-        "name": "loading.desktop/FlipKart"
-    },
-    {
-        "duration": "41.16466666666666",
-        "name": "loading.desktop/FlipKart_cold"
-    },
-    {
-        "duration": "51.574555555555555",
-        "name": "loading.desktop/FlipKart_warm"
-    },
-    {
-        "duration": "85.32855556565653",
-        "name": "loading.desktop/Free.fr"
-    },
-    {
-        "duration": "36.92433333333334",
-        "name": "loading.desktop/Free.fr_cold"
-    },
-    {
-        "duration": "42.13199999999999",
-        "name": "loading.desktop/Free.fr_warm"
-    },
-    {
-        "duration": "77.21311107070709",
-        "name": "loading.desktop/HTML5Rocks"
-    },
-    {
-        "duration": "35.10366677777777",
-        "name": "loading.desktop/HTML5Rocks_cold"
-    },
-    {
-        "duration": "38.530222333333334",
-        "name": "loading.desktop/HTML5Rocks_warm"
-    },
-    {
-        "duration": "83.18356559595962",
-        "name": "loading.desktop/Haraj"
-    },
-    {
-        "duration": "38.77455566666666",
-        "name": "loading.desktop/Haraj_cold"
-    },
-    {
-        "duration": "43.786555666666665",
-        "name": "loading.desktop/Haraj_warm"
-    },
-    {
-        "duration": "118.91626267676763",
-        "name": "loading.desktop/HatenaBookmark"
-    },
-    {
-        "duration": "48.541888888888884",
-        "name": "loading.desktop/HatenaBookmark_cold"
-    },
-    {
-        "duration": "64.90722211111111",
-        "name": "loading.desktop/HatenaBookmark_warm"
-    },
-    {
-        "duration": "121.03334345454536",
-        "name": "loading.desktop/IGN"
-    },
-    {
-        "duration": "51.31022222222222",
-        "name": "loading.desktop/IGN_cold"
-    },
-    {
-        "duration": "63.95366644444445",
-        "name": "loading.desktop/IGN_warm"
-    },
-    {
-        "duration": "116.33096975757572",
-        "name": "loading.desktop/IMDB"
-    },
-    {
-        "duration": "48.737333444444445",
-        "name": "loading.desktop/IMDB_cold"
-    },
-    {
-        "duration": "64.61688866666667",
-        "name": "loading.desktop/IMDB_warm"
-    },
-    {
-        "duration": "102.57024242424244",
-        "name": "loading.desktop/IndiaTimes"
-    },
-    {
-        "duration": "43.34066688888889",
-        "name": "loading.desktop/IndiaTimes_cold"
-    },
-    {
-        "duration": "55.41855555555556",
-        "name": "loading.desktop/IndiaTimes_warm"
-    },
-    {
-        "duration": "118.77830299999997",
-        "name": "loading.desktop/Kakaku"
-    },
-    {
-        "duration": "50.835",
-        "name": "loading.desktop/Kakaku_cold"
-    },
-    {
-        "duration": "65.04477777777778",
-        "name": "loading.desktop/Kakaku_warm"
-    },
-    {
-        "duration": "196.9060908080808",
-        "name": "loading.desktop/Kenh14"
-    },
-    {
-        "duration": "76.4041111111111",
-        "name": "loading.desktop/Kenh14_cold"
-    },
-    {
-        "duration": "106.40877777777776",
-        "name": "loading.desktop/Kenh14_warm"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "loading.desktop/Leboncoin"
-    },
-    {
-        "duration": "0.00150001045",
-        "name": "loading.desktop/MLB"
-    },
-    {
-        "duration": "111.19094945454545",
-        "name": "loading.desktop/Mercadolivre"
-    },
-    {
-        "duration": "47.936",
-        "name": "loading.desktop/Mercadolivre_cold"
-    },
-    {
-        "duration": "57.980333333333334",
-        "name": "loading.desktop/Mercadolivre_warm"
-    },
-    {
-        "duration": "116.01690909090907",
-        "name": "loading.desktop/NatGeo"
-    },
-    {
-        "duration": "98.64382825252528",
-        "name": "loading.desktop/Naver"
-    },
-    {
-        "duration": "41.81855566666667",
-        "name": "loading.desktop/Naver_cold"
-    },
-    {
-        "duration": "50.160777555555555",
-        "name": "loading.desktop/Naver_warm"
-    },
-    {
-        "duration": "0.0020000934",
-        "name": "loading.desktop/Orange"
-    },
-    {
-        "duration": "101.8609595050505",
-        "name": "loading.desktop/Pantip"
-    },
-    {
-        "duration": "43.649889",
-        "name": "loading.desktop/Pantip_cold"
-    },
-    {
-        "duration": "54.13722222222222",
-        "name": "loading.desktop/Pantip_warm"
-    },
-    {
-        "duration": "123.40419184848493",
-        "name": "loading.desktop/PremierLeague"
-    },
-    {
-        "duration": "61.736111",
-        "name": "loading.desktop/PremierLeague_cold"
-    },
-    {
-        "duration": "68.64855555555556",
-        "name": "loading.desktop/PremierLeague_warm"
-    },
-    {
-        "duration": "121.79510104040399",
-        "name": "loading.desktop/QQ"
-    },
-    {
-        "duration": "52.550333444444455",
-        "name": "loading.desktop/QQ_cold"
-    },
-    {
-        "duration": "65.696",
-        "name": "loading.desktop/QQ_warm"
-    },
-    {
-        "duration": "108.85021210101011",
-        "name": "loading.desktop/REI"
-    },
-    {
-        "duration": "47.14177766666667",
-        "name": "loading.desktop/REI_cold"
-    },
-    {
-        "duration": "59.31699999999999",
-        "name": "loading.desktop/REI_warm"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "loading.desktop/Rambler"
-    },
-    {
-        "duration": "90.25773739393938",
-        "name": "loading.desktop/Ruten"
-    },
-    {
-        "duration": "39.87855555555556",
-        "name": "loading.desktop/Ruten_cold"
-    },
-    {
-        "duration": "47.04155577777778",
-        "name": "loading.desktop/Ruten_warm"
-    },
-    {
-        "duration": "131.78460609090916",
-        "name": "loading.desktop/Sina"
-    },
-    {
-        "duration": "57.16655555555556",
-        "name": "loading.desktop/Sina_cold"
-    },
-    {
-        "duration": "71.91933333333333",
-        "name": "loading.desktop/Sina_warm"
-    },
-    {
-        "duration": "139.97829290909095",
-        "name": "loading.desktop/Taobao"
-    },
-    {
-        "duration": "59.429333555555544",
-        "name": "loading.desktop/Taobao_cold"
-    },
-    {
-        "duration": "76.66511111111112",
-        "name": "loading.desktop/Taobao_warm"
-    },
-    {
-        "duration": "160.2342121313131",
-        "name": "loading.desktop/TheOnion"
-    },
-    {
-        "duration": "66.89288888888888",
-        "name": "loading.desktop/TheOnion_cold"
-    },
-    {
-        "duration": "92.191",
-        "name": "loading.desktop/TheOnion_warm"
-    },
-    {
-        "duration": "135.42048485858584",
-        "name": "loading.desktop/TheVerge"
-    },
-    {
-        "duration": "56.2047778888889",
-        "name": "loading.desktop/TheVerge_cold"
-    },
-    {
-        "duration": "75.6738888888889",
-        "name": "loading.desktop/TheVerge_warm"
-    },
-    {
-        "duration": "142.4076465858586",
-        "name": "loading.desktop/TicketMaster"
-    },
-    {
-        "duration": "61.155444333333335",
-        "name": "loading.desktop/TicketMaster_cold"
-    },
-    {
-        "duration": "80.351222",
-        "name": "loading.desktop/TicketMaster_warm"
-    },
-    {
-        "duration": "266.71652557575766",
-        "name": "loading.desktop/Vietnamnet"
-    },
-    {
-        "duration": "99.65133333333334",
-        "name": "loading.desktop/Vietnamnet_cold"
-    },
-    {
-        "duration": "139.49133333333333",
-        "name": "loading.desktop/Vietnamnet_warm"
-    },
-    {
-        "duration": "155.64173738383838",
-        "name": "loading.desktop/Vnexpress"
-    },
-    {
-        "duration": "64.04422222222223",
-        "name": "loading.desktop/Vnexpress_cold"
-    },
-    {
-        "duration": "88.88466666666666",
-        "name": "loading.desktop/Vnexpress_warm"
-    },
-    {
-        "duration": "158.69804036363632",
-        "name": "loading.desktop/Walgreens"
-    },
-    {
-        "duration": "69.10600011111111",
-        "name": "loading.desktop/Walgreens_cold"
-    },
-    {
-        "duration": "96.37977777777776",
-        "name": "loading.desktop/Walgreens_warm"
-    },
-    {
-        "duration": "80.89380810101011",
-        "name": "loading.desktop/Yandex"
-    },
-    {
-        "duration": "36.91611111111111",
-        "name": "loading.desktop/Yandex_cold"
-    },
-    {
-        "duration": "42.27555544444445",
-        "name": "loading.desktop/Yandex_warm"
-    },
-    {
-        "duration": "123.77974755555557",
-        "name": "loading.desktop/amazon.co.jp"
-    },
-    {
-        "duration": "52.304888777777784",
-        "name": "loading.desktop/amazon.co.jp_cold"
-    },
-    {
-        "duration": "69.581",
-        "name": "loading.desktop/amazon.co.jp_warm"
-    },
-    {
-        "duration": "0.001250028575",
-        "name": "loading.desktop/goo.ne.jp"
-    },
-    {
-        "duration": "93.46309089898985",
-        "name": "loading.desktop/ja.wikipedia"
-    },
-    {
-        "duration": "41.67577788888889",
-        "name": "loading.desktop/ja.wikipedia_cold"
-    },
-    {
-        "duration": "49.72666677777779",
-        "name": "loading.desktop/ja.wikipedia_warm"
-    },
-    {
-        "duration": "151.9114746969696",
-        "name": "loading.desktop/money.cnn"
-    },
-    {
-        "duration": "61.269778",
-        "name": "loading.desktop/money.cnn_cold"
-    },
-    {
-        "duration": "85.45144444444445",
-        "name": "loading.desktop/money.cnn_warm"
-    },
-    {
-        "duration": "89.88158583838386",
-        "name": "loading.desktop/ru.wikipedia"
-    },
-    {
-        "duration": "40.043889",
-        "name": "loading.desktop/ru.wikipedia_cold"
-    },
-    {
-        "duration": "47.09388888888889",
-        "name": "loading.desktop/ru.wikipedia_warm"
-    },
-    {
-        "duration": "167.99965658585865",
-        "name": "loading.desktop/uol.com.br"
-    },
-    {
-        "duration": "64.81466644444443",
-        "name": "loading.desktop/uol.com.br_cold"
-    },
-    {
-        "duration": "95.43600022222222",
-        "name": "loading.desktop/uol.com.br_warm"
-    },
-    {
-        "duration": "107.64852529292926",
-        "name": "loading.desktop/yahoo.co.jp"
-    },
-    {
-        "duration": "47.22400011111112",
-        "name": "loading.desktop/yahoo.co.jp_cold"
-    },
-    {
-        "duration": "56.877666555555564",
-        "name": "loading.desktop/yahoo.co.jp_warm"
-    },
-    {
-        "duration": "28.676171666666658",
-        "name": "media.desktop/mse.html?media=aac_audio.mp4"
-    },
-    {
-        "duration": "29.30343432323233",
-        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
-    },
-    {
-        "duration": "29.39976768686869",
-        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true"
-    },
-    {
-        "duration": "28.49593940404042",
-        "name": "media.desktop/mse.html?media=h264_video.mp4"
-    },
-    {
-        "duration": "39.5865454949495",
-        "name": "media.desktop/video.html?src=crowd.ogg&type=audio"
-    },
-    {
-        "duration": "41.79165656565655",
-        "name": "media.desktop/video.html?src=crowd1080.mp4"
-    },
-    {
-        "duration": "41.07382826262628",
-        "name": "media.desktop/video.html?src=crowd1080.webm"
-    },
-    {
-        "duration": "38.451090909090915",
-        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
-    },
-    {
-        "duration": "25.117535333333326",
-        "name": "media.desktop/video.html?src=crowd1080_vp9.webm&seek"
-    },
-    {
-        "duration": "37.703232323232335",
-        "name": "media.desktop/video.html?src=crowd720_vp9.webm"
-    },
-    {
-        "duration": "44.493646484848476",
-        "name": "media.desktop/video.html?src=garden2_10s.mp4"
-    },
-    {
-        "duration": "29.0549596060606",
-        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
-    },
-    {
-        "duration": "38.88641416161616",
-        "name": "media.desktop/video.html?src=garden2_10s.webm"
-    },
-    {
-        "duration": "26.273242424242436",
-        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
-    },
-    {
-        "duration": "31.02649491919192",
-        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
-    },
-    {
-        "duration": "48.0307070909091",
-        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
-    },
-    {
-        "duration": "48.25161610101011",
-        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
-    },
-    {
-        "duration": "23.071383919191923",
-        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
-    },
-    {
-        "duration": "49.95918179797982",
-        "name": "media.desktop/video.html?src=tulip2.mp4"
-    },
-    {
-        "duration": "54.84316165656569",
-        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
-    },
-    {
-        "duration": "26.205181838383837",
-        "name": "media.desktop/video.html?src=tulip2.mp4&seek"
-    },
-    {
-        "duration": "48.71410103030302",
-        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
-    },
-    {
-        "duration": "23.011545464646456",
-        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
-    },
-    {
-        "duration": "49.84171717171718",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
-    },
-    {
-        "duration": "40.42931313131313",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
-    },
-    {
-        "duration": "28.480020242424228",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm&seek"
-    },
-    {
-        "duration": "53.2817575959596",
-        "name": "media.desktop/video.html?src=tulip2.vp9.webm_Regular-3G"
-    },
-    {
-        "duration": "48.48945452525251",
-        "name": "media.desktop/video.html?src=tulip2.wav&type=audio"
-    },
-    {
-        "duration": "23.34219194949495",
-        "name": "media.desktop/video.html?src=tulip2.wav&type=audio&seek"
-    },
-    {
-        "duration": "159.06532318181817",
-        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
-    },
-    {
-        "duration": "114.5082223030303",
-        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
-    },
-    {
-        "duration": "222.57515149494955",
-        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
-    },
-    {
-        "duration": "148.67307066666663",
-        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
-    },
-    {
-        "duration": "118.46026254545454",
-        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
-    },
-    {
-        "duration": "118.25817169696977",
-        "name": "memory.desktop/TrivialGifPageSharedPageState"
-    },
-    {
-        "duration": "152.4319192525252",
-        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
-    },
-    {
-        "duration": "156.61189895959598",
-        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
-    },
-    {
-        "duration": "166.47384848484847",
-        "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "168.8551415151516",
-        "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "43.78824244444444",
-        "name": "octane/http://chromium.github.io/octane/index.html?auto=1"
-    },
-    {
-        "duration": "93.2880813488372",
-        "name": "power.desktop/TrivialAnimationPageSharedPageState"
-    },
-    {
-        "duration": "69.68927906976745",
-        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
-    },
-    {
-        "duration": "118.8463605116279",
-        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
-    },
-    {
-        "duration": "86.23733720930228",
-        "name": "power.desktop/TrivialCanvasPageSharedPageState"
-    },
-    {
-        "duration": "71.7006395348837",
-        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
-    },
-    {
-        "duration": "69.76922093023255",
-        "name": "power.desktop/TrivialGifPageSharedPageState"
-    },
-    {
-        "duration": "91.1666162790698",
-        "name": "power.desktop/TrivialScrollingPageSharedPageState"
-    },
-    {
-        "duration": "91.31366274418606",
-        "name": "power.desktop/TrivialWebGLPageSharedPageState"
-    },
-    {
-        "duration": "83.76198837209303",
-        "name": "power.desktop/abcnews"
-    },
-    {
-        "duration": "69.25856972093025",
-        "name": "power.desktop/indiatimes"
-    },
-    {
-        "duration": "85.46715120930236",
-        "name": "power.desktop/instagram"
-    },
-    {
-        "duration": "71.34581395348842",
-        "name": "power.desktop/microsoft"
-    },
-    {
-        "duration": "72.91425595348835",
-        "name": "power.desktop/sina"
-    },
-    {
-        "duration": "73.5699651627907",
-        "name": "power.desktop/slideshare"
-    },
-    {
-        "duration": "93.36681399999999",
-        "name": "power.desktop/uol"
-    },
-    {
-        "duration": "6.930767684848485",
-        "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html"
-    },
-    {
-        "duration": "22.989424191919188",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
-    },
-    {
-        "duration": "11.222868707070702",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
-    },
-    {
-        "duration": "11.516161616161613",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
-    },
-    {
-        "duration": "15.308111106060611",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
-    },
-    {
-        "duration": "11.90027273232324",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
-    },
-    {
-        "duration": "22.18951516161616",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
-    },
-    {
-        "duration": "12.532727252525259",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
-    },
-    {
-        "duration": "18.773131303030308",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
-    },
-    {
-        "duration": "16.26942426767676",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
-    },
-    {
-        "duration": "12.714636398989896",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
-    },
-    {
-        "duration": "20.464414141414128",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
-    },
-    {
-        "duration": "17.752313121212126",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
-    },
-    {
-        "duration": "30.85282822222222",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
-    },
-    {
-        "duration": "10.17671716666666",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
-    },
-    {
-        "duration": "14.031343469696969",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
-    },
-    {
-        "duration": "27.771919191919206",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
-    },
-    {
-        "duration": "19.308585858585865",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
-    },
-    {
-        "duration": "14.78189898484848",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
-    },
-    {
-        "duration": "17.790353560606054",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
-    },
-    {
-        "duration": "12.411252535353535",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
-    },
-    {
-        "duration": "27.61456564646463",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
-    },
-    {
-        "duration": "104.59697983838386",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
-    },
-    {
-        "duration": "90.31896965656567",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
-    },
-    {
-        "duration": "27.50078786868686",
-        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "rendering.desktop/amazon"
-    },
-    {
-        "duration": "3.8840000175438587",
-        "name": "rendering.desktop/amazon_pinch"
-    },
-    {
-        "duration": "68.54723234343433",
-        "name": "rendering.desktop/analog_clock_svg"
-    },
-    {
-        "duration": "42.649842105263176",
-        "name": "rendering.desktop/animometer_webgl"
-    },
-    {
-        "duration": "118.55949122807014",
-        "name": "rendering.desktop/aquarium"
-    },
-    {
-        "duration": "62.56791228070176",
-        "name": "rendering.desktop/aquarium_20k"
-    },
-    {
-        "duration": "65.04972564705882",
-        "name": "rendering.desktop/background_color_animation"
-    },
-    {
-        "duration": "80.82550980392156",
-        "name": "rendering.desktop/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "34.05992203896105",
-        "name": "rendering.desktop/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "35.146662311688296",
-        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
-    },
-    {
-        "duration": "42.52419485714285",
-        "name": "rendering.desktop/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "42.65307792207793",
-        "name": "rendering.desktop/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "42.48933766233766",
-        "name": "rendering.desktop/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "41.856038909090906",
-        "name": "rendering.desktop/balls_javascript_canvas"
-    },
-    {
-        "duration": "33.840038987012996",
-        "name": "rendering.desktop/balls_javascript_css"
-    },
-    {
-        "duration": "41.84879223376624",
-        "name": "rendering.desktop/balls_svg_animations"
-    },
-    {
-        "duration": "44.625210526315776",
-        "name": "rendering.desktop/blob"
-    },
-    {
-        "duration": "36.13822223232323",
-        "name": "rendering.desktop/blogspot"
-    },
-    {
-        "duration": "3.4160877385964925",
-        "name": "rendering.desktop/blogspot_pinch"
-    },
-    {
-        "duration": "22.165656555555557",
-        "name": "rendering.desktop/booking.com"
-    },
-    {
-        "duration": "3.455736849122806",
-        "name": "rendering.desktop/booking_pinch"
-    },
-    {
-        "duration": "32.681816091954026",
-        "name": "rendering.desktop/bouncing_balls_15"
-    },
-    {
-        "duration": "25.432413781609192",
-        "name": "rendering.desktop/bouncing_balls_shadow"
-    },
-    {
-        "duration": "27.585344850574707",
-        "name": "rendering.desktop/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "33.21421840229883",
-        "name": "rendering.desktop/bouncing_gradient_circles"
-    },
-    {
-        "duration": "16.759816040229886",
-        "name": "rendering.desktop/bouncing_png_images"
-    },
-    {
-        "duration": "36.45083910344828",
-        "name": "rendering.desktop/bouncing_svg_images"
-    },
-    {
-        "duration": "37.68852723636364",
-        "name": "rendering.desktop/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "36.902727272727276",
-        "name": "rendering.desktop/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "31.977854600000004",
-        "name": "rendering.desktop/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "29.60580003636364",
-        "name": "rendering.desktop/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "27.56656361818181",
-        "name": "rendering.desktop/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "26.547527272727276",
-        "name": "rendering.desktop/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "26.2450908909091",
-        "name": "rendering.desktop/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "25.5033272",
-        "name": "rendering.desktop/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "24.888163654545444",
-        "name": "rendering.desktop/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "24.554363618181817",
-        "name": "rendering.desktop/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "53.39479308045975",
-        "name": "rendering.desktop/canvas_animation_no_clear"
-    },
-    {
-        "duration": "27.38512645977012",
-        "name": "rendering.desktop/canvas_arcs"
-    },
-    {
-        "duration": "25.8954598045977",
-        "name": "rendering.desktop/canvas_font_cycler"
-    },
-    {
-        "duration": "30.321931045977006",
-        "name": "rendering.desktop/canvas_lines"
-    },
-    {
-        "duration": "32.922770114942516",
-        "name": "rendering.desktop/canvas_to_blob"
-    },
-    {
-        "duration": "17.604363654545452",
-        "name": "rendering.desktop/cats_unscaled"
-    },
-    {
-        "duration": "15.823963618181816",
-        "name": "rendering.desktop/cats_viewport_width"
-    },
-    {
-        "duration": "39.78305752873561",
-        "name": "rendering.desktop/chip_tune"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "rendering.desktop/cnn"
-    },
-    {
-        "duration": "3.398631578947369",
-        "name": "rendering.desktop/cnn_pinch"
-    },
-    {
-        "duration": "59.68979218181818",
-        "name": "rendering.desktop/compositor_heavy_animation"
-    },
-    {
-        "duration": "44.02577009195403",
-        "name": "rendering.desktop/crafty_mind"
-    },
-    {
-        "duration": "30.301051935064944",
-        "name": "rendering.desktop/css_animations_many_keyframes"
-    },
-    {
-        "duration": "32.81038957142858",
-        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "34.54855842857141",
-        "name": "rendering.desktop/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "32.83219481818181",
-        "name": "rendering.desktop/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "32.88518180519481",
-        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "30.733194844155847",
-        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "39.71909090909091",
-        "name": "rendering.desktop/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "73.65292205194807",
-        "name": "rendering.desktop/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "40.90548051948054",
-        "name": "rendering.desktop/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "40.084805220779224",
-        "name": "rendering.desktop/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "43.65384418181818",
-        "name": "rendering.desktop/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "132.40348051948052",
-        "name": "rendering.desktop/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "46.803402597402595",
-        "name": "rendering.desktop/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "43.99832468831169",
-        "name": "rendering.desktop/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "34.04992212987013",
-        "name": "rendering.desktop/css_transitions_inline_style"
-    },
-    {
-        "duration": "35.414545454545475",
-        "name": "rendering.desktop/css_transitions_new_element"
-    },
-    {
-        "duration": "34.57106492207792",
-        "name": "rendering.desktop/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "38.321857142857134",
-        "name": "rendering.desktop/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "35.200714311688316",
-        "name": "rendering.desktop/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "34.616753259740264",
-        "name": "rendering.desktop/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "33.90392210389611",
-        "name": "rendering.desktop/css_transitions_style_element"
-    },
-    {
-        "duration": "47.334441610389604",
-        "name": "rendering.desktop/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "47.227909090909094",
-        "name": "rendering.desktop/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "47.79022083116883",
-        "name": "rendering.desktop/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "47.38175324675324",
-        "name": "rendering.desktop/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "33.80661035064936",
-        "name": "rendering.desktop/css_transitions_updating_class"
-    },
-    {
-        "duration": "33.647545493506506",
-        "name": "rendering.desktop/css_value_type_color"
-    },
-    {
-        "duration": "72.8213505714286",
-        "name": "rendering.desktop/css_value_type_filter"
-    },
-    {
-        "duration": "37.115103870129865",
-        "name": "rendering.desktop/css_value_type_length"
-    },
-    {
-        "duration": "52.47089615584415",
-        "name": "rendering.desktop/css_value_type_length_complex"
-    },
-    {
-        "duration": "50.59872727272725",
-        "name": "rendering.desktop/css_value_type_length_simple"
-    },
-    {
-        "duration": "42.90481820779222",
-        "name": "rendering.desktop/css_value_type_path"
-    },
-    {
-        "duration": "36.92132468831171",
-        "name": "rendering.desktop/css_value_type_shadow"
-    },
-    {
-        "duration": "37.76916887012989",
-        "name": "rendering.desktop/css_value_type_transform_complex"
-    },
-    {
-        "duration": "36.85585712987013",
-        "name": "rendering.desktop/css_value_type_transform_simple"
-    },
-    {
-        "duration": "75.77731578947369",
-        "name": "rendering.desktop/dynamic_cube_map"
-    },
-    {
-        "duration": "36.92531575438597",
-        "name": "rendering.desktop/earth"
-    },
-    {
-        "duration": "20.16788889898991",
-        "name": "rendering.desktop/ebay"
-    },
-    {
-        "duration": "3.5106842017543873",
-        "name": "rendering.desktop/ebay_pinch"
-    },
-    {
-        "duration": "35.41202299999999",
-        "name": "rendering.desktop/effect_games"
-    },
-    {
-        "duration": "23.55615153535354",
-        "name": "rendering.desktop/espn"
-    },
-    {
-        "duration": "0.9117719157894737",
-        "name": "rendering.desktop/espn_pinch"
-    },
-    {
-        "duration": "35.61288223529412",
-        "name": "rendering.desktop/extra_large_texture_uploads"
-    },
-    {
-        "duration": "19.250474762626258",
-        "name": "rendering.desktop/facebook"
-    },
-    {
-        "duration": "3.39640351754386",
-        "name": "rendering.desktop/facebook_pinch"
-    },
-    {
-        "duration": "28.49466668965517",
-        "name": "rendering.desktop/fill_shapes"
-    },
-    {
-        "duration": "51.87660002105261",
-        "name": "rendering.desktop/filter_terrain_svg"
-    },
-    {
-        "duration": "20.608298862068967",
-        "name": "rendering.desktop/geo_apis"
-    },
-    {
-        "duration": "36.36382046153845",
-        "name": "rendering.desktop/gmail"
-    },
-    {
-        "duration": "3.3959824684210527",
-        "name": "rendering.desktop/gmail_pinch"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "rendering.desktop/google_calendar"
-    },
-    {
-        "duration": "0.9008771866666665",
-        "name": "rendering.desktop/google_calendar_pinch"
-    },
-    {
-        "duration": "0.8985789508771932",
-        "name": "rendering.desktop/google_image_pinch"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "rendering.desktop/google_image_search"
-    },
-    {
-        "duration": "3.3670526385964914",
-        "name": "rendering.desktop/google_search_pinch"
-    },
-    {
-        "duration": "18.706090868686868",
-        "name": "rendering.desktop/google_web_search"
-    },
-    {
-        "duration": "54.89359548314604",
-        "name": "rendering.desktop/guimark_vector_chart"
-    },
-    {
-        "duration": "27.867356298850584",
-        "name": "rendering.desktop/hakim"
-    },
-    {
-        "duration": "49.070112337078655",
-        "name": "rendering.desktop/ie_chalkboard"
-    },
-    {
-        "duration": "45.15392627368421",
-        "name": "rendering.desktop/ie_pirate_mark"
-    },
-    {
-        "duration": "63.75302301149425",
-        "name": "rendering.desktop/jarro_doverson"
-    },
-    {
-        "duration": "27.06054020689655",
-        "name": "rendering.desktop/kevs_3d"
-    },
-    {
-        "duration": "33.46058441558442",
-        "name": "rendering.desktop/keyframed_animations"
-    },
-    {
-        "duration": "50.31170584313725",
-        "name": "rendering.desktop/large_texture_uploads"
-    },
-    {
-        "duration": "21.40312118181817",
-        "name": "rendering.desktop/linkedin"
-    },
-    {
-        "duration": "3.3878596526315783",
-        "name": "rendering.desktop/linkedin_pinch"
-    },
-    {
-        "duration": "43.139896597701146",
-        "name": "rendering.desktop/man_in_blue"
-    },
-    {
-        "duration": "37.710862057471275",
-        "name": "rendering.desktop/many_images"
-    },
-    {
-        "duration": "49.480912280701766",
-        "name": "rendering.desktop/many_planets_deep"
-    },
-    {
-        "duration": "24.171798010101003",
-        "name": "rendering.desktop/maps_move"
-    },
-    {
-        "duration": "32.766245596491224",
-        "name": "rendering.desktop/maps_perf_test"
-    },
-    {
-        "duration": "39.50062741176471",
-        "name": "rendering.desktop/medium_texture_uploads"
-    },
-    {
-        "duration": "23.789793080459763",
-        "name": "rendering.desktop/megi_dish"
-    },
-    {
-        "duration": "35.78790804597701",
-        "name": "rendering.desktop/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "68.26728735632184",
-        "name": "rendering.desktop/microsoft_fireflies"
-    },
-    {
-        "duration": "37.48194255172414",
-        "name": "rendering.desktop/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "62.95422988505745",
-        "name": "rendering.desktop/microsoft_snow"
-    },
-    {
-        "duration": "21.837954080459767",
-        "name": "rendering.desktop/microsoft_speed_reading"
-    },
-    {
-        "duration": "27.232643678160922",
-        "name": "rendering.desktop/microsoft_tweet_map"
-    },
-    {
-        "duration": "62.536022965517255",
-        "name": "rendering.desktop/microsoft_video_city"
-    },
-    {
-        "duration": "32.924160931034486",
-        "name": "rendering.desktop/microsoft_worker_fountains"
-    },
-    {
-        "duration": "21.976770126436783",
-        "name": "rendering.desktop/mix_10k"
-    },
-    {
-        "duration": "30.51412987012987",
-        "name": "rendering.desktop/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "30.615155831168828",
-        "name": "rendering.desktop/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "43.37629867532468",
-        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "33.55527268831168",
-        "name": "rendering.desktop/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "31.303146033707876",
-        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "33.45737076404497",
-        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "35.32269477894739",
-        "name": "rendering.desktop/motion_mark_focus"
-    },
-    {
-        "duration": "50.3807192631579",
-        "name": "rendering.desktop/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "63.088116805194765",
-        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "55.646578982456155",
-        "name": "rendering.desktop/particles"
-    },
-    {
-        "duration": "28.78543428282828",
-        "name": "rendering.desktop/pinterest"
-    },
-    {
-        "duration": "28.00796551724139",
-        "name": "rendering.desktop/put_get_image_data"
-    },
-    {
-        "duration": "38.986725529411764",
-        "name": "rendering.desktop/raf"
-    },
-    {
-        "duration": "39.02239215686276",
-        "name": "rendering.desktop/raf_animation"
-    },
-    {
-        "duration": "37.360176470588236",
-        "name": "rendering.desktop/raf_canvas"
-    },
-    {
-        "duration": "28.52194117647059",
-        "name": "rendering.desktop/raf_touch_animation"
-    },
-    {
-        "duration": "22.564643620689658",
-        "name": "rendering.desktop/runway"
-    },
-    {
-        "duration": "82.02701754385963",
-        "name": "rendering.desktop/san_angeles"
-    },
-    {
-        "duration": "19.457137274509805",
-        "name": "rendering.desktop/second_batch_js_heavy"
-    },
-    {
-        "duration": "18.977627490196074",
-        "name": "rendering.desktop/second_batch_js_light"
-    },
-    {
-        "duration": "18.990196019607836",
-        "name": "rendering.desktop/second_batch_js_medium"
-    },
-    {
-        "duration": "23.640098058823533",
-        "name": "rendering.desktop/simple_text_page"
-    },
-    {
-        "duration": "18.300843156862747",
-        "name": "rendering.desktop/simple_touch_drag"
-    },
-    {
-        "duration": "32.75727450980392",
-        "name": "rendering.desktop/small_texture_uploads"
-    },
-    {
-        "duration": "42.85482754022989",
-        "name": "rendering.desktop/smash_cat"
-    },
-    {
-        "duration": "24.672793126436776",
-        "name": "rendering.desktop/spielzeugz"
-    },
-    {
-        "duration": "30.928023000000014",
-        "name": "rendering.desktop/stroke_shapes"
-    },
-    {
-        "duration": "22.939117666666668",
-        "name": "rendering.desktop/sync_scroll_offset"
-    },
-    {
-        "duration": "56.13776771717171",
-        "name": "rendering.desktop/techcrunch"
-    },
-    {
-        "duration": "24.469327272727266",
-        "name": "rendering.desktop/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "24.020854563636366",
-        "name": "rendering.desktop/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "20.65054545454545",
-        "name": "rendering.desktop/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.14403636363636",
-        "name": "rendering.desktop/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "17.57619998181818",
-        "name": "rendering.desktop/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "16.626163690909095",
-        "name": "rendering.desktop/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.926054445454549",
-        "name": "rendering.desktop/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.41870911818182",
-        "name": "rendering.desktop/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "15.051945481818183",
-        "name": "rendering.desktop/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "14.655545436363637",
-        "name": "rendering.desktop/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "48.05150909090909",
-        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "44.819799999999994",
-        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "41.31076363636364",
-        "name": "rendering.desktop/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "38.637363636363624",
-        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "35.55101814545455",
-        "name": "rendering.desktop/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "34.101054600000005",
-        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "33.53670907272727",
-        "name": "rendering.desktop/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "32.42318181818183",
-        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "31.890309109090907",
-        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "31.61012721818182",
-        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "24.225527236363636",
-        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "23.847272690909094",
-        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "20.492872745454548",
-        "name": "rendering.desktop/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "18.67307272727272",
-        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "17.13859994545454",
-        "name": "rendering.desktop/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "16.357090945454548",
-        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "15.755236400000005",
-        "name": "rendering.desktop/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "15.352163690909087",
-        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "14.989800018181821",
-        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "14.668290936363643",
-        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "24.310725490196074",
-        "name": "rendering.desktop/touch_handler_scrolling"
-    },
-    {
-        "duration": "37.20437664935066",
-        "name": "rendering.desktop/transform_transitions"
-    },
-    {
-        "duration": "25.891389597402593",
-        "name": "rendering.desktop/transform_transitions_js_block"
-    },
-    {
-        "duration": "20.64077776767676",
-        "name": "rendering.desktop/twitter"
-    },
-    {
-        "duration": "3.3783684280701753",
-        "name": "rendering.desktop/twitter_pinch"
-    },
-    {
-        "duration": "28.174464626262633",
-        "name": "rendering.desktop/weather.com"
-    },
-    {
-        "duration": "3.3067368298245614",
-        "name": "rendering.desktop/weather_pinch"
-    },
-    {
-        "duration": "33.58861033766233",
-        "name": "rendering.desktop/web_animation_value_type_color"
-    },
-    {
-        "duration": "36.914571480519484",
-        "name": "rendering.desktop/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "51.65994802597403",
-        "name": "rendering.desktop/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "52.54902597402598",
-        "name": "rendering.desktop/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "43.3534156103896",
-        "name": "rendering.desktop/web_animation_value_type_path"
-    },
-    {
-        "duration": "36.80436366233764",
-        "name": "rendering.desktop/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "37.93105192207791",
-        "name": "rendering.desktop/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "36.55677922077922",
-        "name": "rendering.desktop/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "30.999363623376624",
-        "name": "rendering.desktop/web_animations_many_keyframes"
-    },
-    {
-        "duration": "35.402675272727265",
-        "name": "rendering.desktop/web_animations_set_current_time"
-    },
-    {
-        "duration": "34.86444157142857",
-        "name": "rendering.desktop/web_animations_simultaneous"
-    },
-    {
-        "duration": "39.442857155844145",
-        "name": "rendering.desktop/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "31.01603892207793",
-        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "44.23270127272727",
-        "name": "rendering.desktop/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "26.54909088888889",
-        "name": "rendering.desktop/wikipedia"
-    },
-    {
-        "duration": "31.293232303030322",
-        "name": "rendering.desktop/wordpress"
-    },
-    {
-        "duration": "20.350333343434354",
-        "name": "rendering.desktop/yahoo_answers"
-    },
-    {
-        "duration": "34.34766658585858",
-        "name": "rendering.desktop/yahoo_games"
-    },
-    {
-        "duration": "3.416350854385966",
-        "name": "rendering.desktop/yahoo_games_pinch"
-    },
-    {
-        "duration": "25.521515161616158",
-        "name": "rendering.desktop/yahoo_news"
-    },
-    {
-        "duration": "3.3934210614035085",
-        "name": "rendering.desktop/yahoo_news_pinch"
-    },
-    {
-        "duration": "29.86825255555556",
-        "name": "rendering.desktop/yahoo_sports"
-    },
-    {
-        "duration": "3.4236140140350866",
-        "name": "rendering.desktop/yahoo_sports_pinch"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "rendering.desktop/youtube"
-    },
-    {
-        "duration": "0.9037543747368418",
-        "name": "rendering.desktop/youtube_pinch"
-    },
-    {
-        "duration": "61.13627450980392",
-        "name": "rendering.desktop/yuv_decoding"
-    },
-    {
-        "duration": "24.472397058823532",
-        "name": "scheduler.tough_scheduling_cases/raf"
-    },
-    {
-        "duration": "24.587989909090915",
-        "name": "scheduler.tough_scheduling_cases/raf.html"
-    },
-    {
-        "duration": "24.653264705882354",
-        "name": "scheduler.tough_scheduling_cases/raf_animation"
-    },
-    {
-        "duration": "25.029040414141413",
-        "name": "scheduler.tough_scheduling_cases/raf_animation.html"
-    },
-    {
-        "duration": "23.800161749999994",
-        "name": "scheduler.tough_scheduling_cases/raf_canvas"
-    },
-    {
-        "duration": "23.790090919191933",
-        "name": "scheduler.tough_scheduling_cases/raf_canvas.html"
-    },
-    {
-        "duration": "19.00205879411764",
-        "name": "scheduler.tough_scheduling_cases/raf_touch_animation"
-    },
-    {
-        "duration": "18.992010101010106",
-        "name": "scheduler.tough_scheduling_cases/raf_touch_animation.html"
-    },
-    {
-        "duration": "13.877505020202019",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js.html?heavy"
-    },
-    {
-        "duration": "13.767757611111115",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js.html?light"
-    },
-    {
-        "duration": "13.831444484848493",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js.html?medium"
-    },
-    {
-        "duration": "13.668750000000003",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy"
-    },
-    {
-        "duration": "13.620823544117647",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_light"
-    },
-    {
-        "duration": "13.611603000000006",
-        "name": "scheduler.tough_scheduling_cases/second_batch_js_medium"
-    },
-    {
-        "duration": "18.567088205882353",
-        "name": "scheduler.tough_scheduling_cases/simple_text_page"
-    },
-    {
-        "duration": "18.56379798989899",
-        "name": "scheduler.tough_scheduling_cases/simple_text_page.html"
-    },
-    {
-        "duration": "13.097647058823526",
-        "name": "scheduler.tough_scheduling_cases/simple_touch_drag"
-    },
-    {
-        "duration": "13.02359597979798",
-        "name": "scheduler.tough_scheduling_cases/simple_touch_drag.html"
-    },
-    {
-        "duration": "16.31858823529412",
-        "name": "scheduler.tough_scheduling_cases/sync_scroll_offset"
-    },
-    {
-        "duration": "16.27633333333333",
-        "name": "scheduler.tough_scheduling_cases/sync_scroll_offset.html"
-    },
-    {
-        "duration": "17.294661764705875",
-        "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling"
-    },
-    {
-        "duration": "17.393828282828277",
-        "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling.html"
-    },
-    {
-        "duration": "47.02026266666667",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG"
-    },
-    {
-        "duration": "42.034212060606045",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG"
-    },
-    {
-        "duration": "31.27655554545453",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark"
-    },
-    {
-        "duration": "28.159606080808068",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus"
-    },
-    {
-        "duration": "44.73479797979797",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "39.503080868686844",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "30.80473735353534",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "28.020828282828276",
-        "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "33.978393969696974",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test"
-    },
-    {
-        "duration": "39.52761616161616",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard"
-    },
-    {
-        "duration": "24.75570706060605",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes"
-    },
-    {
-        "duration": "24.97450503030303",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes"
-    },
-    {
-        "duration": "34.286919191919196",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "39.316464666666675",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "24.777323232323226",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "24.911111111111115",
-        "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "24.139727272727274",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "23.62604040404041",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "21.3340202121212",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "20.102909080808082",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "19.024292898989906",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "18.731393969696967",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "18.391777808080803",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "18.332424202020206",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "18.088616141414143",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "18.1928282979798",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "19.174616151515163",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "17.00151519191919",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "14.697949449494956",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "13.584222202020205",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "12.549333282828286",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "11.975454515151519",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "11.640474792929282",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "11.287969681818181",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "11.022626272727267",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "10.93273738383838",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "29.62589899999998",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "28.837373727272723",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "26.76528285858585",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "25.5051312929293",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "24.331373737373738",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "23.788848515151518",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "23.392353545454537",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "23.054737363636377",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "22.75467677777777",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "22.821303070707074",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "17.233848505050513",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "16.699090929292936",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "14.557090853535353",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "13.479000055555554",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "12.406818191919191",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "11.865222282828283",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "11.51534342929293",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "11.315838434343434",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "11.075717176767675",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "10.971787873737373",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "39.500106060606065",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "39.77294943434344",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding.html"
-    },
-    {
-        "duration": "39.466681878787874",
-        "name": "smoothness.image_decoding_cases/yuv_decoding"
-    },
-    {
-        "duration": "39.76793935353535",
-        "name": "smoothness.image_decoding_cases/yuv_decoding.html"
-    },
-    {
-        "duration": "20.30612122222222",
-        "name": "smoothness.key_desktop_move_cases/Maps"
-    },
-    {
-        "duration": "0.0149998665",
-        "name": "smoothness.key_desktop_move_cases/https://mail.google.com/mail/"
-    },
-    {
-        "duration": "20.324313121212114",
-        "name": "smoothness.key_desktop_move_cases/maps_move"
-    },
-    {
-        "duration": "22.772646454545463",
-        "name": "smoothness.maps/maps_perf_test"
-    },
-    {
-        "duration": "0.0012000083799999998",
-        "name": "smoothness.top_25_smooth/amazon"
-    },
-    {
-        "duration": "20.05152525252525",
-        "name": "smoothness.top_25_smooth/blogspot"
-    },
-    {
-        "duration": "16.092979803030303",
-        "name": "smoothness.top_25_smooth/booking.com"
-    },
-    {
-        "duration": "0.0011428083428571428",
-        "name": "smoothness.top_25_smooth/cnn"
-    },
-    {
-        "duration": "14.427555540404034",
-        "name": "smoothness.top_25_smooth/ebay"
-    },
-    {
-        "duration": "18.237343424242418",
-        "name": "smoothness.top_25_smooth/espn"
-    },
-    {
-        "duration": "14.905333373737376",
-        "name": "smoothness.top_25_smooth/facebook"
-    },
-    {
-        "duration": "28.360777777777788",
-        "name": "smoothness.top_25_smooth/gmail"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "smoothness.top_25_smooth/google_calendar"
-    },
-    {
-        "duration": "0.00100002286",
-        "name": "smoothness.top_25_smooth/google_docs"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "smoothness.top_25_smooth/google_image_search"
-    },
-    {
-        "duration": "0.0010000467",
-        "name": "smoothness.top_25_smooth/google_plus"
-    },
-    {
-        "duration": "12.926575747474748",
-        "name": "smoothness.top_25_smooth/google_web_search"
-    },
-    {
-        "duration": "17.966161626262622",
-        "name": "smoothness.top_25_smooth/linkedin"
-    },
-    {
-        "duration": "19.162686888888892",
-        "name": "smoothness.top_25_smooth/pinterest"
-    },
-    {
-        "duration": "27.67851513131313",
-        "name": "smoothness.top_25_smooth/techcrunch"
-    },
-    {
-        "duration": "19.353363585858585",
-        "name": "smoothness.top_25_smooth/twitter"
-    },
-    {
-        "duration": "16.58728282323232",
-        "name": "smoothness.top_25_smooth/weather.com"
-    },
-    {
-        "duration": "20.59770707070707",
-        "name": "smoothness.top_25_smooth/wikipedia"
-    },
-    {
-        "duration": "20.386676757575753",
-        "name": "smoothness.top_25_smooth/wordpress"
-    },
-    {
-        "duration": "14.997666681818185",
-        "name": "smoothness.top_25_smooth/yahoo_answers"
-    },
-    {
-        "duration": "22.070838383838375",
-        "name": "smoothness.top_25_smooth/yahoo_games"
-    },
-    {
-        "duration": "16.81006064646465",
-        "name": "smoothness.top_25_smooth/yahoo_news"
-    },
-    {
-        "duration": "18.20494953535354",
-        "name": "smoothness.top_25_smooth/yahoo_sports"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "smoothness.top_25_smooth/youtube"
-    },
-    {
-        "duration": "23.158929303030295",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html"
-    },
-    {
-        "duration": "22.450494949494946",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html"
-    },
-    {
-        "duration": "22.40739396969698",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html"
-    },
-    {
-        "duration": "22.408111131313134",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html"
-    },
-    {
-        "duration": "22.511616181818184",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html"
-    },
-    {
-        "duration": "22.549121202020203",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html"
-    },
-    {
-        "duration": "22.578878797979797",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html"
-    },
-    {
-        "duration": "22.453515131313125",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html"
-    },
-    {
-        "duration": "22.578303040404037",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html"
-    },
-    {
-        "duration": "22.494929292929292",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html"
-    },
-    {
-        "duration": "22.498383828282837",
-        "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html"
-    },
-    {
-        "duration": "25.73932224444445",
-        "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations"
-    },
-    {
-        "duration": "28.15726669999999",
-        "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations_composited_transform"
-    },
-    {
-        "duration": "26.216313171717168",
-        "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html"
-    },
-    {
-        "duration": "28.058858616161615",
-        "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations_composited_transform.html"
-    },
-    {
-        "duration": "28.971766666666664",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties"
-    },
-    {
-        "duration": "28.493090909090903",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html"
-    },
-    {
-        "duration": "29.032222255555553",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties"
-    },
-    {
-        "duration": "28.42368688888889",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html"
-    },
-    {
-        "duration": "29.082533366666667",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties"
-    },
-    {
-        "duration": "28.276383838383854",
-        "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html"
-    },
-    {
-        "duration": "26.363455555555564",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas"
-    },
-    {
-        "duration": "26.658929262626266",
-        "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html"
-    },
-    {
-        "duration": "25.404066655555535",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css"
-    },
-    {
-        "duration": "25.210535353535352",
-        "name": "smoothness.tough_animation_cases/balls_javascript_css.html"
-    },
-    {
-        "duration": "26.175404460674155",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations"
-    },
-    {
-        "duration": "26.16122222222223",
-        "name": "smoothness.tough_animation_cases/balls_svg_animations.html"
-    },
-    {
-        "duration": "37.657",
-        "name": "smoothness.tough_animation_cases/compositor_heavy_animation"
-    },
-    {
-        "duration": "37.88841414141415",
-        "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200"
-    },
-    {
-        "duration": "23.0479445",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes"
-    },
-    {
-        "duration": "22.96879797979798",
-        "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "25.378585878787884",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "24.492838323232323",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "24.517060575757572",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "24.457141404040403",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "24.72644441111111",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style"
-    },
-    {
-        "duration": "25.410333355555558",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element"
-    },
-    {
-        "duration": "24.536533333333335",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element"
-    },
-    {
-        "duration": "24.652555588888884",
-        "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class"
-    },
-    {
-        "duration": "47.922101010100995",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "29.002404040404038",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "27.84863639393938",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "27.87689895959596",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "23.674900033333344",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "23.501404060606056",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "28.277011111111108",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style"
-    },
-    {
-        "duration": "47.74937782222222",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element"
-    },
-    {
-        "duration": "29.078388899999993",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element"
-    },
-    {
-        "duration": "76.98759595959596",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "31.483585878787878",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "29.53540409090909",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "29.66405052525253",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "28.142399988888883",
-        "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class"
-    },
-    {
-        "duration": "29.825133277777788",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style"
-    },
-    {
-        "duration": "76.0434888888889",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element"
-    },
-    {
-        "duration": "31.666288888888896",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element"
-    },
-    {
-        "duration": "29.975388855555547",
-        "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class"
-    },
-    {
-        "duration": "24.97868886666667",
-        "name": "smoothness.tough_animation_cases/css_transitions_inline_style"
-    },
-    {
-        "duration": "25.82675555555555",
-        "name": "smoothness.tough_animation_cases/css_transitions_new_element"
-    },
-    {
-        "duration": "25.490484838383832",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "24.612858606060605",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "24.756606050505052",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "24.72490907070706",
-        "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "27.048414151515143",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "25.29727273737374",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "25.068858575757567",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "25.256878808080824",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "25.160733344444452",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style"
-    },
-    {
-        "duration": "27.250344455555563",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element"
-    },
-    {
-        "duration": "25.57218894444443",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element"
-    },
-    {
-        "duration": "31.973505030303027",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316"
-    },
-    {
-        "duration": "31.674595919191912",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316"
-    },
-    {
-        "duration": "31.71178787878788",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316"
-    },
-    {
-        "duration": "31.539989848484858",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316"
-    },
-    {
-        "duration": "25.286044433333345",
-        "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class"
-    },
-    {
-        "duration": "25.0464444",
-        "name": "smoothness.tough_animation_cases/css_transitions_style_element"
-    },
-    {
-        "duration": "32.122811066666664",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style"
-    },
-    {
-        "duration": "31.892999988888867",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element"
-    },
-    {
-        "duration": "32.023111077777784",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element"
-    },
-    {
-        "duration": "32.00412223333333",
-        "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class"
-    },
-    {
-        "duration": "24.952022244444436",
-        "name": "smoothness.tough_animation_cases/css_transitions_updating_class"
-    },
-    {
-        "duration": "23.99021108888889",
-        "name": "smoothness.tough_animation_cases/css_value_type_color"
-    },
-    {
-        "duration": "23.954242373737383",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "23.85488888888889",
-        "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "28.84884442222222",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter"
-    },
-    {
-        "duration": "28.632505060606057",
-        "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "26.60374445555555",
-        "name": "smoothness.tough_animation_cases/css_value_type_length"
-    },
-    {
-        "duration": "26.11250505050505",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "25.79740403030304",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "32.59159998888888",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex"
-    },
-    {
-        "duration": "32.131434333333324",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "32.30044442424243",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "32.30755556666668",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple"
-    },
-    {
-        "duration": "31.70120196969697",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "31.993646474747464",
-        "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "28.354466699999996",
-        "name": "smoothness.tough_animation_cases/css_value_type_path"
-    },
-    {
-        "duration": "28.070848474747464",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "27.88928281818181",
-        "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "27.358322255555553",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow"
-    },
-    {
-        "duration": "27.585727252525256",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "27.61830303030304",
-        "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "27.007700000000007",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex"
-    },
-    {
-        "duration": "26.674353545454554",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "26.416737363636365",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "26.02300003333332",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple"
-    },
-    {
-        "duration": "25.750767717171716",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316"
-    },
-    {
-        "duration": "25.689393979797984",
-        "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316"
-    },
-    {
-        "duration": "25.82474446666667",
-        "name": "smoothness.tough_animation_cases/keyframed_animations"
-    },
-    {
-        "duration": "25.65085858585859",
-        "name": "smoothness.tough_animation_cases/keyframed_animations.html"
-    },
-    {
-        "duration": "24.755555566666665",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference"
-    },
-    {
-        "duration": "24.84221209090909",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html"
-    },
-    {
-        "duration": "24.825922233333337",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue"
-    },
-    {
-        "duration": "24.710787848484856",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html"
-    },
-    {
-        "duration": "29.081311122222225",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation"
-    },
-    {
-        "duration": "25.546233333333323",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen"
-    },
-    {
-        "duration": "25.437606070707073",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html"
-    },
-    {
-        "duration": "28.720858606060602",
-        "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html"
-    },
-    {
-        "duration": "42.37612121212121",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html"
-    },
-    {
-        "duration": "41.99721108888889",
-        "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "smoothness.tough_animation_cases/robohornetpro"
-    },
-    {
-        "duration": "20.42112119191919",
-        "name": "smoothness.tough_animation_cases/transform_transition_js_block.html"
-    },
-    {
-        "duration": "22.815700011111115",
-        "name": "smoothness.tough_animation_cases/transform_transitions"
-    },
-    {
-        "duration": "22.807363606060612",
-        "name": "smoothness.tough_animation_cases/transform_transitions.html"
-    },
-    {
-        "duration": "20.463233322222234",
-        "name": "smoothness.tough_animation_cases/transform_transitions_js_block"
-    },
-    {
-        "duration": "23.801011088888895",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_color"
-    },
-    {
-        "duration": "26.0178222",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d"
-    },
-    {
-        "duration": "32.64989996666667",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex"
-    },
-    {
-        "duration": "32.36229998888888",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple"
-    },
-    {
-        "duration": "28.17882223333332",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_path"
-    },
-    {
-        "duration": "27.223555522222235",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow"
-    },
-    {
-        "duration": "26.615911099999998",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex"
-    },
-    {
-        "duration": "25.584433333333344",
-        "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple"
-    },
-    {
-        "duration": "23.764333388888883",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes"
-    },
-    {
-        "duration": "23.74433335353534",
-        "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316"
-    },
-    {
-        "duration": "25.306444444444445",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time"
-    },
-    {
-        "duration": "25.3824343030303",
-        "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316"
-    },
-    {
-        "duration": "25.148900011111117",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous"
-    },
-    {
-        "duration": "25.115202030303045",
-        "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316"
-    },
-    {
-        "duration": "27.85571108888888",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining"
-    },
-    {
-        "duration": "27.742585848484854",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316"
-    },
-    {
-        "duration": "23.62762223333333",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations"
-    },
-    {
-        "duration": "23.472000010101013",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316"
-    },
-    {
-        "duration": "29.08647473737373",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316"
-    },
-    {
-        "duration": "29.538400088888906",
-        "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page"
-    },
-    {
-        "duration": "26.028383797979807",
-        "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html"
-    },
-    {
-        "duration": "24.82244790625",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_15"
-    },
-    {
-        "duration": "21.274354145833346",
-        "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow"
-    },
-    {
-        "duration": "20.862375020833337",
-        "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles"
-    },
-    {
-        "duration": "23.090947927083324",
-        "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles"
-    },
-    {
-        "duration": "14.698427062500002",
-        "name": "smoothness.tough_canvas_cases/bouncing_png_images"
-    },
-    {
-        "duration": "27.38738540624999",
-        "name": "smoothness.tough_canvas_cases/bouncing_svg_images"
-    },
-    {
-        "duration": "41.78804166666666",
-        "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear"
-    },
-    {
-        "duration": "20.76051041666667",
-        "name": "smoothness.tough_canvas_cases/canvas_arcs"
-    },
-    {
-        "duration": "19.97803122916667",
-        "name": "smoothness.tough_canvas_cases/canvas_font_cycler"
-    },
-    {
-        "duration": "22.20732288541667",
-        "name": "smoothness.tough_canvas_cases/canvas_lines"
-    },
-    {
-        "duration": "23.56866671875001",
-        "name": "smoothness.tough_canvas_cases/canvas_to_blob"
-    },
-    {
-        "duration": "24.096802083333333",
-        "name": "smoothness.tough_canvas_cases/chip_tune"
-    },
-    {
-        "duration": "28.066687437500004",
-        "name": "smoothness.tough_canvas_cases/crafty_mind"
-    },
-    {
-        "duration": "22.016083364583334",
-        "name": "smoothness.tough_canvas_cases/effect_games"
-    },
-    {
-        "duration": "21.681416687500008",
-        "name": "smoothness.tough_canvas_cases/fill_shapes"
-    },
-    {
-        "duration": "19.059906270833334",
-        "name": "smoothness.tough_canvas_cases/geo_apis"
-    },
-    {
-        "duration": "18.293916635416668",
-        "name": "smoothness.tough_canvas_cases/hakim"
-    },
-    {
-        "duration": "19.06423233333333",
-        "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM"
-    },
-    {
-        "duration": "18.45953534343435",
-        "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/"
-    },
-    {
-        "duration": "20.173151535353536",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html"
-    },
-    {
-        "duration": "29.548363646464644",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html"
-    },
-    {
-        "duration": "23.142090939393928",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html"
-    },
-    {
-        "duration": "28.559424272727277",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html"
-    },
-    {
-        "duration": "24.44284849494951",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html"
-    },
-    {
-        "duration": "34.526414121212106",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/"
-    },
-    {
-        "duration": "16.910393919191918",
-        "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html"
-    },
-    {
-        "duration": "41.91503033333334",
-        "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/"
-    },
-    {
-        "duration": "16.91116166666667",
-        "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169"
-    },
-    {
-        "duration": "15.295242398989904",
-        "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html"
-    },
-    {
-        "duration": "19.141060606060606",
-        "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html"
-    },
-    {
-        "duration": "27.56820201010101",
-        "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/"
-    },
-    {
-        "duration": "23.70569695959596",
-        "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html"
-    },
-    {
-        "duration": "27.974464656565644",
-        "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html"
-    },
-    {
-        "duration": "22.695020191919195",
-        "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/"
-    },
-    {
-        "duration": "18.007848515151508",
-        "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html"
-    },
-    {
-        "duration": "17.069111090909086",
-        "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/"
-    },
-    {
-        "duration": "29.079222252525252",
-        "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/"
-    },
-    {
-        "duration": "44.71519796874998",
-        "name": "smoothness.tough_canvas_cases/jarro_doverson"
-    },
-    {
-        "duration": "17.92235411458333",
-        "name": "smoothness.tough_canvas_cases/kevs_3d"
-    },
-    {
-        "duration": "27.48057292708332",
-        "name": "smoothness.tough_canvas_cases/man_in_blue"
-    },
-    {
-        "duration": "24.75252086458333",
-        "name": "smoothness.tough_canvas_cases/many_images"
-    },
-    {
-        "duration": "17.055145822916668",
-        "name": "smoothness.tough_canvas_cases/megi_dish"
-    },
-    {
-        "duration": "26.37736461458334",
-        "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt"
-    },
-    {
-        "duration": "24.969312479166664",
-        "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank"
-    },
-    {
-        "duration": "35.99058337499999",
-        "name": "smoothness.tough_canvas_cases/microsoft_snow"
-    },
-    {
-        "duration": "16.863499979166672",
-        "name": "smoothness.tough_canvas_cases/microsoft_speed_reading"
-    },
-    {
-        "duration": "19.985343739583335",
-        "name": "smoothness.tough_canvas_cases/microsoft_tweet_map"
-    },
-    {
-        "duration": "31.693624989583327",
-        "name": "smoothness.tough_canvas_cases/microsoft_video_city"
-    },
-    {
-        "duration": "23.302958343750007",
-        "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains"
-    },
-    {
-        "duration": "16.882927114583328",
-        "name": "smoothness.tough_canvas_cases/mix_10k"
-    },
-    {
-        "duration": "21.751614583333332",
-        "name": "smoothness.tough_canvas_cases/put_get_image_data"
-    },
-    {
-        "duration": "15.191604171874992",
-        "name": "smoothness.tough_canvas_cases/runway"
-    },
-    {
-        "duration": "29.540416656249988",
-        "name": "smoothness.tough_canvas_cases/smash_cat"
-    },
-    {
-        "duration": "18.93028123958334",
-        "name": "smoothness.tough_canvas_cases/spielzeugz"
-    },
-    {
-        "duration": "21.82876039583333",
-        "name": "smoothness.tough_canvas_cases/stroke_shapes"
-    },
-    {
-        "duration": "40.479040343434356",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html"
-    },
-    {
-        "duration": "20.061838444444444",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html"
-    },
-    {
-        "duration": "21.54136362626263",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image"
-    },
-    {
-        "duration": "24.823686838383853",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15"
-    },
-    {
-        "duration": "23.496161585858587",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html"
-    },
-    {
-        "duration": "20.972464626262635",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html"
-    },
-    {
-        "duration": "23.559323282828288",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html"
-    },
-    {
-        "duration": "14.799252499999996",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html"
-    },
-    {
-        "duration": "27.454303030303038",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html"
-    },
-    {
-        "duration": "21.280474777777787",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html"
-    },
-    {
-        "duration": "22.711181808080802",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html"
-    },
-    {
-        "duration": "21.97",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html"
-    },
-    {
-        "duration": "21.792666636363652",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html"
-    },
-    {
-        "duration": "22.52873737373737",
-        "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html"
-    },
-    {
-        "duration": "46.27198991919192",
-        "name": "smoothness.tough_filters_cases/Analog_Clock_SVG"
-    },
-    {
-        "duration": "43.393757575757576",
-        "name": "smoothness.tough_filters_cases/Filter_Terrain_SVG"
-    },
-    {
-        "duration": "30.462212070707064",
-        "name": "smoothness.tough_filters_cases/IE_PirateMark"
-    },
-    {
-        "duration": "28.04301012121212",
-        "name": "smoothness.tough_filters_cases/MotionMark_Focus"
-    },
-    {
-        "duration": "44.48742424242425",
-        "name": "smoothness.tough_filters_cases/analog_clock_svg"
-    },
-    {
-        "duration": "41.813595939393956",
-        "name": "smoothness.tough_filters_cases/filter_terrain_svg"
-    },
-    {
-        "duration": "30.577151545454544",
-        "name": "smoothness.tough_filters_cases/ie_pirate_mark"
-    },
-    {
-        "duration": "28.038393959595965",
-        "name": "smoothness.tough_filters_cases/motion_mark_focus"
-    },
-    {
-        "duration": "14.573687445312503",
-        "name": "smoothness.tough_image_decode_cases/cats_unscaled"
-    },
-    {
-        "duration": "12.283750054687498",
-        "name": "smoothness.tough_image_decode_cases/cats_viewport_width"
-    },
-    {
-        "duration": "14.571191924242424",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html"
-    },
-    {
-        "duration": "12.243707060606056",
-        "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html"
-    },
-    {
-        "duration": "34.085141393939395",
-        "name": "smoothness.tough_path_rendering_cases/GUIMark_Vector_Chart_Test"
-    },
-    {
-        "duration": "39.349373757575755",
-        "name": "smoothness.tough_path_rendering_cases/IE_Chalkboard"
-    },
-    {
-        "duration": "24.743727303030298",
-        "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes"
-    },
-    {
-        "duration": "25.05074748484848",
-        "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes"
-    },
-    {
-        "duration": "34.578949",
-        "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart"
-    },
-    {
-        "duration": "38.83460206122449",
-        "name": "smoothness.tough_path_rendering_cases/ie_chalkboard"
-    },
-    {
-        "duration": "24.641499969387766",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes"
-    },
-    {
-        "duration": "24.777336714285703",
-        "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes"
-    },
-    {
-        "duration": "24.081828292929288",
-        "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "23.400141424242424",
-        "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "21.0396363939394",
-        "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "19.9001413939394",
-        "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "18.71334347474748",
-        "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "18.425525212121208",
-        "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "18.030484858585854",
-        "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "17.835696964646466",
-        "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "17.714929313131307",
-        "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "17.55384851515152",
-        "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "18.996010050505046",
-        "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "16.953777808080808",
-        "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "14.616313131313133",
-        "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "13.491969702020205",
-        "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "12.407232363636368",
-        "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "11.780232277777776",
-        "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "11.394040398989901",
-        "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "11.130525212121212",
-        "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "10.905686818181824",
-        "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "10.770515126262625",
-        "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "29.06941411111111",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "28.756050484848483",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "26.610494898989888",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "25.424343434343438",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "24.021202020202022",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "23.728252545454545",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "23.12317175757576",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "23.054141393939396",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "22.755000030303034",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "22.746919191919194",
-        "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "17.095050454545458",
-        "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "16.682454555555555",
-        "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "14.392757570707067",
-        "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "13.333242404040398",
-        "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "12.247767651515149",
-        "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "11.637030323232322",
-        "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "11.315898989898992",
-        "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "11.156020217171717",
-        "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "10.929899015151515",
-        "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "10.777646489898995",
-        "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "36.274812484375005",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation"
-    },
-    {
-        "duration": "35.96737373737374",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation.html"
-    },
-    {
-        "duration": "55.68976568749999",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient"
-    },
-    {
-        "duration": "54.873535373737376",
-        "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient.html"
-    },
-    {
-        "duration": "27.256890593750004",
-        "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads"
-    },
-    {
-        "duration": "27.341989909090913",
-        "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads.html"
-    },
-    {
-        "duration": "33.566453078125",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads"
-    },
-    {
-        "duration": "31.243464686868677",
-        "name": "smoothness.tough_texture_upload_cases/large_texture_uploads.html"
-    },
-    {
-        "duration": "24.860062484375003",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads"
-    },
-    {
-        "duration": "24.883404070707062",
-        "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads.html"
-    },
-    {
-        "duration": "21.516218734375002",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads"
-    },
-    {
-        "duration": "21.80050505050506",
-        "name": "smoothness.tough_texture_upload_cases/small_texture_uploads.html"
-    },
-    {
-        "duration": "23.972494969696953",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.468131313131316",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.461151474747485",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.47129292929293",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.486181777777784",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.480393949494943",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.46288887878788",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.487222272727276",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.499414121212133",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.488919191919205",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html"
-    },
-    {
-        "duration": "22.468414141414137",
-        "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html"
-    },
-    {
-        "duration": "24.956329556818176",
-        "name": "smoothness.tough_webgl_cases/animometer_webgl"
-    },
-    {
-        "duration": "47.10743745833332",
-        "name": "smoothness.tough_webgl_cases/aquarium"
-    },
-    {
-        "duration": "36.54341416161618",
-        "name": "smoothness.tough_webgl_cases/aquarium_20k"
-    },
-    {
-        "duration": "30.523749989583333",
-        "name": "smoothness.tough_webgl_cases/blob"
-    },
-    {
-        "duration": "35.631468718750014",
-        "name": "smoothness.tough_webgl_cases/dynamic_cube_map"
-    },
-    {
-        "duration": "26.37016666666666",
-        "name": "smoothness.tough_webgl_cases/earth"
-    },
-    {
-        "duration": "25.428262616161618",
-        "name": "smoothness.tough_webgl_cases/http://kenrussell.github.io/webgl-animometer/Animometer/tests/3d/webgl.html"
-    },
-    {
-        "duration": "43.850616202020184",
-        "name": "smoothness.tough_webgl_cases/http://webglsamples.org/aquarium/aquarium.html"
-    },
-    {
-        "duration": "30.08251516161617",
-        "name": "smoothness.tough_webgl_cases/http://webglsamples.org/blob/blob.html"
-    },
-    {
-        "duration": "35.0531313030303",
-        "name": "smoothness.tough_webgl_cases/http://webglsamples.org/dynamic-cubemap/dynamic-cubemap.html"
-    },
-    {
-        "duration": "33.52522223232324",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/nvidia-vertex-buffer-object/index.html"
-    },
-    {
-        "duration": "33.97593938383838",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/particles/index.html"
-    },
-    {
-        "duration": "46.56916157575757",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/san-angeles/index.html"
-    },
-    {
-        "duration": "27.34525251515151",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/Earth.html"
-    },
-    {
-        "duration": "29.813434343434345",
-        "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/ManyPlanetsDeep.html"
-    },
-    {
-        "duration": "24.656249875",
-        "name": "smoothness.tough_webgl_cases/ken_russell"
-    },
-    {
-        "duration": "30.129749999999987",
-        "name": "smoothness.tough_webgl_cases/many_planets_deep"
-    },
-    {
-        "duration": "32.15954162499998",
-        "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object"
-    },
-    {
-        "duration": "35.22150002083331",
-        "name": "smoothness.tough_webgl_cases/particles"
-    },
-    {
-        "duration": "50.90487490909091",
-        "name": "smoothness.tough_webgl_cases/san_angeles"
-    },
-    {
-        "duration": "51.5895",
-        "name": "smoothness.tough_webgl_cases/sans_angeles"
-    },
-    {
-        "duration": "61.063929313131325",
-        "name": "speedometer-future/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "60.110767696969724",
-        "name": "speedometer/http://browserbench.org/Speedometer/"
-    },
-    {
-        "duration": "121.68721216161619",
-        "name": "speedometer2-future/Speedometer2"
-    },
-    {
-        "duration": "118.82542424242429",
-        "name": "speedometer2/Speedometer2"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "system_health.common_desktop/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "165.83420202020199",
-        "name": "system_health.common_desktop/browse:media:imgur"
-    },
-    {
-        "duration": "113.11167684848482",
-        "name": "system_health.common_desktop/browse:media:pinterest"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "system_health.common_desktop/browse:media:tumblr"
-    },
-    {
-        "duration": "125.78155545454544",
-        "name": "system_health.common_desktop/browse:media:youtube"
-    },
-    {
-        "duration": "143.6480909090909",
-        "name": "system_health.common_desktop/browse:news:cnn"
-    },
-    {
-        "duration": "91.15842424242426",
-        "name": "system_health.common_desktop/browse:news:flipboard"
-    },
-    {
-        "duration": "0.0010000069666666665",
-        "name": "system_health.common_desktop/browse:news:hackernews"
-    },
-    {
-        "duration": "154.34921212121208",
-        "name": "system_health.common_desktop/browse:news:nytimes"
-    },
-    {
-        "duration": "115.4843030707071",
-        "name": "system_health.common_desktop/browse:news:reddit"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "system_health.common_desktop/browse:search:google"
-    },
-    {
-        "duration": "66.23915151515153",
-        "name": "system_health.common_desktop/browse:search:google_india"
-    },
-    {
-        "duration": "117.25576763636366",
-        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "138.31473737373736",
-        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "80.96009090909095",
-        "name": "system_health.common_desktop/browse:social:twitter"
-    },
-    {
-        "duration": "134.326",
-        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll"
-    },
-    {
-        "duration": "120.55096979797987",
-        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "116.02421204040398",
-        "name": "system_health.common_desktop/browse:tools:earth"
-    },
-    {
-        "duration": "99.99894949494943",
-        "name": "system_health.common_desktop/browse:tools:maps"
-    },
-    {
-        "duration": "42.81786868686867",
-        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "system_health.common_desktop/browse_accessibility:tools:gmail_compose"
-    },
-    {
-        "duration": "34.96280804040405",
-        "name": "system_health.common_desktop/load:chrome:blank"
-    },
-    {
-        "duration": "38.633787878787885",
-        "name": "system_health.common_desktop/load:games:alphabetty"
-    },
-    {
-        "duration": "50.945939434343465",
-        "name": "system_health.common_desktop/load:games:bubbles"
-    },
-    {
-        "duration": "36.7742222020202",
-        "name": "system_health.common_desktop/load:games:lazors"
-    },
-    {
-        "duration": "49.47175757575758",
-        "name": "system_health.common_desktop/load:games:miniclip"
-    },
-    {
-        "duration": "51.63056567676768",
-        "name": "system_health.common_desktop/load:games:spychase"
-    },
-    {
-        "duration": "58.15473737373735",
-        "name": "system_health.common_desktop/load:media:9gag"
-    },
-    {
-        "duration": "42.136596020202006",
-        "name": "system_health.common_desktop/load:media:dailymotion"
-    },
-    {
-        "duration": "40.31307070707072",
-        "name": "system_health.common_desktop/load:media:google_images"
-    },
-    {
-        "duration": "50.82486868686868",
-        "name": "system_health.common_desktop/load:media:imgur"
-    },
-    {
-        "duration": "54.77246462626261",
-        "name": "system_health.common_desktop/load:media:soundcloud"
-    },
-    {
-        "duration": "42.53483838383839",
-        "name": "system_health.common_desktop/load:media:youtube"
-    },
-    {
-        "duration": "41.46797979797981",
-        "name": "system_health.common_desktop/load:news:bbc"
-    },
-    {
-        "duration": "52.36899997979796",
-        "name": "system_health.common_desktop/load:news:cnn"
-    },
-    {
-        "duration": "41.5370505050505",
-        "name": "system_health.common_desktop/load:news:flipboard"
-    },
-    {
-        "duration": "36.03512123232325",
-        "name": "system_health.common_desktop/load:news:hackernews"
-    },
-    {
-        "duration": "50.06537371717172",
-        "name": "system_health.common_desktop/load:news:nytimes"
-    },
-    {
-        "duration": "59.24611119191916",
-        "name": "system_health.common_desktop/load:news:qq"
-    },
-    {
-        "duration": "39.33218181818184",
-        "name": "system_health.common_desktop/load:news:reddit"
-    },
-    {
-        "duration": "39.96905048484851",
-        "name": "system_health.common_desktop/load:news:wikipedia"
-    },
-    {
-        "duration": "40.80807068686868",
-        "name": "system_health.common_desktop/load:search:amazon"
-    },
-    {
-        "duration": "37.41196967676768",
-        "name": "system_health.common_desktop/load:search:baidu"
-    },
-    {
-        "duration": "42.61930301010101",
-        "name": "system_health.common_desktop/load:search:ebay"
-    },
-    {
-        "duration": "38.97145448484849",
-        "name": "system_health.common_desktop/load:search:google"
-    },
-    {
-        "duration": "41.087575757575756",
-        "name": "system_health.common_desktop/load:search:taobao"
-    },
-    {
-        "duration": "37.76853535353535",
-        "name": "system_health.common_desktop/load:search:yahoo"
-    },
-    {
-        "duration": "37.62425254545455",
-        "name": "system_health.common_desktop/load:search:yandex"
-    },
-    {
-        "duration": "41.90877781818181",
-        "name": "system_health.common_desktop/load:social:instagram"
-    },
-    {
-        "duration": "43.41620195959595",
-        "name": "system_health.common_desktop/load:social:pinterest"
-    },
-    {
-        "duration": "40.392808101010104",
-        "name": "system_health.common_desktop/load:social:vk"
-    },
-    {
-        "duration": "71.10068690909092",
-        "name": "system_health.common_desktop/load:tools:docs"
-    },
-    {
-        "duration": "65.29509086868691",
-        "name": "system_health.common_desktop/load:tools:drive"
-    },
-    {
-        "duration": "42.341575676767675",
-        "name": "system_health.common_desktop/load:tools:dropbox"
-    },
-    {
-        "duration": "52.2469494949495",
-        "name": "system_health.common_desktop/load:tools:gmail"
-    },
-    {
-        "duration": "41.760797979797964",
-        "name": "system_health.common_desktop/load:tools:stackoverflow"
-    },
-    {
-        "duration": "47.433181797979806",
-        "name": "system_health.common_desktop/load:tools:weather"
-    },
-    {
-        "duration": "39.468191898989886",
-        "name": "system_health.common_desktop/load_accessibility:media:wikipedia"
-    },
-    {
-        "duration": "44.216555575757596",
-        "name": "system_health.common_desktop/load_accessibility:shopping:amazon"
-    },
-    {
-        "duration": "202.90589898989893",
-        "name": "system_health.common_desktop/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "419.0509494949496",
-        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "263.47167676767685",
-        "name": "system_health.common_desktop/multitab:misc:typical24"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "system_health.common_desktop/play:media:google_play_music"
-    },
-    {
-        "duration": "0.0010000069666666665",
-        "name": "system_health.common_desktop/play:media:soundcloud"
-    },
-    {
-        "duration": "0.00150001045",
-        "name": "system_health.memory_desktop/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "236.25115151515146",
-        "name": "system_health.memory_desktop/browse:media:imgur"
-    },
-    {
-        "duration": "208.9163635555555",
-        "name": "system_health.memory_desktop/browse:media:pinterest"
-    },
-    {
-        "duration": "224.63004032323227",
-        "name": "system_health.memory_desktop/browse:media:tumblr"
-    },
-    {
-        "duration": "202.04582820202018",
-        "name": "system_health.memory_desktop/browse:media:youtube"
-    },
-    {
-        "duration": "213.24481830303029",
-        "name": "system_health.memory_desktop/browse:news:cnn"
-    },
-    {
-        "duration": "153.6479495353535",
-        "name": "system_health.memory_desktop/browse:news:flipboard"
-    },
-    {
-        "duration": "0.0010000467",
-        "name": "system_health.memory_desktop/browse:news:hackernews"
-    },
-    {
-        "duration": "217.12996961616153",
-        "name": "system_health.memory_desktop/browse:news:nytimes"
-    },
-    {
-        "duration": "194.98735343434342",
-        "name": "system_health.memory_desktop/browse:news:reddit"
-    },
-    {
-        "duration": "0.00139999386",
-        "name": "system_health.memory_desktop/browse:search:google"
-    },
-    {
-        "duration": "122.51760597979793",
-        "name": "system_health.memory_desktop/browse:search:google_india"
-    },
-    {
-        "duration": "206.32337381818184",
-        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "216.03179785858583",
-        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "148.18784850505054",
-        "name": "system_health.memory_desktop/browse:social:twitter"
-    },
-    {
-        "duration": "0.001249968975",
-        "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll"
-    },
-    {
-        "duration": "205.08421216161614",
-        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "183.17530303030313",
-        "name": "system_health.memory_desktop/browse:tools:earth"
-    },
-    {
-        "duration": "165.7054039595959",
-        "name": "system_health.memory_desktop/browse:tools:maps"
-    },
-    {
-        "duration": "75.1309091212121",
-        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch"
-    },
-    {
-        "duration": "0.00150001045",
-        "name": "system_health.memory_desktop/browse_accessibility:tools:gmail_compose"
-    },
-    {
-        "duration": "63.14180799999999",
-        "name": "system_health.memory_desktop/load:chrome:blank"
-    },
-    {
-        "duration": "69.44443436363636",
-        "name": "system_health.memory_desktop/load:games:alphabetty"
-    },
-    {
-        "duration": "106.31801018181818",
-        "name": "system_health.memory_desktop/load:games:bubbles"
-    },
-    {
-        "duration": "66.44978783838387",
-        "name": "system_health.memory_desktop/load:games:lazors"
-    },
-    {
-        "duration": "84.52073740404037",
-        "name": "system_health.memory_desktop/load:games:miniclip"
-    },
-    {
-        "duration": "88.48814136363639",
-        "name": "system_health.memory_desktop/load:games:spychase"
-    },
-    {
-        "duration": "97.9264444747475",
-        "name": "system_health.memory_desktop/load:media:9gag"
-    },
-    {
-        "duration": "73.98255559595961",
-        "name": "system_health.memory_desktop/load:media:dailymotion"
-    },
-    {
-        "duration": "72.9342323434343",
-        "name": "system_health.memory_desktop/load:media:google_images"
-    },
-    {
-        "duration": "88.1901716969697",
-        "name": "system_health.memory_desktop/load:media:imgur"
-    },
-    {
-        "duration": "90.35386863636361",
-        "name": "system_health.memory_desktop/load:media:soundcloud"
-    },
-    {
-        "duration": "75.94429292929289",
-        "name": "system_health.memory_desktop/load:media:youtube"
-    },
-    {
-        "duration": "73.39986865656567",
-        "name": "system_health.memory_desktop/load:news:bbc"
-    },
-    {
-        "duration": "86.88694950505052",
-        "name": "system_health.memory_desktop/load:news:cnn"
-    },
-    {
-        "duration": "71.92084851515149",
-        "name": "system_health.memory_desktop/load:news:flipboard"
-    },
-    {
-        "duration": "64.84997974747473",
-        "name": "system_health.memory_desktop/load:news:hackernews"
-    },
-    {
-        "duration": "84.31750513131311",
-        "name": "system_health.memory_desktop/load:news:nytimes"
-    },
-    {
-        "duration": "100.38616164646463",
-        "name": "system_health.memory_desktop/load:news:qq"
-    },
-    {
-        "duration": "70.12904039393939",
-        "name": "system_health.memory_desktop/load:news:reddit"
-    },
-    {
-        "duration": "72.30864643434343",
-        "name": "system_health.memory_desktop/load:news:wikipedia"
-    },
-    {
-        "duration": "71.25581818181816",
-        "name": "system_health.memory_desktop/load:search:amazon"
-    },
-    {
-        "duration": "66.45161616161617",
-        "name": "system_health.memory_desktop/load:search:baidu"
-    },
-    {
-        "duration": "73.90593941414143",
-        "name": "system_health.memory_desktop/load:search:ebay"
-    },
-    {
-        "duration": "68.55540403030301",
-        "name": "system_health.memory_desktop/load:search:google"
-    },
-    {
-        "duration": "73.35386866666664",
-        "name": "system_health.memory_desktop/load:search:taobao"
-    },
-    {
-        "duration": "68.41280807070706",
-        "name": "system_health.memory_desktop/load:search:yahoo"
-    },
-    {
-        "duration": "67.77723234343435",
-        "name": "system_health.memory_desktop/load:search:yandex"
-    },
-    {
-        "duration": "74.91384859595958",
-        "name": "system_health.memory_desktop/load:social:instagram"
-    },
-    {
-        "duration": "78.32028277777776",
-        "name": "system_health.memory_desktop/load:social:pinterest"
-    },
-    {
-        "duration": "72.37321208080806",
-        "name": "system_health.memory_desktop/load:social:vk"
-    },
-    {
-        "duration": "97.93266673737376",
-        "name": "system_health.memory_desktop/load:tools:docs"
-    },
-    {
-        "duration": "96.85987875757577",
-        "name": "system_health.memory_desktop/load:tools:drive"
-    },
-    {
-        "duration": "72.57529293939396",
-        "name": "system_health.memory_desktop/load:tools:dropbox"
-    },
-    {
-        "duration": "88.39255551515147",
-        "name": "system_health.memory_desktop/load:tools:gmail"
-    },
-    {
-        "duration": "73.60488888888892",
-        "name": "system_health.memory_desktop/load:tools:stackoverflow"
-    },
-    {
-        "duration": "80.1809999393939",
-        "name": "system_health.memory_desktop/load:tools:weather"
-    },
-    {
-        "duration": "68.4851414040404",
-        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia"
-    },
-    {
-        "duration": "72.7581312828283",
-        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon"
-    },
-    {
-        "duration": "508.0542624242424",
-        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
-    },
-    {
-        "duration": "523.956787979798",
-        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
-    },
-    {
-        "duration": "385.40735359595953",
-        "name": "system_health.memory_desktop/multitab:misc:typical24"
-    },
-    {
-        "duration": "0.0014444721666666664",
-        "name": "system_health.memory_desktop/play:media:google_play_music"
-    },
-    {
-        "duration": "0.0013333426222222223",
-        "name": "system_health.memory_desktop/play:media:pandora"
-    },
-    {
-        "duration": "0.00119996068",
-        "name": "system_health.memory_desktop/play:media:soundcloud"
-    },
-    {
-        "duration": "123.30164646464648",
-        "name": "tab_switching.typical_25/multitab:misc:typical24"
-    },
-    {
-        "duration": "66.81692923232326",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION"
-    },
-    {
-        "duration": "41.662737353535334",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS"
-    },
-    {
-        "duration": "28.991717202020205",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE"
-    },
-    {
-        "duration": "31.326676747474743",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE"
-    },
-    {
-        "duration": "24.11573735353535",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "20.636646464646464",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "24.556989929292946",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY"
-    },
-    {
-        "duration": "24.01974749494948",
-        "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID"
-    },
-    {
-        "duration": "29.946020181818174",
-        "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second"
-    },
-    {
-        "duration": "29.458040414141408",
-        "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second"
-    },
-    {
-        "duration": "25.707363646464636",
-        "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second"
-    },
-    {
-        "duration": "24.193919212121212",
-        "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second"
-    },
-    {
-        "duration": "22.750040383838375",
-        "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second"
-    },
-    {
-        "duration": "22.045939383838384",
-        "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second"
-    },
-    {
-        "duration": "21.70447477777778",
-        "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second"
-    },
-    {
-        "duration": "21.297535333333332",
-        "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second"
-    },
-    {
-        "duration": "20.865888898989894",
-        "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second"
-    },
-    {
-        "duration": "20.64072726262626",
-        "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second"
-    },
-    {
-        "duration": "21.012656545454544",
-        "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second"
-    },
-    {
-        "duration": "19.18247472727273",
-        "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second"
-    },
-    {
-        "duration": "16.36590913131313",
-        "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second"
-    },
-    {
-        "duration": "14.926747429292925",
-        "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second"
-    },
-    {
-        "duration": "13.584626267676764",
-        "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second"
-    },
-    {
-        "duration": "12.876393914141426",
-        "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second"
-    },
-    {
-        "duration": "12.440222222222225",
-        "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second"
-    },
-    {
-        "duration": "12.03338381313131",
-        "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second"
-    },
-    {
-        "duration": "11.706303020202014",
-        "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second"
-    },
-    {
-        "duration": "11.508666681818179",
-        "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second"
-    },
-    {
-        "duration": "35.87558585858584",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second"
-    },
-    {
-        "duration": "36.41063636363636",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second"
-    },
-    {
-        "duration": "32.8108787979798",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second"
-    },
-    {
-        "duration": "30.806373696969693",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second"
-    },
-    {
-        "duration": "28.99339393939394",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second"
-    },
-    {
-        "duration": "27.79323232323232",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second"
-    },
-    {
-        "duration": "27.076808070707067",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second"
-    },
-    {
-        "duration": "26.51019192929292",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second"
-    },
-    {
-        "duration": "26.273191949494947",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second"
-    },
-    {
-        "duration": "25.914595979797973",
-        "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second"
-    },
-    {
-        "duration": "19.432797969696974",
-        "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second"
-    },
-    {
-        "duration": "18.965242434343427",
-        "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second"
-    },
-    {
-        "duration": "16.321272737373743",
-        "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second"
-    },
-    {
-        "duration": "14.841939424242428",
-        "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second"
-    },
-    {
-        "duration": "13.453888823232319",
-        "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second"
-    },
-    {
-        "duration": "12.675080828282827",
-        "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second"
-    },
-    {
-        "duration": "12.259858611111111",
-        "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second"
-    },
-    {
-        "duration": "11.91769695959596",
-        "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second"
-    },
-    {
-        "duration": "11.68744437878788",
-        "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second"
-    },
-    {
-        "duration": "11.448606075757576",
-        "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second"
-    },
-    {
-        "duration": "15.119060601010101",
-        "name": "tracing.tracing_with_background_memory_infra/Facebook"
-    },
-    {
-        "duration": "15.495262671717168",
-        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
-    },
-    {
-        "duration": "12.997333333333332",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
-    },
-    {
-        "duration": "13.77578793939394",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
-    },
-    {
-        "duration": "13.233191878787887",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
-    },
-    {
-        "duration": "14.379202030303036",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
-    },
-    {
-        "duration": "15.17669696464646",
-        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
-    },
-    {
-        "duration": "15.622646484848488",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
-    },
-    {
-        "duration": "15.701929333333332",
-        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
-    },
-    {
-        "duration": "9.999615571428572E-4",
-        "name": "v8.browsing_desktop-future/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "468.0823636363638",
-        "name": "v8.browsing_desktop-future/browse:media:imgur"
-    },
-    {
-        "duration": "104.49812121212123",
-        "name": "v8.browsing_desktop-future/browse:media:pinterest"
-    },
-    {
-        "duration": "135.6159493535354",
-        "name": "v8.browsing_desktop-future/browse:media:tumblr"
-    },
-    {
-        "duration": "137.37729296969692",
-        "name": "v8.browsing_desktop-future/browse:media:youtube"
-    },
-    {
-        "duration": "180.64040404040412",
-        "name": "v8.browsing_desktop-future/browse:news:cnn"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "v8.browsing_desktop-future/browse:news:flipboard"
-    },
-    {
-        "duration": "0.0010000467",
-        "name": "v8.browsing_desktop-future/browse:news:hackernews"
-    },
-    {
-        "duration": "185.32583828282822",
-        "name": "v8.browsing_desktop-future/browse:news:nytimes"
-    },
-    {
-        "duration": "110.84565656565655",
-        "name": "v8.browsing_desktop-future/browse:news:reddit"
-    },
-    {
-        "duration": "71.56818181818184",
-        "name": "v8.browsing_desktop-future/browse:search:google"
-    },
-    {
-        "duration": "53.0928383838384",
-        "name": "v8.browsing_desktop-future/browse:search:google_india"
-    },
-    {
-        "duration": "123.64869696969699",
-        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "140.79785858585856",
-        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "69.21239402020203",
-        "name": "v8.browsing_desktop-future/browse:social:twitter"
-    },
-    {
-        "duration": "138.420703125",
-        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll"
-    },
-    {
-        "duration": "132.83286864646468",
-        "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "124.29252521212122",
-        "name": "v8.browsing_desktop-future/browse:tools:earth"
-    },
-    {
-        "duration": "103.67870703030309",
-        "name": "v8.browsing_desktop-future/browse:tools:maps"
-    },
-    {
-        "duration": "0.0010000069666666665",
-        "name": "v8.browsing_desktop/browse:media:flickr_infinite_scroll"
-    },
-    {
-        "duration": "472.0866464646464",
-        "name": "v8.browsing_desktop/browse:media:imgur"
-    },
-    {
-        "duration": "104.03253535353535",
-        "name": "v8.browsing_desktop/browse:media:pinterest"
-    },
-    {
-        "duration": "134.88141418181823",
-        "name": "v8.browsing_desktop/browse:media:tumblr"
-    },
-    {
-        "duration": "135.82681818181817",
-        "name": "v8.browsing_desktop/browse:media:youtube"
-    },
-    {
-        "duration": "179.8623636363635",
-        "name": "v8.browsing_desktop/browse:news:cnn"
-    },
-    {
-        "duration": "9.999871E-4",
-        "name": "v8.browsing_desktop/browse:news:flipboard"
-    },
-    {
-        "duration": "0.0011428424142857143",
-        "name": "v8.browsing_desktop/browse:news:hackernews"
-    },
-    {
-        "duration": "185.03500010101007",
-        "name": "v8.browsing_desktop/browse:news:nytimes"
-    },
-    {
-        "duration": "110.62355555555561",
-        "name": "v8.browsing_desktop/browse:news:reddit"
-    },
-    {
-        "duration": "71.48817171717172",
-        "name": "v8.browsing_desktop/browse:search:google"
-    },
-    {
-        "duration": "53.10665652525254",
-        "name": "v8.browsing_desktop/browse:search:google_india"
-    },
-    {
-        "duration": "124.86323232323235",
-        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll"
-    },
-    {
-        "duration": "140.9457877777777",
-        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll"
-    },
-    {
-        "duration": "69.2398888888889",
-        "name": "v8.browsing_desktop/browse:social:twitter"
-    },
-    {
-        "duration": "140.501",
-        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll"
-    },
-    {
-        "duration": "134.33149509090913",
-        "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll"
-    },
-    {
-        "duration": "123.75258585858585",
-        "name": "v8.browsing_desktop/browse:tools:earth"
-    },
-    {
-        "duration": "103.45835353535348",
-        "name": "v8.browsing_desktop/browse:tools:maps"
-    },
-    {
-        "duration": "9.999275E-4",
-        "name": "wasm/AsmJsZenGarden"
-    },
-    {
-        "duration": "233.62181816161612",
-        "name": "wasm/WasmSpaceBuggy"
-    },
-    {
-        "duration": "478.31656595959583",
-        "name": "wasm/WasmStylizedRenderer"
-    },
-    {
-        "duration": "469.2246060606063",
-        "name": "wasm/WasmSunTemple"
-    },
-    {
-        "duration": "132.99508089898993",
-        "name": "wasm/WasmTanks"
-    },
-    {
-        "duration": "444.72331323232305",
-        "name": "wasm/WasmZenGarden"
-    },
-    {
-        "duration": "83.8624848080808",
-        "name": "webrtc/10s_datachannel_transfer"
-    },
-    {
-        "duration": "31.83834342424242",
-        "name": "webrtc/canvas_capture_peer_connection"
-    },
-    {
-        "duration": "38.58837375757576",
-        "name": "webrtc/codec_constraints_h264"
-    },
-    {
-        "duration": "38.91298987878789",
-        "name": "webrtc/codec_constraints_vp8"
-    },
-    {
-        "duration": "38.68032325252526",
-        "name": "webrtc/codec_constraints_vp9"
-    },
-    {
-        "duration": "25.756191888888882",
-        "name": "webrtc/hd_local_stream_10s"
-    },
-    {
-        "duration": "192.94522222222224",
-        "name": "webrtc/multiple_peerconnections"
-    },
-    {
-        "duration": "114.28617175757579",
-        "name": "webrtc/pause_play_peerconnections"
-    }
-]
\ No newline at end of file
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h
index aed4869..e439ce0 100644
--- a/ui/accessibility/ax_position.h
+++ b/ui/accessibility/ax_position.h
@@ -270,6 +270,11 @@
     return GetNodeInTree(tree_id_, anchor_id_);
   }
 
+  bool IsIgnored() const {
+    AXNodeType* anchor = GetAnchor();
+    return anchor && anchor->IsIgnored();
+  }
+
   AXPositionKind kind() const { return kind_; }
   int child_index() const { return child_index_; }
   int text_offset() const { return text_offset_; }
@@ -1306,11 +1311,11 @@
   // not visible to a specific platform's APIs.
   AXPositionInstance AsPositionBeforeCharacter() const {
     AXPositionInstance text_position = AsTextPosition();
-    if (!text_position->AtEndOfAnchor())
+    if (!text_position->AtEndOfAnchor() && !text_position->IsIgnored())
       return text_position;
 
     AXPositionInstance tree_position = CreateNextLeafTreePosition();
-    while (!tree_position->MaxTextOffset())
+    while (!tree_position->MaxTextOffset() || tree_position->IsIgnored())
       tree_position = tree_position->CreateNextLeafTreePosition();
     return tree_position->AsTextPosition();
   }
@@ -1320,11 +1325,11 @@
   // See `AsPositionBeforeCharacter`, as this is its "reversed" version.
   AXPositionInstance AsPositionAfterCharacter() const {
     AXPositionInstance text_position = AsTextPosition();
-    if (!text_position->AtStartOfAnchor())
+    if (!text_position->AtStartOfAnchor() && !text_position->IsIgnored())
       return text_position;
 
     AXPositionInstance tree_position = CreatePreviousLeafTreePosition();
-    while (!tree_position->MaxTextOffset())
+    while (!tree_position->MaxTextOffset() || tree_position->IsIgnored())
       tree_position = tree_position->CreatePreviousLeafTreePosition();
     return tree_position->CreatePositionAtEndOfAnchor()->AsTextPosition();
   }
@@ -1432,7 +1437,8 @@
 
           text_position = std::move(next_position);
         } while (!text_position->MaxTextOffset() ||
-                 text_position->GetWordStartOffsets().empty());
+                 text_position->GetWordStartOffsets().empty() ||
+                 (text_position->IsIgnored()));
 
         if (at_last_anchor_boundary)
           break;
@@ -1513,7 +1519,8 @@
 
           text_position = std::move(previous_position);
         } while (!text_position->MaxTextOffset() ||
-                 text_position->GetWordStartOffsets().empty());
+                 text_position->GetWordStartOffsets().empty() ||
+                 text_position->IsIgnored());
 
         if (at_last_anchor_boundary)
           break;
@@ -1600,7 +1607,8 @@
 
           text_position = std::move(next_position);
         } while (!text_position->MaxTextOffset() ||
-                 text_position->GetWordEndOffsets().empty());
+                 text_position->GetWordEndOffsets().empty() ||
+                 text_position->IsIgnored());
 
         if (at_last_anchor_boundary)
           break;
@@ -1688,7 +1696,8 @@
 
           text_position = std::move(previous_position);
         } while (!text_position->MaxTextOffset() ||
-                 text_position->GetWordStartOffsets().empty());
+                 text_position->GetWordStartOffsets().empty() ||
+                 text_position->IsIgnored());
 
         if (at_last_anchor_boundary)
           break;
@@ -2599,19 +2608,19 @@
   }
 
   static bool AtStartOfPagePredicate(const AXPositionInstance& position) {
-    return position->AtStartOfPage();
+    return !position->IsIgnored() && position->AtStartOfPage();
   }
 
   static bool AtEndOfPagePredicate(const AXPositionInstance& position) {
-    return position->AtEndOfPage();
+    return !position->IsIgnored() && position->AtEndOfPage();
   }
 
   static bool AtStartOfLinePredicate(const AXPositionInstance& position) {
-    return position->AtStartOfLine();
+    return !position->IsIgnored() && position->AtStartOfLine();
   }
 
   static bool AtEndOfLinePredicate(const AXPositionInstance& position) {
-    return position->AtEndOfLine();
+    return !position->IsIgnored() && position->AtEndOfLine();
   }
 
   // Default behavior is to never abort.
diff --git a/ui/accessibility/ax_range.h b/ui/accessibility/ax_range.h
index e6199bf59..80f0c0df 100644
--- a/ui/accessibility/ax_range.h
+++ b/ui/accessibility/ax_range.h
@@ -243,7 +243,8 @@
   // Pass -1 for max_count to retrieve all text.
   base::string16 GetText(AXTextConcatenationBehavior concatenation_behavior =
                              AXTextConcatenationBehavior::kAsTextContent,
-                         int max_count = -1) const {
+                         int max_count = -1,
+                         bool include_ignored = false) const {
     base::string16 range_text;
     bool should_append_newline = false;
     bool found_trailing_newline = false;
@@ -271,8 +272,10 @@
             start->IsInLineBreak() ||
             (found_trailing_newline && start->IsInWhiteSpace());
 
-        range_text += current_anchor_text.substr(start->text_offset(),
-                                                 characters_to_append);
+        if (!include_ignored && !start->IsIgnored()) {
+          range_text += current_anchor_text.substr(start->text_offset(),
+                                                   characters_to_append);
+        }
       }
 
       DCHECK(max_count < 0 || int{range_text.length()} <= max_count);
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
index 8e52e8ec..bcff2a5 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
@@ -598,6 +598,14 @@
                                 &end_units_moved);
         succeeded_move = SUCCEEDED(hr) && end_units_moved == 1;
       }
+
+      // Because Windows ATs behave undesirably when the start and end endpoints
+      // are not in the same anchor (for character and word navigation), make
+      // sure to bring back the end endpoint to the end of the start's anchor.
+      if (start_->anchor_id() != end_->anchor_id() &&
+          (unit == TextUnit_Character || unit == TextUnit_Word)) {
+        ExpandToEnclosingUnit(unit);
+      }
     }
   }
 
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
index 169cedb..e3eca56 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
@@ -504,16 +504,24 @@
         ax::mojom::IntListAttribute::kWordEnds, word_end_offsets);
     paragraph1_data.AddBoolAttribute(
         ax::mojom::BoolAttribute::kIsLineBreakingObject, true);
-    paragraph1_data.child_ids = {10};
+
+    ui::AXNodeData ignored_text_data;
+    ignored_text_data.id = 11;
+    ignored_text_data.role = ax::mojom::Role::kStaticText;
+    ignored_text_data.AddState(ax::mojom::State::kIgnored);
+    text_content = "ignored text";
+    ignored_text_data.SetName(text_content);
+
+    paragraph1_data.child_ids = {10, 11};
 
     ui::AXNodeData paragraph2_data;
-    paragraph2_data.id = 11;
+    paragraph2_data.id = 12;
     paragraph2_data.role = ax::mojom::Role::kParagraph;
     paragraph2_data.AddBoolAttribute(
         ax::mojom::BoolAttribute::kIsLineBreakingObject, true);
 
     ui::AXNodeData paragraph2_text_data;
-    paragraph2_text_data.id = 12;
+    paragraph2_text_data.id = 13;
     paragraph2_text_data.role = ax::mojom::Role::kStaticText;
     text_content = "Paragraph 2";
     paragraph2_text_data.SetName(text_content);
@@ -525,22 +533,23 @@
         ax::mojom::IntListAttribute::kWordEnds, word_end_offsets);
     paragraph1_data.AddBoolAttribute(
         ax::mojom::BoolAttribute::kIsLineBreakingObject, true);
-    paragraph2_data.child_ids = {12};
+    paragraph2_data.child_ids = {13};
 
     ui::AXNodeData root_data;
     root_data.id = 1;
     root_data.role = ax::mojom::Role::kRootWebArea;
-    root_data.child_ids = {2, 4, 8, 9, 11};
+    root_data.child_ids = {2, 4, 8, 9, 12};
 
     ui::AXTreeUpdate update;
     update.has_tree_data = true;
     update.root_id = root_data.id;
-    update.nodes = {root_data,        group1_data,
-                    text_data,        group2_data,
-                    line_break1_data, standalone_text_data,
-                    line_break2_data, bold_text_data,
-                    paragraph1_data,  paragraph1_text_data,
-                    paragraph2_data,  paragraph2_text_data};
+    update.nodes = {root_data,           group1_data,
+                    text_data,           group2_data,
+                    line_break1_data,    standalone_text_data,
+                    line_break2_data,    bold_text_data,
+                    paragraph1_data,     paragraph1_text_data,
+                    ignored_text_data,   paragraph2_data,
+                    paragraph2_text_data};
     update.tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
     return update;
   }
@@ -1425,11 +1434,11 @@
                   /*expected_count*/ 1);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Character,
                   /*count*/ 18,
-                  /*expected_text*/ L"\nS",
+                  /*expected_text*/ L"S",
                   /*expected_count*/ 18);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Character,
                   /*count*/ 16,
-                  /*expected_text*/ L"\nb",
+                  /*expected_text*/ L"b",
                   /*expected_count*/ 16);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Character,
                   /*count*/ 60,
@@ -1723,11 +1732,11 @@
                   /*expected_count*/ 1);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word,
                   /*count*/ 2,
-                  /*expected_text*/ L"text\n",
+                  /*expected_text*/ L"text",
                   /*expected_count*/ 2);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word,
                   /*count*/ 2,
-                  /*expected_text*/ L"line\n",
+                  /*expected_text*/ L"line",
                   /*expected_count*/ 2);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word,
                   /*count*/ 3,
@@ -1751,11 +1760,11 @@
                   /*expected_count*/ -3);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word,
                   /*count*/ -3,
-                  /*expected_text*/ L"line\n",
+                  /*expected_text*/ L"line",
                   /*expected_count*/ -3);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word,
                   /*count*/ -2,
-                  /*expected_text*/ L"text\n",
+                  /*expected_text*/ L"text",
                   /*expected_count*/ -2);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word,
                   /*count*/ -6,
@@ -4430,6 +4439,7 @@
 
   tree_update.nodes[11].id = 12;
   tree_update.nodes[11].role = ax::mojom::Role::kStaticText;
+  tree_update.nodes[11].AddState(ax::mojom::State::kIgnored);
   tree_update.nodes[11].SetName(".12.");
 
   tree_update.nodes[12].id = 13;
@@ -4457,11 +4467,38 @@
   EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 11),
                            GetNodeFromTree(tree_id, 11));
   EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 12),
-                           GetNodeFromTree(tree_id, 12));
+                           GetNodeFromTree(tree_id, 6));
   EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 13),
                            GetNodeFromTree(tree_id, 13));
   EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 14),
                            GetNodeFromTree(tree_id, 14));
-}  // namespace ui
+
+  // Test movement and GetText()
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(text_range_provider,
+                                   GetNodeFromTree(tree_id, 1));
+
+  ASSERT_HRESULT_SUCCEEDED(
+      text_range_provider->ExpandToEnclosingUnit(TextUnit_Character));
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L".");
+
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character,
+      /*count*/ 2,
+      /*expected_text*/ L".3.",
+      /*expected_count*/ 2);
+
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character,
+      /*count*/ 6,
+      /*expected_text*/ L".3..4..5.",
+      /*expected_count*/ 6);
+
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character,
+      /*count*/ 12,
+      /*expected_text*/ L".3..4..5..13..14..11.",
+      /*expected_count*/ 12);
+}
 
 }  // namespace ui
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
index d49f0a0..d36f559 100644
--- a/ui/android/BUILD.gn
+++ b/ui/android/BUILD.gn
@@ -317,6 +317,7 @@
     "java/src/org/chromium/ui/text/SpanApplier.java",
     "java/src/org/chromium/ui/touchless/CursorObserver.java",
     "java/src/org/chromium/ui/touchless/TouchlessEventHandler.java",
+    "java/src/org/chromium/ui/util/TokenHolder.java",
     "java/src/org/chromium/ui/widget/AnchoredPopupWindow.java",
     "java/src/org/chromium/ui/widget/ButtonCompat.java",
     "java/src/org/chromium/ui/widget/CheckableImageView.java",
@@ -397,6 +398,7 @@
     "junit/src/org/chromium/ui/shadows/ShadowAppCompatResourcesTest.java",
     "junit/src/org/chromium/ui/shadows/ShadowAnimatedStateListDrawable.java",
     "junit/src/org/chromium/ui/text/SpanApplierTest.java",
+    "junit/src/org/chromium/ui/util/TokenHolderTest.java",
     "junit/src/org/chromium/ui/widget/AnchoredPopupWindowTest.java",
     "junit/src/org/chromium/ui/widget/ViewLookupCachingFrameLayoutTest.java",
   ]
diff --git a/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java b/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java
index 8dd62b7..ff4b931 100644
--- a/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java
+++ b/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java
@@ -16,12 +16,15 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.ui.UiSwitches;
 import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.util.TokenHolder;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -49,7 +52,7 @@
     /**
      * Present a {@link PropertyModel} in a container.
      */
-    public static abstract class Presenter {
+    public abstract static class Presenter {
         private Callback<Integer> mDismissCallback;
         private PropertyModel mDialogModel;
 
@@ -160,6 +163,9 @@
     /** Observers of this manager. */
     private final ObserverList<ModalDialogManagerObserver> mObserverList = new ObserverList<>();
 
+    /** Tokens for features temporarily suppressing dialogs. */
+    private final Map<Integer, TokenHolder> mTokenHolders = new HashMap<>();
+
     /**
      * Constructor for initializing default {@link Presenter}.
      * @param defaultPresenter The default presenter to be used when no presenter specified.
@@ -169,6 +175,11 @@
             @NonNull Presenter defaultPresenter, @ModalDialogType int defaultType) {
         mDefaultPresenter = defaultPresenter;
         registerPresenter(defaultPresenter, defaultType);
+
+        mTokenHolders.put(ModalDialogType.APP,
+                new TokenHolder(() -> resumeTypeInternal(ModalDialogType.APP)));
+        mTokenHolders.put(ModalDialogType.TAB,
+                new TokenHolder(() -> resumeTypeInternal(ModalDialogType.TAB)));
     }
 
     /** Clears any dependencies on the showing or pending dialogs. */
@@ -336,24 +347,37 @@
 
     /**
      * Suspend all dialogs of the specified type, including the one currently shown. These dialogs
-     * will be prevented from showing unless {@link #resumeType(int)} is called after the
+     * will be prevented from showing unless {@link #resumeType(int, int)} is called after the
      * suspension. If the current dialog is suspended, it will be moved back to the first dialog
      * in the pending list. Any dialogs of the specified type in the pending list will be skipped.
      * @param dialogType The specified type of dialogs to be suspended.
+     * @return A token to use when resuming the suspended type.
      */
-    public void suspendType(@ModalDialogType int dialogType) {
+    public int suspendType(@ModalDialogType int dialogType) {
         mSuspendedTypes.add(dialogType);
         if (isShowing() && dialogType == mCurrentType) {
             suspendCurrentDialog();
             showNextDialog();
         }
+        return mTokenHolders.get(dialogType).acquireToken();
     }
 
     /**
-     * Resume the specified type of dialogs after suspension.
+     * Resume the specified type of dialogs after suspension. This method does not resume showing
+     * the dialog until after all held tokens are released.
+     * @param dialogType The specified type of dialogs to be resumed.
+     * @param token The token generated from suspending the dialog type.
+     */
+    public void resumeType(@ModalDialogType int dialogType, int token) {
+        mTokenHolders.get(dialogType).releaseToken(token);
+    }
+
+    /**
+     * Actually resumes showing the type of dialog after all tokens are released.
      * @param dialogType The specified type of dialogs to be resumed.
      */
-    public void resumeType(@ModalDialogType int dialogType) {
+    private void resumeTypeInternal(@ModalDialogType int dialogType) {
+        if (mTokenHolders.get(dialogType).hasTokens()) return;
         mSuspendedTypes.remove(dialogType);
         if (!isShowing()) showNextDialog();
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java b/ui/android/java/src/org/chromium/ui/util/TokenHolder.java
similarity index 72%
rename from chrome/android/java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java
rename to ui/android/java/src/org/chromium/ui/util/TokenHolder.java
index d07674c..b5124e62 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java
+++ b/ui/android/java/src/org/chromium/ui/util/TokenHolder.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser.fullscreen;
+package org.chromium.ui.util;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -11,7 +11,10 @@
  * Helper class for holding tokens, useful when multiple entities need to manipulate the same
  * boolean state, e.g. visibility of a view.
  */
-class TokenHolder {
+public class TokenHolder {
+    /** An invalid token; this can be used to indicate no token is being held. */
+    public static final int INVALID_TOKEN = -1;
+
     private int mNextToken;
 
     private final Set<Integer> mAcquiredTokens = new HashSet<>();
@@ -20,28 +23,28 @@
     /**
      * @param callback is run when the token set becomes empty or non-empty.
      */
-    TokenHolder(Runnable callback) {
+    public TokenHolder(Runnable callback) {
         mCallback = callback;
     }
 
-    int acquireToken() {
+    public int acquireToken() {
         int token = mNextToken++;
         mAcquiredTokens.add(token);
         if (mAcquiredTokens.size() == 1) mCallback.run();
         return token;
     }
 
-    void releaseToken(int token) {
+    public void releaseToken(int token) {
         if (mAcquiredTokens.remove(token) && mAcquiredTokens.isEmpty()) {
             mCallback.run();
         }
     }
 
-    boolean hasTokens() {
+    public boolean hasTokens() {
         return !mAcquiredTokens.isEmpty();
     }
 
-    boolean containsOnly(int token) {
+    public boolean containsOnly(int token) {
         return mAcquiredTokens.size() == 1 && mAcquiredTokens.contains(token);
     }
 }
diff --git a/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java b/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java
index 3980d5b..0e7e800f 100644
--- a/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java
+++ b/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java
@@ -369,12 +369,12 @@
         mModalDialogManager.showDialog(mDialogModels.get(2), ModalDialogType.TAB);
 
         // Suspend all tab modal dialogs.
-        mModalDialogManager.suspendType(ModalDialogType.TAB);
+        int token = mModalDialogManager.suspendType(ModalDialogType.TAB);
         assertFalse(mModalDialogManager.isShowing());
         assertEquals(3, mModalDialogManager.getPendingDialogsForTest(ModalDialogType.TAB).size());
 
         // Resume tab modal dialogs.
-        mModalDialogManager.resumeType(ModalDialogType.TAB);
+        mModalDialogManager.resumeType(ModalDialogType.TAB, token);
         assertEquals(mDialogModels.get(0), mModalDialogManager.getCurrentDialogForTest());
         assertEquals(2, mModalDialogManager.getPendingDialogsForTest(ModalDialogType.TAB).size());
     }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java b/ui/android/junit/src/org/chromium/ui/util/TokenHolderTest.java
similarity index 97%
rename from chrome/android/junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java
rename to ui/android/junit/src/org/chromium/ui/util/TokenHolderTest.java
index 0d70c13..f278466 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java
+++ b/ui/android/junit/src/org/chromium/ui/util/TokenHolderTest.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser.fullscreen;
+package org.chromium.ui.util;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/ui/base/clipboard/BUILD.gn b/ui/base/clipboard/BUILD.gn
index 838a4e3..3e3752a 100644
--- a/ui/base/clipboard/BUILD.gn
+++ b/ui/base/clipboard/BUILD.gn
@@ -72,6 +72,7 @@
 
   deps = [
     "//base",
+    "//mojo/public/cpp/base",
     "//net",
     "//skia",
     "//ui/events/platform",
diff --git a/ui/base/clipboard/DEPS b/ui/base/clipboard/DEPS
index a7ba89bc..0560dac4 100644
--- a/ui/base/clipboard/DEPS
+++ b/ui/base/clipboard/DEPS
@@ -1,7 +1,8 @@
 include_rules = [
-  "-ui/ozone/*",
-  "+ui/base/ui_base_jni_headers",
+  "+mojo/public/cpp/base",
   "+third_party/mozilla",
+  "+ui/base/ui_base_jni_headers",
+  "-ui/ozone/*",
   "+ui/ozone/buildflags.h",
   "+ui/ozone/public/ozone_platform.h",
   "+ui/ozone/public/platform_clipboard.h",
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc
index 9ac9299d..a123197 100644
--- a/ui/base/clipboard/clipboard.cc
+++ b/ui/base/clipboard/clipboard.cc
@@ -99,19 +99,23 @@
 
 void Clipboard::ClearLastModifiedTime() {}
 
-void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) {
+Clipboard::Clipboard() = default;
+Clipboard::~Clipboard() = default;
+
+void Clipboard::DispatchPortableRepresentation(PortableFormat format,
+                                               const ObjectMapParams& params) {
   // Ignore writes with empty parameters.
   for (const auto& param : params) {
     if (param.empty())
       return;
   }
 
-  switch (type) {
-    case ObjectType::kText:
+  switch (format) {
+    case PortableFormat::kText:
       WriteText(&(params[0].front()), params[0].size());
       break;
 
-    case ObjectType::kHtml:
+    case PortableFormat::kHtml:
       if (params.size() == 2) {
         if (params[1].empty())
           return;
@@ -122,20 +126,20 @@
       }
       break;
 
-    case ObjectType::kRtf:
+    case PortableFormat::kRtf:
       WriteRTF(&(params[0].front()), params[0].size());
       break;
 
-    case ObjectType::kBookmark:
+    case PortableFormat::kBookmark:
       WriteBookmark(&(params[0].front()), params[0].size(),
                     &(params[1].front()), params[1].size());
       break;
 
-    case ObjectType::kWebkit:
+    case PortableFormat::kWebkit:
       WriteWebSmartPaste();
       break;
 
-    case ObjectType::kBitmap: {
+    case PortableFormat::kBitmap: {
       // Usually, the params are just UTF-8 strings. However, for images,
       // ScopedClipboardWriter actually sizes the buffer to sizeof(SkBitmap*),
       // aliases the contents of the vector to a SkBitmap**, and writes the
@@ -145,7 +149,7 @@
       break;
     }
 
-    case ObjectType::kData:
+    case PortableFormat::kData:
       WriteData(ClipboardFormatType::Deserialize(
                     std::string(&(params[0].front()), params[0].size())),
                 &(params[1].front()), params[1].size());
@@ -156,6 +160,15 @@
   }
 }
 
+void Clipboard::DispatchPlatformRepresentations(
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  for (const auto& representation : platform_representations) {
+    WriteData(ClipboardFormatType::GetType(representation.format),
+              reinterpret_cast<const char*>(representation.data.data()),
+              representation.data.size());
+  }
+}
+
 base::PlatformThreadId Clipboard::GetAndValidateThreadID() {
   ClipboardMapLock().AssertAcquired();
 
diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h
index 5857b7d..6e1d1d1 100644
--- a/ui/base/clipboard/clipboard.h
+++ b/ui/base/clipboard/clipboard.h
@@ -24,6 +24,7 @@
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "mojo/public/cpp/base/big_buffer.h"
 #include "ui/base/clipboard/clipboard_buffer.h"
 #include "ui/base/clipboard/clipboard_format_type.h"
 
@@ -36,7 +37,7 @@
 // Clipboard:
 // - reads from and writes to the system clipboard.
 // - specifies an ordering in which to write types to the clipboard
-//   (see |ObjectType|).
+//   (see PortableFormat).
 // - is generalized for all targets/operating systems.
 class COMPONENT_EXPORT(BASE_CLIPBOARD) Clipboard : public base::ThreadChecker {
  public:
@@ -157,17 +158,12 @@
   virtual void ClearLastModifiedTime();
 
  protected:
-  static Clipboard* Create();
-
-  Clipboard() = default;
-  virtual ~Clipboard() = default;
-
-  // ObjectType designates the type of data to be stored in the clipboard. This
-  // designation is shared across all OSes. The system-specific designation
-  // is defined by ClipboardFormatType. A single ObjectType might be represented
-  // by several system-specific ClipboardFormatTypes. For example, on Linux the
-  // kText ObjectType maps to "text/plain", "STRING", and several other
-  // formats. On windows it maps to CF_UNICODETEXT.
+  // PortableFormat designates the type of data to be stored in the clipboard.
+  // This designation is shared across all OSes. The system-specific designation
+  // is defined by ClipboardFormatType. A single PortableFormat might be
+  // represented by several system-specific ClipboardFormatTypes. For example,
+  // on Linux the kText PortableFormat maps to "text/plain", "STRING", and
+  // several other formats. On windows it maps to CF_UNICODETEXT.
   //
   // The order below is the order in which data will be written to the
   // clipboard, so more specific types must be listed before less specific
@@ -175,7 +171,7 @@
   // clipboard to contain a bitmap, HTML markup representing the image, a URL to
   // the image, and the image's alt text. Having the types follow this order
   // maximizes the amount of data that can be extracted by various programs.
-  enum class ObjectType {
+  enum class PortableFormat {
     kBitmap,  // Bitmap from shared memory.
     kHtml,
     kRtf,
@@ -185,8 +181,9 @@
     kData,  // Arbitrary block of bytes.
   };
 
-  // ObjectMap is a map from ObjectType to associated data.
-  // The data is organized differently for each ObjectType. The following
+  // TODO (https://crbug.com/994928): Rename ObjectMap-related types.
+  // ObjectMap is a map from PortableFormat to associated data.
+  // The data is organized differently for each PortableFormat. The following
   // table summarizes what kind of data is stored for each key.
   // * indicates an optional argument.
   //
@@ -194,7 +191,7 @@
   // -------------------------------------
   // kBitmap    bitmap       A pointer to a SkBitmap. The caller must ensure
   //                         the SkBitmap remains live for the duration of
-  //                         the WriteObjects call.
+  //                         the WritePortableRepresentations call.
   // kHtml      html         char array
   //            url*         char array
   // kRtf       data         byte array
@@ -206,14 +203,42 @@
   //            data         byte array
   using ObjectMapParam = std::vector<char>;
   using ObjectMapParams = std::vector<ObjectMapParam>;
-  using ObjectMap = base::flat_map<ObjectType, ObjectMapParams>;
+  using ObjectMap = base::flat_map<PortableFormat, ObjectMapParams>;
+
+  // PlatformRepresentation is used for DispatchPlatformRepresentations, and
+  // supports writing directly to the system clipboard, without custom type
+  // mapping per platform.
+  struct PlatformRepresentation {
+    std::string format;
+    // BigBuffer shared memory is still writable from the renderer when backed
+    // by shared memory, so PlatformRepresentation's data.data() must not be
+    // branched on, and *data.data() must not be accessed, except to copy it
+    // into private memory.
+    mojo_base::BigBuffer data;
+  };
+
+  static Clipboard* Create();
+
+  Clipboard();
+  virtual ~Clipboard();
 
   // Write a bunch of objects to the system clipboard. Copies are made of the
   // contents of |objects|.
-  virtual void WriteObjects(ClipboardBuffer buffer,
-                            const ObjectMap& objects) = 0;
+  virtual void WritePortableRepresentations(ClipboardBuffer buffer,
+                                            const ObjectMap& objects) = 0;
+  // Write |platform_representations|, in the order of their appearance in
+  // |platform_representations|.
+  virtual void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation>
+          platform_representations) = 0;
 
-  void DispatchObject(ObjectType type, const ObjectMapParams& params);
+  void DispatchPortableRepresentation(PortableFormat format,
+                                      const ObjectMapParams& params);
+
+  // Write directly to the system clipboard.
+  void DispatchPlatformRepresentations(
+      std::vector<Clipboard::PlatformRepresentation> platform_representations);
 
   virtual void WriteText(const char* text_data, size_t text_len) = 0;
 
@@ -233,12 +258,15 @@
 
   virtual void WriteBitmap(const SkBitmap& bitmap) = 0;
 
+  // |data_data| is shared memory, and is still writable from the renderer.
+  // Therefore, |data_data| must not be branched on, and *|data_data| must not
+  // be accessed, except to copy it into private memory.
   virtual void WriteData(const ClipboardFormatType& format,
                          const char* data_data,
                          size_t data_len) = 0;
 
  private:
-  // For access to WriteObjects().
+  // For access to WritePortableRepresentations().
   friend class ForwardingTestingClipboard;
   friend class ScopedClipboardWriter;
   friend class TestClipboard;
diff --git a/ui/base/clipboard/clipboard_android.cc b/ui/base/clipboard/clipboard_android.cc
index 8b62e3a..1568d04 100644
--- a/ui/base/clipboard/clipboard_android.cc
+++ b/ui/base/clipboard/clipboard_android.cc
@@ -175,6 +175,7 @@
     Java_Clipboard_setText(env, clipboard_manager_, str);
   } else {
     Java_Clipboard_clear(env, clipboard_manager_);
+    // TODO(huangdarwin): Implement raw clipboard support for arbitrary formats.
     NOTIMPLEMENTED();
   }
   map_state_ = MapState::kUpToDate;
@@ -431,14 +432,26 @@
 }
 
 // Main entry point used to write several values in the clipboard.
-void ClipboardAndroid::WriteObjects(ClipboardBuffer buffer,
-                                    const ObjectMap& objects) {
+void ClipboardAndroid::WritePortableRepresentations(ClipboardBuffer buffer,
+                                                    const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste);
   g_map.Get().Clear();
 
   for (const auto& object : objects)
-    DispatchObject(object.first, object.second);
+    DispatchPortableRepresentation(object.first, object.second);
+
+  g_map.Get().CommitToAndroidClipboard();
+}
+
+void ClipboardAndroid::WritePlatformRepresentations(
+    ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  DCHECK(CalledOnValidThread());
+  DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste);
+  g_map.Get().Clear();
+
+  DispatchPlatformRepresentations(std::move(platform_representations));
 
   g_map.Get().CommitToAndroidClipboard();
 }
diff --git a/ui/base/clipboard/clipboard_android.h b/ui/base/clipboard/clipboard_android.h
index c127416..cc149697 100644
--- a/ui/base/clipboard/clipboard_android.h
+++ b/ui/base/clipboard/clipboard_android.h
@@ -83,7 +83,12 @@
                 std::string* result) const override;
   base::Time GetLastModifiedTime() const override;
   void ClearLastModifiedTime() override;
-  void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override;
+  void WritePortableRepresentations(ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_aura.cc b/ui/base/clipboard/clipboard_aura.cc
index 9437c38..f592bbfa 100644
--- a/ui/base/clipboard/clipboard_aura.cc
+++ b/ui/base/clipboard/clipboard_aura.cc
@@ -543,12 +543,23 @@
   clipboard_internal_->ReadData(format.ToString(), result);
 }
 
-void ClipboardAura::WriteObjects(ClipboardBuffer buffer,
-                                 const ObjectMap& objects) {
+void ClipboardAura::WritePortableRepresentations(ClipboardBuffer buffer,
+                                                 const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardBuffer(buffer));
   for (const auto& object : objects)
-    DispatchObject(object.first, object.second);
+    DispatchPortableRepresentation(object.first, object.second);
+  ClipboardDataBuilder::CommitToClipboard(clipboard_internal_.get());
+}
+
+void ClipboardAura::WritePlatformRepresentations(
+    ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  DCHECK(CalledOnValidThread());
+  DCHECK(IsSupportedClipboardBuffer(buffer));
+
+  DispatchPlatformRepresentations(std::move(platform_representations));
+
   ClipboardDataBuilder::CommitToClipboard(clipboard_internal_.get());
 }
 
diff --git a/ui/base/clipboard/clipboard_aura.h b/ui/base/clipboard/clipboard_aura.h
index 1d879f0..39718a3 100644
--- a/ui/base/clipboard/clipboard_aura.h
+++ b/ui/base/clipboard/clipboard_aura.h
@@ -46,7 +46,12 @@
   void ReadBookmark(base::string16* title, std::string* url) const override;
   void ReadData(const ClipboardFormatType& format,
                 std::string* result) const override;
-  void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override;
+  void WritePortableRepresentations(ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_format_type_win.cc b/ui/base/clipboard/clipboard_format_type_win.cc
index 84404d1..8b3d0ee 100644
--- a/ui/base/clipboard/clipboard_format_type_win.cc
+++ b/ui/base/clipboard/clipboard_format_type_win.cc
@@ -52,6 +52,8 @@
 ClipboardFormatType ClipboardFormatType::Deserialize(
     const std::string& serialization) {
   int clipboard_format = -1;
+  // |serialization| is expected to be a string representing the Windows
+  // data_.cfFormat (format number) returned by GetType.
   if (!base::StringToInt(serialization, &clipboard_format)) {
     NOTREACHED();
     return ClipboardFormatType();
diff --git a/ui/base/clipboard/clipboard_mac.h b/ui/base/clipboard/clipboard_mac.h
index a33445f..a5f86e28 100644
--- a/ui/base/clipboard/clipboard_mac.h
+++ b/ui/base/clipboard/clipboard_mac.h
@@ -54,7 +54,12 @@
   void ReadBookmark(base::string16* title, std::string* url) const override;
   void ReadData(const ClipboardFormatType& format,
                 std::string* result) const override;
-  void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override;
+  void WritePortableRepresentations(ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm
index ba36331..10c9480 100644
--- a/ui/base/clipboard/clipboard_mac.mm
+++ b/ui/base/clipboard/clipboard_mac.mm
@@ -273,18 +273,28 @@
     result->assign(static_cast<const char*>([data bytes]), [data length]);
 }
 
-void ClipboardMac::WriteObjects(ClipboardBuffer buffer,
-                                const ObjectMap& objects) {
+void ClipboardMac::WritePortableRepresentations(ClipboardBuffer buffer,
+                                                const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste);
 
   NSPasteboard* pb = GetPasteboard();
   [pb declareTypes:@[] owner:nil];
 
-  for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end();
-       ++iter) {
-    DispatchObject(iter->first, iter->second);
-  }
+  for (const auto& object : objects)
+    DispatchPortableRepresentation(object.first, object.second);
+}
+
+void ClipboardMac::WritePlatformRepresentations(
+    ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  DCHECK(CalledOnValidThread());
+  DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste);
+
+  NSPasteboard* pb = GetPasteboard();
+  [pb declareTypes:@[] owner:nil];
+
+  DispatchPlatformRepresentations(std::move(platform_representations));
 }
 
 void ClipboardMac::WriteText(const char* text_data, size_t text_len) {
diff --git a/ui/base/clipboard/clipboard_ozone.cc b/ui/base/clipboard/clipboard_ozone.cc
index 096e98e..f24c5cf 100644
--- a/ui/base/clipboard/clipboard_ozone.cc
+++ b/ui/base/clipboard/clipboard_ozone.cc
@@ -458,19 +458,19 @@
   result->assign(clipboard_data.begin(), clipboard_data.end());
 }
 
-void ClipboardOzone::WriteObjects(ClipboardBuffer buffer,
-                                  const ObjectMap& objects) {
+void ClipboardOzone::WritePortableRepresentations(ClipboardBuffer buffer,
+                                                  const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
 
   for (const auto& object : objects)
-    DispatchObject(static_cast<ObjectType>(object.first), object.second);
+    DispatchPortableRepresentation(object.first, object.second);
 
   async_clipboard_ozone_->OfferData(buffer);
 
   // Just like Aura/X11 implementation does, copy text data from the copy/paste
   // selection to the primary selection.
   if (buffer == ClipboardBuffer::kCopyPaste) {
-    auto text_iter = objects.find(ObjectType::kText);
+    auto text_iter = objects.find(PortableFormat::kText);
     if (text_iter != objects.end()) {
       const ObjectMapParams& params_vector = text_iter->second;
       if (params_vector.size()) {
@@ -488,6 +488,15 @@
   }
 }
 
+void ClipboardOzone::WritePlatformRepresentations(
+    ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  DCHECK(CalledOnValidThread());
+  DispatchPlatformRepresentations(std::move(platform_representations));
+
+  async_clipboard_ozone_->OfferData(buffer);
+}
+
 void ClipboardOzone::WriteText(const char* text_data, size_t text_len) {
   std::vector<uint8_t> data(text_data, text_data + text_len);
   async_clipboard_ozone_->InsertData(std::move(data), kMimeTypeText);
@@ -537,7 +546,7 @@
                                const char* data_data,
                                size_t data_len) {
   std::vector<uint8_t> data(data_data, data_data + data_len);
-  async_clipboard_ozone_->InsertData(data, format.ToString());
+  async_clipboard_ozone_->InsertData(std::move(data), format.ToString());
 }
 
 }  // namespace ui
diff --git a/ui/base/clipboard/clipboard_ozone.h b/ui/base/clipboard/clipboard_ozone.h
index 56c1ebd..8dcdddb3 100644
--- a/ui/base/clipboard/clipboard_ozone.h
+++ b/ui/base/clipboard/clipboard_ozone.h
@@ -48,7 +48,12 @@
   void ReadBookmark(base::string16* title, std::string* url) const override;
   void ReadData(const ClipboardFormatType& format,
                 std::string* result) const override;
-  void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override;
+  void WritePortableRepresentations(ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_test_template.h b/ui/base/clipboard/clipboard_test_template.h
index f93d31f..59d4591 100644
--- a/ui/base/clipboard/clipboard_test_template.h
+++ b/ui/base/clipboard/clipboard_test_template.h
@@ -522,7 +522,7 @@
 
 }  // namespace
 
-TYPED_TEST(ClipboardTest, DataTest) {
+TYPED_TEST(ClipboardTest, PickleTest) {
   const ui::ClipboardFormatType kFormat =
       ui::ClipboardFormatType::GetType("chromium/x-test-format");
   std::string payload("test string");
@@ -547,7 +547,7 @@
   EXPECT_EQ(payload, unpickled_string);
 }
 
-TYPED_TEST(ClipboardTest, MultipleDataTest) {
+TYPED_TEST(ClipboardTest, MultiplePickleTest) {
   const ui::ClipboardFormatType kFormat1 =
       ui::ClipboardFormatType::GetType("chromium/x-test-format1");
   std::string payload1("test string1");
@@ -567,6 +567,8 @@
     clipboard_writer.WritePickledData(write_pickle2, kFormat2);
   }
 
+  ASSERT_FALSE(this->clipboard().IsFormatAvailable(
+      kFormat1, ClipboardBuffer::kCopyPaste));
   ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat2,
                                                   ClipboardBuffer::kCopyPaste));
 
@@ -590,6 +592,8 @@
 
   ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat1,
                                                   ClipboardBuffer::kCopyPaste));
+  ASSERT_FALSE(this->clipboard().IsFormatAvailable(
+      kFormat2, ClipboardBuffer::kCopyPaste));
 
   // Check string 1.
   std::string output1;
@@ -603,6 +607,74 @@
   EXPECT_EQ(payload1, unpickled_string1);
 }
 
+TYPED_TEST(ClipboardTest, DataTest) {
+  const std::string kFormatString = "chromium/x-test-format";
+  const ui::ClipboardFormatType kFormat =
+      ui::ClipboardFormatType::GetType(kFormatString);
+  const std::string payload = "test string";
+  base::span<const uint8_t> payload_span(
+      reinterpret_cast<const uint8_t*>(payload.data()), payload.size());
+
+  {
+    ScopedClipboardWriter clipboard_writer(ClipboardBuffer::kCopyPaste);
+    clipboard_writer.WriteData(UTF8ToUTF16(kFormatString),
+                               mojo_base::BigBuffer(payload_span));
+  }
+
+  ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat,
+                                                  ClipboardBuffer::kCopyPaste));
+  std::string output;
+  this->clipboard().ReadData(kFormat, &output);
+
+  EXPECT_EQ(payload, output);
+}
+
+// TODO(huangdarwin): Implement multiple raw types for AuraClipboard. This test
+// currently doesn't run on AuraClipboard because AuraClipboard only supports
+// one raw type.
+#if (!defined(USE_AURA) || defined(OS_WIN) || defined(USE_OZONE) || \
+     defined(USE_X11)) &&                                           \
+    !defined(OS_CHROMEOS)
+TYPED_TEST(ClipboardTest, MultipleDataTest) {
+  const std::string kFormatString1 = "chromium/x-test-format1";
+  const ui::ClipboardFormatType kFormat1 =
+      ui::ClipboardFormatType::GetType(kFormatString1);
+  const std::string payload1("test string1");
+  base::span<const uint8_t> payload_span1(
+      reinterpret_cast<const uint8_t*>(payload1.data()), payload1.size());
+
+  const std::string kFormatString2 = "chromium/x-test-format2";
+  const ui::ClipboardFormatType kFormat2 =
+      ui::ClipboardFormatType::GetType(kFormatString2);
+  const std::string payload2("test string2");
+  base::span<const uint8_t> payload_span2(
+      reinterpret_cast<const uint8_t*>(payload2.data()), payload2.size());
+
+  {
+    ScopedClipboardWriter clipboard_writer(ClipboardBuffer::kCopyPaste);
+    // Both payloads should write successfully and not overwrite one another.
+    clipboard_writer.WriteData(UTF8ToUTF16(kFormatString1),
+                               mojo_base::BigBuffer(payload_span1));
+    clipboard_writer.WriteData(UTF8ToUTF16(kFormatString2),
+                               mojo_base::BigBuffer(payload_span2));
+  }
+
+  // Check format 1.
+  ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat1,
+                                                  ClipboardBuffer::kCopyPaste));
+  std::string output1;
+  this->clipboard().ReadData(kFormat1, &output1);
+  EXPECT_EQ(payload1, output1);
+
+  // Check format 2.
+  ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat2,
+                                                  ClipboardBuffer::kCopyPaste));
+  std::string output2;
+  this->clipboard().ReadData(kFormat2, &output2);
+  EXPECT_EQ(payload2, output2);
+}
+#endif
+
 #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
 TYPED_TEST(ClipboardTest, HyperlinkTest) {
   const std::string kTitle("The <Example> Company's \"home page\"");
diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc
index 34c13c2..00a096c 100644
--- a/ui/base/clipboard/clipboard_win.cc
+++ b/ui/base/clipboard/clipboard_win.cc
@@ -557,8 +557,8 @@
   ::GlobalUnlock(data);
 }
 
-void ClipboardWin::WriteObjects(ClipboardBuffer buffer,
-                                const ObjectMap& objects) {
+void ClipboardWin::WritePortableRepresentations(ClipboardBuffer buffer,
+                                                const ObjectMap& objects) {
   DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste);
 
   ScopedClipboard clipboard;
@@ -568,7 +568,21 @@
   ::EmptyClipboard();
 
   for (const auto& object : objects)
-    DispatchObject(object.first, object.second);
+    DispatchPortableRepresentation(object.first, object.second);
+}
+
+void ClipboardWin::WritePlatformRepresentations(
+    ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste);
+
+  ScopedClipboard clipboard;
+  if (!clipboard.Acquire(GetClipboardWindow()))
+    return;
+
+  ::EmptyClipboard();
+
+  DispatchPlatformRepresentations(std::move(platform_representations));
 }
 
 void ClipboardWin::WriteText(const char* text_data, size_t text_len) {
diff --git a/ui/base/clipboard/clipboard_win.h b/ui/base/clipboard/clipboard_win.h
index c9fe938a..a6ae530 100644
--- a/ui/base/clipboard/clipboard_win.h
+++ b/ui/base/clipboard/clipboard_win.h
@@ -57,7 +57,12 @@
   void ReadBookmark(base::string16* title, std::string* url) const override;
   void ReadData(const ClipboardFormatType& format,
                 std::string* result) const override;
-  void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override;
+  void WritePortableRepresentations(ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
@@ -73,7 +78,6 @@
   void WriteData(const ClipboardFormatType& format,
                  const char* data_data,
                  size_t data_len) override;
-
   void WriteBitmapFromHandle(HBITMAP source_hbitmap, const gfx::Size& size);
 
   // Safely write to system clipboard. Free |handle| on failure.
diff --git a/ui/base/clipboard/clipboard_x11.cc b/ui/base/clipboard/clipboard_x11.cc
index 6870873a..7a1155d 100644
--- a/ui/base/clipboard/clipboard_x11.cc
+++ b/ui/base/clipboard/clipboard_x11.cc
@@ -679,18 +679,18 @@
     data.AssignTo(result);
 }
 
-void ClipboardX11::WriteObjects(ClipboardBuffer buffer,
-                                const ObjectMap& objects) {
+void ClipboardX11::WritePortableRepresentations(ClipboardBuffer buffer,
+                                                const ObjectMap& objects) {
   DCHECK(CalledOnValidThread());
   DCHECK(IsSupportedClipboardBuffer(buffer));
 
   x11_details_->CreateNewClipboardData();
   for (const auto& object : objects)
-    DispatchObject(object.first, object.second);
+    DispatchPortableRepresentation(object.first, object.second);
   x11_details_->TakeOwnershipOfSelection(buffer);
 
   if (buffer == ClipboardBuffer::kCopyPaste) {
-    auto text_iter = objects.find(ObjectType::kText);
+    auto text_iter = objects.find(PortableFormat::kText);
     if (text_iter != objects.end()) {
       x11_details_->CreateNewClipboardData();
       const ObjectMapParams& params_vector = text_iter->second;
@@ -704,6 +704,17 @@
   }
 }
 
+void ClipboardX11::WritePlatformRepresentations(
+    ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  DCHECK(CalledOnValidThread());
+  DCHECK(IsSupportedClipboardBuffer(buffer));
+
+  x11_details_->CreateNewClipboardData();
+  DispatchPlatformRepresentations(std::move(platform_representations));
+  x11_details_->TakeOwnershipOfSelection(buffer);
+}
+
 void ClipboardX11::WriteText(const char* text_data, size_t text_len) {
   std::string str(text_data, text_len);
   scoped_refptr<base::RefCountedMemory> mem(
diff --git a/ui/base/clipboard/clipboard_x11.h b/ui/base/clipboard/clipboard_x11.h
index 32e16c3..f348eff 100644
--- a/ui/base/clipboard/clipboard_x11.h
+++ b/ui/base/clipboard/clipboard_x11.h
@@ -47,7 +47,12 @@
   void ReadBookmark(base::string16* title, std::string* url) const override;
   void ReadData(const ClipboardFormatType& format,
                 std::string* result) const override;
-  void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override;
+  void WritePortableRepresentations(ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
diff --git a/ui/base/clipboard/scoped_clipboard_writer.cc b/ui/base/clipboard/scoped_clipboard_writer.cc
index f64398c..aea904e 100644
--- a/ui/base/clipboard/scoped_clipboard_writer.cc
+++ b/ui/base/clipboard/scoped_clipboard_writer.cc
@@ -18,8 +18,19 @@
     : buffer_(buffer) {}
 
 ScopedClipboardWriter::~ScopedClipboardWriter() {
-  if (!objects_.empty())
-    Clipboard::GetForCurrentThread()->WriteObjects(buffer_, objects_);
+  static constexpr size_t kMaxRepresentations = 1 << 12;
+  DCHECK(objects_.empty() || platform_representations_.empty())
+      << "Portable and Platform representations should not be written on the "
+         "same write.";
+  DCHECK(platform_representations_.size() < kMaxRepresentations);
+  if (!objects_.empty()) {
+    Clipboard::GetForCurrentThread()->WritePortableRepresentations(buffer_,
+                                                                   objects_);
+  }
+  if (!platform_representations_.empty()) {
+    Clipboard::GetForCurrentThread()->WritePlatformRepresentations(
+        buffer_, std::move(platform_representations_));
+  }
 }
 
 void ScopedClipboardWriter::WriteText(const base::string16& text) {
@@ -28,7 +39,7 @@
   Clipboard::ObjectMapParams parameters;
   parameters.push_back(
       Clipboard::ObjectMapParam(utf8_text.begin(), utf8_text.end()));
-  objects_[Clipboard::ObjectType::kText] = parameters;
+  objects_[Clipboard::PortableFormat::kText] = parameters;
 }
 
 void ScopedClipboardWriter::WriteHTML(const base::string16& markup,
@@ -44,14 +55,14 @@
                                                    source_url.end()));
   }
 
-  objects_[Clipboard::ObjectType::kHtml] = parameters;
+  objects_[Clipboard::PortableFormat::kHtml] = parameters;
 }
 
 void ScopedClipboardWriter::WriteRTF(const std::string& rtf_data) {
   Clipboard::ObjectMapParams parameters;
   parameters.push_back(Clipboard::ObjectMapParam(rtf_data.begin(),
                                                  rtf_data.end()));
-  objects_[Clipboard::ObjectType::kRtf] = parameters;
+  objects_[Clipboard::PortableFormat::kRtf] = parameters;
 }
 
 void ScopedClipboardWriter::WriteBookmark(const base::string16& bookmark_title,
@@ -65,7 +76,7 @@
   parameters.push_back(Clipboard::ObjectMapParam(utf8_markup.begin(),
                                                  utf8_markup.end()));
   parameters.push_back(Clipboard::ObjectMapParam(url.begin(), url.end()));
-  objects_[Clipboard::ObjectType::kBookmark] = parameters;
+  objects_[Clipboard::PortableFormat::kBookmark] = parameters;
 }
 
 void ScopedClipboardWriter::WriteHyperlink(const base::string16& anchor_text,
@@ -83,7 +94,7 @@
 }
 
 void ScopedClipboardWriter::WriteWebSmartPaste() {
-  objects_[Clipboard::ObjectType::kWebkit] = Clipboard::ObjectMapParams();
+  objects_[Clipboard::PortableFormat::kWebkit] = Clipboard::ObjectMapParams();
 }
 
 void ScopedClipboardWriter::WriteImage(const SkBitmap& bitmap) {
@@ -100,7 +111,7 @@
   *reinterpret_cast<SkBitmap**>(&*packed_pointer.begin()) = bitmap_pointer;
   Clipboard::ObjectMapParams parameters;
   parameters.push_back(packed_pointer);
-  objects_[Clipboard::ObjectType::kBitmap] = parameters;
+  objects_[Clipboard::PortableFormat::kBitmap] = parameters;
 }
 
 void ScopedClipboardWriter::WritePickledData(
@@ -118,21 +129,26 @@
   Clipboard::ObjectMapParams parameters;
   parameters.push_back(format_parameter);
   parameters.push_back(data_parameter);
-  objects_[Clipboard::ObjectType::kData] = parameters;
+  objects_[Clipboard::PortableFormat::kData] = parameters;
 }
 
-void ScopedClipboardWriter::WriteData(const std::string& type,
-                                      const std::string& data) {
-  Clipboard::ObjectMapParam type_parameter(type.begin(), type.end());
-  Clipboard::ObjectMapParam data_parameter(data.begin(), data.end());
-  Clipboard::ObjectMapParams parameters;
-  parameters.push_back(type_parameter);
-  parameters.push_back(data_parameter);
-  objects_[Clipboard::ObjectType::kData] = parameters;
+void ScopedClipboardWriter::WriteData(const base::string16& format,
+                                      mojo_base::BigBuffer data) {
+  // Conservative limit to maximum format and data string size, to avoid
+  // potential attacks with long strings. Callers should implement similar
+  // checks.
+  constexpr size_t kMaxFormatSize = 1024;
+  constexpr size_t kMaxDataSize = 1 << 30;  // 1 GB
+  DCHECK_LT(format.size(), kMaxFormatSize);
+  DCHECK_LT(data.size(), kMaxDataSize);
+
+  platform_representations_.push_back(
+      {base::UTF16ToUTF8(format), std::move(data)});
 }
 
 void ScopedClipboardWriter::Reset() {
   objects_.clear();
+  platform_representations_.clear();
   bitmap_.reset();
 }
 
diff --git a/ui/base/clipboard/scoped_clipboard_writer.h b/ui/base/clipboard/scoped_clipboard_writer.h
index 506ee4d..741de36 100644
--- a/ui/base/clipboard/scoped_clipboard_writer.h
+++ b/ui/base/clipboard/scoped_clipboard_writer.h
@@ -61,8 +61,9 @@
   void WritePickledData(const base::Pickle& pickle,
                         const ClipboardFormatType& format);
 
-  // Adds custom data to clipboard.
-  void WriteData(const std::string& type, const std::string& data);
+  // Data is written to the system clipboard in the same order as WriteData
+  // calls are received.
+  void WriteData(const base::string16& format, mojo_base::BigBuffer data);
 
   void WriteImage(const SkBitmap& bitmap);
 
@@ -71,9 +72,13 @@
 
  private:
   // We accumulate the data passed to the various targets in the |objects_|
-  // vector, and pass it to Clipboard::WriteObjects() during object destruction.
+  // vector, and pass it to Clipboard::WritePortableRepresentations() during
+  // object destruction.
   Clipboard::ObjectMap objects_;
 
+  std::vector<Clipboard::PlatformRepresentation> platform_representations_;
+
+  // The type is set at construction, and can be changed before committing.
   const ClipboardBuffer buffer_;
 
   SkBitmap bitmap_;
@@ -84,4 +89,3 @@
 }  // namespace ui
 
 #endif  // UI_BASE_CLIPBOARD_SCOPED_CLIPBOARD_WRITER_H_
-
diff --git a/ui/base/clipboard/test/test_clipboard.cc b/ui/base/clipboard/test/test_clipboard.cc
index 55746f6..abe2cb5 100644
--- a/ui/base/clipboard/test/test_clipboard.cc
+++ b/ui/base/clipboard/test/test_clipboard.cc
@@ -149,12 +149,21 @@
   last_modified_time_ = base::Time();
 }
 
-void TestClipboard::WriteObjects(ClipboardBuffer buffer,
-                                 const ObjectMap& objects) {
+void TestClipboard::WritePortableRepresentations(ClipboardBuffer buffer,
+                                                 const ObjectMap& objects) {
   Clear(buffer);
   default_store_buffer_ = buffer;
   for (const auto& kv : objects)
-    DispatchObject(kv.first, kv.second);
+    DispatchPortableRepresentation(kv.first, kv.second);
+  default_store_buffer_ = ClipboardBuffer::kCopyPaste;
+}
+
+void TestClipboard::WritePlatformRepresentations(
+    ClipboardBuffer buffer,
+    std::vector<Clipboard::PlatformRepresentation> platform_representations) {
+  Clear(buffer);
+  default_store_buffer_ = buffer;
+  DispatchPlatformRepresentations(std::move(platform_representations));
   default_store_buffer_ = ClipboardBuffer::kCopyPaste;
 }
 
diff --git a/ui/base/clipboard/test/test_clipboard.h b/ui/base/clipboard/test/test_clipboard.h
index b89ba4e..4542efc 100644
--- a/ui/base/clipboard/test/test_clipboard.h
+++ b/ui/base/clipboard/test/test_clipboard.h
@@ -58,7 +58,12 @@
                 std::string* result) const override;
   base::Time GetLastModifiedTime() const override;
   void ClearLastModifiedTime() override;
-  void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override;
+  void WritePortableRepresentations(ClipboardBuffer buffer,
+                                    const ObjectMap& objects) override;
+  void WritePlatformRepresentations(
+      ClipboardBuffer buffer,
+      std::vector<Clipboard::PlatformRepresentation> platform_representations)
+      override;
   void WriteText(const char* text_data, size_t text_len) override;
   void WriteHTML(const char* markup_data,
                  size_t markup_len,
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc
index 485b881..7431de3b 100644
--- a/ui/views/controls/button/checkbox.cc
+++ b/ui/views/controls/button/checkbox.cc
@@ -60,6 +60,8 @@
   // Checkboxes always have a focus ring, even when the platform otherwise
   // doesn't generally use them for buttons.
   SetInstallFocusRingOnFocus(true);
+  focus_ring()->SetPathGenerator(
+      std::make_unique<FocusRingHighlightPathGenerator>());
 }
 
 Checkbox::~Checkbox() = default;