diff --git a/DEPS b/DEPS
index 75b8bc09..292807f 100644
--- a/DEPS
+++ b/DEPS
@@ -269,7 +269,7 @@
   # 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': '860c40fee51dd87814b949a967ea77fd34e9fb1c',
+  'skia_revision': '69fecd6c2d852abeaebf8e6b479b45d2eaf47c46',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -277,7 +277,7 @@
   # 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': '580f90c7d33e219f50847ac89f229ff62e539cd5',
+  'angle_revision': 'e56f227d676e3e7b51a971a1dc35d02c16c4db44',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -348,7 +348,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '0f177fcc374f4821623707e6149910203e2f26af',
+  'devtools_frontend_revision': '977cc58cb5654a2b68142ef8ac1b3f9ac2822694',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -741,7 +741,7 @@
     Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248',
 
   'src/docs/website': {
-    'url': Var('chromium_git') + '/website.git' + '@' + 'b6c4996a9afba3f2921d2d72e489521f0201ab8c',
+    'url': Var('chromium_git') + '/website.git' + '@' + 'e20600d94c53d8a6a7ecb9a0173625d954a58949',
   },
 
   'src/ios/third_party/earl_grey2/src': {
@@ -914,7 +914,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': '4Ha7eDDth3WsPxnrW_ERVwW58mNuvLt8WNPyhJ_DpAMC',
+          'version': 'mt-ZF-6_HFdvpVXuaVQwcn_VAafyKXPqDwTExLwF_iwC',
       },
     ],
     'condition': 'checkout_android',
@@ -1110,7 +1110,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '1a40fd23ac85e202145a649b7205fc3f6103d16f',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '08d341808f71e2effb79a8d08b4905cb6429d672',
       'condition': 'checkout_chromeos',
   },
 
@@ -1133,7 +1133,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '7d20ae05d5f2a3ab611dd4b536f33db4ac476284',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'aa7d7e45cd980d13d026c518fafcb4ce7ebd83a1',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1358,7 +1358,7 @@
     Var('chromium_git') + '/external/libaddressinput.git' + '@' + '3b8ee157a8f3536bbf5ad2448e9e3370463c1e40',
 
   'src/third_party/libaom/source/libaom':
-    Var('aomedia_git') + '/aom.git' + '@' +  'ef14518388c0a41c1d3b992f75d5886c9da33832',
+    Var('aomedia_git') + '/aom.git' + '@' +  'a1d676b44f686409b164157a874f95c9e9381a8d',
 
   'src/third_party/libavif/src':
     Var('chromium_git') + '/external/github.com/AOMediaCodec/libavif.git' + '@' + Var('libavif_revision'),
@@ -1702,7 +1702,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'cf04aebdf9b53bb2853f22a81465688daf879ec6',
 
   'src/third_party/webgpu-cts/src':
-    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'f124d76308a1830866c10f69e1e669612dc69b35',
+    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '524b5e7b2c40cce9b8a38ca41fead8495436770a',
 
   'src/third_party/webrtc':
     Var('webrtc_git') + '/src.git' + '@' + '81d65fcf7dbb750af13efb2ef8addb2322a337cb',
@@ -1778,7 +1778,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@cc8e80a0bce4cff3daa6c92bb83e993468414ffa',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f3e58c2b14b74fd627dd23f2b2c3ec6a6a383c59',
     'condition': 'checkout_src_internal',
   },
 
@@ -1808,7 +1808,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'bFdYp_B3xJ8c-mnuvfL1q7fRkYqoORhHWxZEjVuKX0QC',
+        'version': 'cjBBsVUr_AOxm_CDI3o3gZyjz1XBop-6p50yyVScBr4C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index be65042..b82eef6 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -1593,7 +1593,7 @@
                                               'third_party', 'depot_tools',
                                               'gclient.py')
         input_api.subprocess.check_output(
-            [input_api.python_executable, gclient_path, 'verify'],
+            [input_api.python3_executable, gclient_path, 'verify'],
             stderr=input_api.subprocess.STDOUT)
         return []
     except input_api.subprocess.CalledProcessError as error:
@@ -1903,7 +1903,7 @@
                                              'tools', 'checkperms',
                                              'checkperms.py')
     args = [
-        input_api.python_executable, checkperms_tool, '--root',
+        input_api.python3_executable, checkperms_tool, '--root',
         input_api.change.RepositoryRoot()
     ]
     with input_api.CreateTemporaryFile() as file_list:
diff --git a/android_webview/browser/aw_autofill_client.cc b/android_webview/browser/aw_autofill_client.cc
index f2ab1b5..a9cdd3f 100644
--- a/android_webview/browser/aw_autofill_client.cc
+++ b/android_webview/browser/aw_autofill_client.cc
@@ -264,7 +264,7 @@
 }
 
 void AwAutofillClient::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
+    autofill::AutofillDriver* driver,
     const std::vector<autofill::FormStructure*>& forms) {}
 
 void AwAutofillClient::DidFillOrPreviewField(
diff --git a/android_webview/browser/aw_autofill_client.h b/android_webview/browser/aw_autofill_client.h
index 5bcd457..7dde12b0 100644
--- a/android_webview/browser/aw_autofill_client.h
+++ b/android_webview/browser/aw_autofill_client.h
@@ -19,6 +19,7 @@
 
 namespace autofill {
 class AutocompleteHistoryManager;
+class AutofillDriver;
 class AutofillPopupDelegate;
 class CardUnmaskDelegate;
 class CreditCard;
@@ -126,7 +127,7 @@
   bool IsAutocompleteEnabled() override;
   bool IsPasswordManagerEnabled() override;
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
+      autofill::AutofillDriver* driver,
       const std::vector<autofill::FormStructure*>& forms) override;
   void DidFillOrPreviewField(const std::u16string& autofilled_value,
                              const std::u16string& profile_full_name) override;
diff --git a/android_webview/browser/aw_feature_list_creator.cc b/android_webview/browser/aw_feature_list_creator.cc
index 5983fa9..1e71ab47 100644
--- a/android_webview/browser/aw_feature_list_creator.cc
+++ b/android_webview/browser/aw_feature_list_creator.cc
@@ -15,6 +15,7 @@
 #include "android_webview/browser/aw_feature_entries.h"
 #include "android_webview/browser/aw_metrics_service_client_delegate.h"
 #include "android_webview/browser/metrics/aw_metrics_service_client.h"
+#include "android_webview/browser/tracing/aw_tracing_delegate.h"
 #include "android_webview/browser/variations/variations_seed_loader.h"
 #include "android_webview/common/aw_switches.h"
 #include "android_webview/proto/aw_variations_seed.pb.h"
@@ -40,6 +41,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/prefs/pref_service_factory.h"
 #include "components/prefs/segregated_pref_store.h"
+#include "components/tracing/common/pref_names.h"
 #include "components/variations/entropy_provider.h"
 #include "components/variations/pref_names.h"
 #include "components/variations/service/safe_seed_manager.h"
@@ -96,6 +98,9 @@
     // The last time the apps package name allowlist was queried from the
     // component update service, regardless if it was successful or not.
     prefs::kAppPackageNameLoggingRuleLastUpdateTime,
+
+    // The state of the previous background tracing session.
+    tracing::kBackgroundTracingSessionState,
 };
 
 void HandleReadError(PersistentPrefStore::PrefReadError error) {}
@@ -134,6 +139,7 @@
   AwBrowserProcess::RegisterNetworkContextLocalStatePrefs(pref_registry.get());
   AwBrowserProcess::RegisterEnterpriseAuthenticationAppLinkPolicyPref(
       pref_registry.get());
+  AwTracingDelegate::RegisterPrefs(pref_registry.get());
 
   PrefServiceFactory pref_service_factory;
 
diff --git a/android_webview/browser/tracing/aw_tracing_delegate.cc b/android_webview/browser/tracing/aw_tracing_delegate.cc
index 004a36d0..d270791b 100644
--- a/android_webview/browser/tracing/aw_tracing_delegate.cc
+++ b/android_webview/browser/tracing/aw_tracing_delegate.cc
@@ -6,21 +6,69 @@
 
 #include <memory>
 
+#include "android_webview/browser/aw_browser_process.h"
 #include "base/notreached.h"
 #include "base/values.h"
+#include "components/tracing/common/background_tracing_state_manager.h"
+#include "components/tracing/common/background_tracing_utils.h"
+#include "components/tracing/common/pref_names.h"
 #include "components/version_info/version_info.h"
+#include "content/public/browser/background_tracing_config.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 namespace android_webview {
 
+bool IsBackgroundTracingCommandLine() {
+  auto tracing_mode = tracing::GetBackgroundTracingSetupMode();
+  if (tracing_mode == tracing::BackgroundTracingSetupMode::kFromConfigFile ||
+      tracing_mode ==
+          tracing::BackgroundTracingSetupMode::kFromFieldTrialLocalOutput) {
+    return true;
+  }
+  return false;
+}
+
 AwTracingDelegate::AwTracingDelegate() {}
 AwTracingDelegate::~AwTracingDelegate() {}
 
+// static
+void AwTracingDelegate::RegisterPrefs(PrefRegistrySimple* registry) {
+  registry->RegisterDictionaryPref(tracing::kBackgroundTracingSessionState);
+}
+
 bool AwTracingDelegate::IsAllowedToBeginBackgroundScenario(
     const content::BackgroundTracingConfig& config,
     bool requires_anonymized_data) {
-  // Background tracing is allowed in general and can be restricted when
-  // configuring BackgroundTracingManager.
+  // If the background tracing is specified on the command-line, we allow
+  // any scenario to be traced and uploaded.
+  if (IsBackgroundTracingCommandLine())
+    return true;
+
+  // We call Initialize() only when a tracing scenario tries to start, and
+  // unless this happens we never save state. In particular, if the background
+  // tracing experiment is disabled, Initialize() will never be called, and we
+  // will thus not save state. This means that when we save the background
+  // tracing session state for one session, and then later read the state in a
+  // future session, there might have been sessions between these two where
+  // tracing was disabled. Therefore, the return value of
+  // DidLastSessionEndUnexpectedly() might not be for the directly preceding
+  // session, but instead it is the previous session where tracing was enabled.
+  tracing::BackgroundTracingStateManager& state =
+      tracing::BackgroundTracingStateManager::GetInstance();
+  state.Initialize(AwBrowserProcess::GetInstance()->local_state());
+
+  // Don't start a new trace if the previous trace did not end.
+  if (state.DidLastSessionEndUnexpectedly()) {
+    tracing::RecordDisallowedMetric(
+        tracing::TracingFinalizationDisallowedReason::
+            kLastTracingSessionDidNotEnd);
+    return false;
+  }
+
+  // TODO(crbug.com/1290887): check the trace limit per week (to be implemented
+  // later)
+
+  state.NotifyTracingStarted();
   return true;
 }
 
@@ -28,8 +76,19 @@
     const content::BackgroundTracingConfig& config,
     bool requires_anonymized_data,
     bool is_crash_scenario) {
-  // Background tracing is allowed in general and can be restricted when
-  // configuring BackgroundTracingManager.
+  // If the background tracing is specified on the command-line, we allow
+  // any scenario to be traced and uploaded.
+  if (IsBackgroundTracingCommandLine())
+    return true;
+
+  tracing::BackgroundTracingStateManager& state =
+      tracing::BackgroundTracingStateManager::GetInstance();
+  state.NotifyFinalizationStarted();
+
+  // TODO(crbug.com/1290887): check the trace limit per week (to be implemented
+  // later)
+
+  state.OnScenarioUploaded(config.scenario_name());
   return true;
 }
 
diff --git a/android_webview/browser/tracing/aw_tracing_delegate.h b/android_webview/browser/tracing/aw_tracing_delegate.h
index f1ee62d..5972f48 100644
--- a/android_webview/browser/tracing/aw_tracing_delegate.h
+++ b/android_webview/browser/tracing/aw_tracing_delegate.h
@@ -5,11 +5,11 @@
 #ifndef ANDROID_WEBVIEW_BROWSER_TRACING_AW_TRACING_DELEGATE_H_
 #define ANDROID_WEBVIEW_BROWSER_TRACING_AW_TRACING_DELEGATE_H_
 
-#include <memory>
-
 #include "content/public/browser/tracing_delegate.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+class PrefRegistrySimple;
+
 namespace base {
 class Value;
 }  // namespace base
@@ -21,6 +21,8 @@
   AwTracingDelegate();
   ~AwTracingDelegate() override;
 
+  static void RegisterPrefs(PrefRegistrySimple* registry);
+
   // content::TracingDelegate implementation:
   bool IsAllowedToBeginBackgroundScenario(
       const content::BackgroundTracingConfig& config,
diff --git a/android_webview/browser/tracing/aw_tracing_delegate_unittest.cc b/android_webview/browser/tracing/aw_tracing_delegate_unittest.cc
new file mode 100644
index 0000000..59e5e08
--- /dev/null
+++ b/android_webview/browser/tracing/aw_tracing_delegate_unittest.cc
@@ -0,0 +1,92 @@
+// Copyright 2022 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 "android_webview/browser/tracing/aw_tracing_delegate.h"
+
+#include "android_webview/browser/aw_browser_process.h"
+#include "android_webview/browser/aw_feature_list_creator.h"
+#include "base/values.h"
+#include "components/metrics/metrics_pref_names.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/testing_pref_service.h"
+#include "components/tracing/common/background_tracing_state_manager.h"
+#include "components/tracing/common/pref_names.h"
+#include "content/public/browser/background_tracing_config.h"
+#include "content/public/test/browser_task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace android_webview {
+
+class AwTracingDelegateTest : public testing::Test {
+ public:
+  void SetUp() override {
+    AwFeatureListCreator* aw_feature_list_creator = new AwFeatureListCreator();
+    aw_feature_list_creator->CreateLocalState();
+    browser_process_ =
+        new android_webview::AwBrowserProcess(aw_feature_list_creator);
+
+    pref_service_ = std::make_unique<TestingPrefServiceSimple>();
+    pref_service_->registry()->RegisterBooleanPref(
+        metrics::prefs::kMetricsReportingEnabled, false);
+    pref_service_->SetBoolean(metrics::prefs::kMetricsReportingEnabled, true);
+    tracing::RegisterPrefs(pref_service_->registry());
+    tracing::BackgroundTracingStateManager::GetInstance()
+        .SetPrefServiceForTesting(pref_service_.get());
+  }
+
+  void TearDown() override {
+    delete browser_process_;
+    tracing::BackgroundTracingStateManager::GetInstance().Reset();
+  }
+
+  android_webview::AwTracingDelegate delegate_;
+
+ private:
+  content::BrowserTaskEnvironment task_environment_;
+  raw_ptr<android_webview::AwBrowserProcess> browser_process_;
+  std::unique_ptr<TestingPrefServiceSimple> pref_service_;
+};
+
+std::unique_ptr<content::BackgroundTracingConfig> CreateValidConfig() {
+  base::Value dict(base::Value::Type::DICTIONARY);
+  dict.SetStringKey("scenario_name", "TestScenario");
+  dict.SetStringKey("mode", "PREEMPTIVE_TRACING_MODE");
+  dict.SetStringKey("custom_categories", "toplevel");
+  base::Value rules_list(base::Value::Type::LIST);
+
+  {
+    base::Value rules_dict(base::Value::Type::DICTIONARY);
+    rules_dict.SetStringKey("rule", "MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED");
+    rules_dict.SetStringKey("trigger_name", "test");
+    rules_list.Append(std::move(rules_dict));
+  }
+
+  dict.SetKey("configs", std::move(rules_list));
+  return content::BackgroundTracingConfig::FromDict(std::move(dict));
+}
+
+TEST_F(AwTracingDelegateTest, IsAllowedToBegin) {
+  auto config = CreateValidConfig();
+
+  EXPECT_TRUE(delegate_.IsAllowedToBeginBackgroundScenario(
+      *config, /*requires_anonymized_data=*/false));
+  EXPECT_TRUE(delegate_.IsAllowedToEndBackgroundScenario(
+      *config, /*requires_anonymized_data=*/false,
+      /*is_crash_scenario=*/false));
+}
+
+TEST_F(AwTracingDelegateTest, IsAllowedToBeginSessionEndedUnexpectedly) {
+  tracing::BackgroundTracingStateManager::GetInstance().SaveState(
+      {}, tracing::BackgroundTracingState::STARTED);
+
+  base::Value dict(base::Value::Type::DICTIONARY);
+  tracing::BackgroundTracingStateManager::GetInstance().Initialize(nullptr);
+
+  auto config = CreateValidConfig();
+
+  EXPECT_FALSE(delegate_.IsAllowedToBeginBackgroundScenario(
+      *config, /*requires_anonymized_data=*/false));
+}
+
+}  // namespace android_webview
\ No newline at end of file
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index bea8957..0fb82759 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -177,8 +177,6 @@
             Flag.baseFeature(AutofillFeatures.AUTOFILL_ENFORCE_DELAYS_IN_STRIKE_DATABASE,
                     "Enforce delay between offering Autofill opportunities in the "
                             + "strike database."),
-            Flag.baseFeature(AutofillFeatures.AUTOFILL_USE_UNASSOCIATED_LISTED_ELEMENTS,
-                    "Caches unowned listed elements in the document."),
             Flag.baseFeature(AutofillFeatures.AUTOFILL_PARSING_PATTERN_PROVIDER,
                     "Enables Autofill to use its new method to retrieve parsing patterns."),
             Flag.baseFeature(AutofillFeatures.AUTOFILL_PAGE_LANGUAGE_DETECTION,
@@ -331,6 +329,7 @@
                             + "thread."),
             Flag.baseFeature(BaseFeatures.OPTIMIZE_DATA_URLS,
                     "Optimizes parsing and loading of data: URLs."),
+            Flag.baseFeature(BlinkFeatures.EVENT_PATH, "Enables the deprecated Event.path API."),
             // Add new commandline switches and features above. The final entry should have a
             // trailing comma for cleaner diffs.
     };
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn
index 3e9bc66b..cd43800 100644
--- a/android_webview/test/BUILD.gn
+++ b/android_webview/test/BUILD.gn
@@ -575,6 +575,7 @@
     "//components/prefs:test_support",
     "//components/safe_browsing/core/browser",
     "//components/safe_browsing/core/common",
+    "//components/tracing:background_tracing_utils",
     "//components/update_client",
     "//components/viz/service:service",
     "//content:content",
@@ -620,6 +621,7 @@
     "../browser/scoped_add_feature_flags_unittests.cc",
     "../browser/state_serializer_unittest.cc",
     "../browser/tracing/aw_background_tracing_metrics_provider_unittest.cc",
+    "../browser/tracing/aw_tracing_delegate_unittest.cc",
     "../browser/tracing/background_tracing_field_trial_unittest.cc",
     "../lib/webview_tests.cc",
     "../nonembedded/component_updater/aw_component_installer_policy_shim_unittest.cc",
diff --git a/ash/assistant/assistant_controller_impl.cc b/ash/assistant/assistant_controller_impl.cc
index 55c143d2..f3bef143 100644
--- a/ash/assistant/assistant_controller_impl.cc
+++ b/ash/assistant/assistant_controller_impl.cc
@@ -20,6 +20,7 @@
 #include "ash/style/ash_color_provider.h"
 #include "base/bind.h"
 #include "base/memory/scoped_refptr.h"
+#include "chromeos/services/assistant/public/cpp/assistant_browser_delegate.h"
 #include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "chromeos/services/assistant/public/cpp/features.h"
@@ -175,14 +176,7 @@
   if (IsAndroidIntent(url)) {
     android_helper->LaunchAndroidIntent(url.spec());
   } else {
-    // The new tab should be opened with a user activation since the user
-    // interacted with the Assistant to open the url. |in_background| describes
-    // the relationship between |url| and Assistant UI, not the browser. As
-    // such, the browser will always be instructed to open |url| in a new
-    // browser tab and Assistant UI state will be updated downstream to respect
-    // |in_background|.
-    NewWindowDelegate::GetPrimary()->OpenUrl(
-        url, NewWindowDelegate::OpenUrlFrom::kUserInteraction);
+    chromeos::assistant::AssistantBrowserDelegate::Get()->OpenUrl(url);
   }
   NotifyUrlOpened(url, from_server);
 }
diff --git a/ash/assistant/assistant_notification_controller_impl_unittest.cc b/ash/assistant/assistant_notification_controller_impl_unittest.cc
index c5d5519..17be87a 100644
--- a/ash/assistant/assistant_notification_controller_impl_unittest.cc
+++ b/ash/assistant/assistant_notification_controller_impl_unittest.cc
@@ -10,9 +10,9 @@
 
 #include "ash/assistant/assistant_controller_impl.h"
 #include "ash/assistant/model/assistant_notification_model_observer.h"
+#include "ash/assistant/test/assistant_ash_test_base.h"
 #include "ash/assistant/test/test_assistant_service.h"
 #include "ash/shell.h"
-#include "ash/test/ash_test_base.h"
 #include "base/test/task_environment.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -199,7 +199,7 @@
 
 // AssistantNotificationControllerTest -----------------------------------------
 
-class AssistantNotificationControllerTest : public AshTestBase {
+class AssistantNotificationControllerTest : public AssistantAshTestBase {
  public:
   AssistantNotificationControllerTest(
       const AssistantNotificationControllerTest&) = delete;
@@ -208,11 +208,12 @@
 
  protected:
   AssistantNotificationControllerTest()
-      : AshTestBase(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+      : AssistantAshTestBase(
+            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
   ~AssistantNotificationControllerTest() override = default;
 
   void SetUp() override {
-    AshTestBase::SetUp();
+    AssistantAshTestBase::SetUp();
 
     controller_ =
         Shell::Get()->assistant_controller()->notification_controller();
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index 88be4a6..a47d9049 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -581,9 +581,12 @@
 const base::Feature kEnableOobeChromeVoxHint{"EnableOobeChromeVoxHint",
                                              base::FEATURE_ENABLED_BY_DEFAULT};
 
-// Enables Polymer3 for OOBE
+// Enables Polymer3 for OOBE and AddPerson flows.
 const base::Feature kEnableOobePolymer3{"EnableOobePolymer3",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
+// Enables Polymer3 for only the 'Add Person' flow on the login screen.
+const base::Feature kOobeAddPersonPolymer3{"OobeAddPersonPolymer3",
+                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Enables Kiosk enrollment option in OOBE.
 const base::Feature kEnableKioskEnrollmentInOobe{
@@ -2000,6 +2003,10 @@
   return base::FeatureList::IsEnabled(kEnableOobePolymer3);
 }
 
+bool IsOobeAddPersonPolymer3Enabled() {
+  return base::FeatureList::IsEnabled(kOobeAddPersonPolymer3);
+}
+
 bool IsKioskEnrollmentInOobeEnabled() {
   return base::FeatureList::IsEnabled(kEnableKioskEnrollmentInOobe);
 }
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 1a0688f0..8a4a99a 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -239,6 +239,8 @@
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kEnableOobePolymer3;
 COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const base::Feature kOobeAddPersonPolymer3;
+COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kEnableKioskEnrollmentInOobe;
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kEnableOobeNetworkScreenSkip;
@@ -710,6 +712,7 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobeChromeVoxHintEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobeHidDetectionRevampEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobePolymer3Enabled();
+COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobeAddPersonPolymer3Enabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsKioskEnrollmentInOobeEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobeNetworkScreenSkipEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobeConsolidatedConsentEnabled();
diff --git a/ash/metrics/feature_discovery_duration_reporter_impl.cc b/ash/metrics/feature_discovery_duration_reporter_impl.cc
index 9ea4445..9750190 100644
--- a/ash/metrics/feature_discovery_duration_reporter_impl.cc
+++ b/ash/metrics/feature_discovery_duration_reporter_impl.cc
@@ -5,6 +5,7 @@
 #include "ash/metrics/feature_discovery_duration_reporter_impl.h"
 
 #include "ash/public/cpp/feature_discovery_metric_util.h"
+#include "ash/public/cpp/tablet_mode.h"
 #include "ash/shell.h"
 #include "base/json/values_util.h"
 #include "base/metrics/histogram_functions.h"
@@ -27,17 +28,26 @@
 // key-value mapping is added to the dictionary when the observation on a
 // feature starts. The entries of the dictionary are never deleted after
 // addition. It helps to avoid duplicate recordings on the same feature.
+// NOTE: since it is a pref service key, do not change its value.
 constexpr char kObservedFeatures[] = "FeatureDiscoveryReporterObservedFeatures";
 
 // Observation data dictionary keys --------------------------------------------
 
 // The key to the cumulated time duration since the onbservation starts. This
 // key and its paired value get cleared when the observation finishes.
+// NOTE: since it is a pref service key, do not change its value.
 constexpr char kCumulatedDuration[] = "cumulative_duration";
 
 // The key to the boolean value that indicates whether the observation finishes.
+// NOTE: since it is a pref service key, do not change its value.
 constexpr char kIsObservationFinished[] = "is_observation_finished";
 
+// The key to the boolean value that is true if the observation starts in
+// tablet. This key should only be used when the metrics data collected from a
+// tracked feature should be split by tablet mode.
+// NOTE: since it is a pref service key, do not change its value.
+constexpr char kActivatedInTablet[] = "activated_in_tablet";
+
 // Helper functions ------------------------------------------------------------
 
 void ReportFeatureDiscoveryDuration(const char* histogram,
@@ -61,9 +71,20 @@
   return FindMappedFeatureInfo(feature).name;
 }
 
-// Returns the histogram mapped by `feature`.
-const char* FindMappedHistogram(feature_discovery::TrackableFeature feature) {
-  return FindMappedFeatureInfo(feature).histogram;
+// Calculates the histogram for metric reporting. `feature` specifies a
+// trackable feature. `in_tablet` is true if the observation on `feature` is
+// activated in tablet.
+// NOTE: if the metric reporting for `feature` is not separated by tablet mode,
+// `in_tablet` is null.
+const char* CalculateHistogram(feature_discovery::TrackableFeature feature,
+                               absl::optional<bool> in_tablet) {
+  const feature_discovery::TrackableFeatureInfo& info =
+      FindMappedFeatureInfo(feature);
+  if (!info.split_by_tablet_mode)
+    return info.histogram;
+
+  DCHECK(in_tablet);
+  return *in_tablet ? info.histogram_tablet : info.histogram_clamshell;
 }
 
 }  // namespace
@@ -98,7 +119,9 @@
   // TODO(https://crbug.com/1311344): implement the option that allows the
   // observation start time gets reset by the subsequent observation
   // activation callings.
-  const char* feature_name = FindMappedName(feature);
+  const feature_discovery::TrackableFeatureInfo& info =
+      FindMappedFeatureInfo(feature);
+  const char* feature_name = info.name;
   if (observed_features->GetDict().Find(feature_name))
     return;
 
@@ -107,6 +130,13 @@
   observed_feature_data.Set(kCumulatedDuration,
                             base::TimeDeltaToValue(base::TimeDelta()));
   observed_feature_data.Set(kIsObservationFinished, false);
+  if (info.split_by_tablet_mode) {
+    // Record the current tablet mode if `feature`'s discovery duration data
+    // should be separated by tablet mode.
+    observed_feature_data.Set(kActivatedInTablet,
+                              TabletMode::Get()->IsInTabletMode());
+  }
+
   DictionaryPrefUpdate update(active_pref_service_, kObservedFeatures);
   update->GetDict().Set(feature_name,
                         base::Value(std::move(observed_feature_data)));
@@ -137,18 +167,47 @@
   const absl::optional<base::TimeDelta> accumulated_duration =
       base::ValueToTimeDelta(feature_pref_data->Find(kCumulatedDuration));
   DCHECK(accumulated_duration);
-  ReportFeatureDiscoveryDuration(
-      FindMappedHistogram(feature),
-      *accumulated_duration + base::TimeTicks::Now() - iter->second);
+
+  bool skip_report = false;
+
+  // Get the boolean that indicates under which mode (clamshell or tablet) the
+  // observation is activated. If the metric data should not be separated, the
+  // value is null.
+  absl::optional<bool> activated_in_tablet;
+  if (FindMappedFeatureInfo(feature).split_by_tablet_mode) {
+    activated_in_tablet = feature_pref_data->FindBool(kActivatedInTablet);
+    DCHECK(activated_in_tablet);
+
+    // It is abnormal to miss `activated_in_tablet`. Handle this case for
+    // safety. Skip metric reporting if `activated_in_tablet` is missing when
+    // the metric data should be split by tablet mode. One reason leading to
+    // this case is that a feature switches from non-split to tablet-mode-split
+    // due to later code changes.
+    if (!activated_in_tablet) {
+      LOG(ERROR) << "Cannot find the tablet mode state under which the feature "
+                    "observation starts for "
+                 << FindMappedName(feature);
+      skip_report = true;
+    }
+  }
+
+  // Report metric data if there is no errors.
+  if (!skip_report) {
+    ReportFeatureDiscoveryDuration(
+        CalculateHistogram(feature, activated_in_tablet),
+        *accumulated_duration + base::TimeTicks::Now() - iter->second);
+  }
 
   // Update the observed feature pref data by:
   // 1. Clearing the cumulated duration
   // 2. Marking that the observation finishes
+  // 3. Erasing the saved tablet state if any
   DictionaryPrefUpdate update(active_pref_service_, kObservedFeatures);
   base::Value::Dict* mutable_feature_pref_data =
       update->GetDict().FindDict(feature_name);
   mutable_feature_pref_data->Remove(kCumulatedDuration);
   mutable_feature_pref_data->Set(kIsObservationFinished, true);
+  mutable_feature_pref_data->Remove(kActivatedInTablet);
 
   active_time_recordings_.erase(iter);
 }
diff --git a/ash/metrics/feature_discovery_duration_reporter_impl_unittest.cc b/ash/metrics/feature_discovery_duration_reporter_impl_unittest.cc
index 2090930..c3710e1 100644
--- a/ash/metrics/feature_discovery_duration_reporter_impl_unittest.cc
+++ b/ash/metrics/feature_discovery_duration_reporter_impl_unittest.cc
@@ -5,6 +5,7 @@
 #include "ash/metrics/feature_discovery_duration_reporter_impl.h"
 #include "ash/public/cpp/ash_prefs.h"
 #include "ash/public/cpp/feature_discovery_metric_util.h"
+#include "ash/public/cpp/tablet_mode.h"
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -19,8 +20,12 @@
 // A mock secondary user's email.
 constexpr char kSecondaryUserEmail[] = "user2@example.com";
 
-// The mock feature's discovery duration histogram.
+// The mock features' histograms.
 constexpr char kMockHistogram[] = "FeatureDiscoveryTestMockFeature";
+const char kMockFeatureClamshellHistogram[] =
+    "FeatureDiscoveryTestMockFeature.clamshell";
+const char kMockFeatureTabletHistogram[] =
+    "FeatureDiscoveryTestMockFeature.tablet";
 
 SessionControllerImpl* GetSessionController() {
   return Shell::Get()->session_controller();
@@ -227,4 +232,112 @@
   }
 }
 
+// Used to verify that collected data can be split by tablet mode states.
+class FeatureDiscoveryDurationReporterDataSplitTest
+    : public FeatureDiscoveryDurationReporterImplTest,
+      public testing::WithParamInterface</*is_tablet=*/bool> {
+ public:
+  FeatureDiscoveryDurationReporterDataSplitTest() = default;
+  FeatureDiscoveryDurationReporterDataSplitTest(
+      const FeatureDiscoveryDurationReporterDataSplitTest&) = delete;
+  FeatureDiscoveryDurationReporterDataSplitTest& operator=(
+      const FeatureDiscoveryDurationReporterDataSplitTest&) = delete;
+  ~FeatureDiscoveryDurationReporterDataSplitTest() override = default;
+
+  // FeatureDiscoveryDurationReporterImplTest:
+  void SetUp() override {
+    FeatureDiscoveryDurationReporterImplTest::SetUp();
+    TabletMode::Get()->SetEnabledForTest(GetParam());
+  }
+};
+
+INSTANTIATE_TEST_SUITE_P(All,
+                         FeatureDiscoveryDurationReporterDataSplitTest,
+                         testing::Bool());
+
+TEST_P(FeatureDiscoveryDurationReporterDataSplitTest, Basics) {
+  EXPECT_FALSE(IsReporterActive());
+  GetSessionControllerClient()->SetSessionState(
+      session_manager::SessionState::ACTIVE);
+  EXPECT_TRUE(IsReporterActive());
+
+  base::HistogramTester histogram_tester;
+  FeatureDiscoveryDurationReporterImpl* reporter =
+      GetFeatureDiscoveryDurationReporter();
+  reporter->MaybeActivateObservation(
+      feature_discovery::TrackableFeature::kModeSeparateMockFeature);
+  constexpr base::TimeDelta delta(base::Minutes(1));
+  task_environment()->FastForwardBy(delta);
+  reporter->MaybeFinishObservation(
+      feature_discovery::TrackableFeature::kModeSeparateMockFeature);
+
+  // Verify that data is recorded with the correct histogram.
+  if (GetParam()) {
+    histogram_tester.ExpectUniqueTimeSample(kMockFeatureTabletHistogram, delta,
+                                            1);
+    histogram_tester.ExpectTotalCount(kMockFeatureClamshellHistogram, 0);
+  } else {
+    histogram_tester.ExpectUniqueTimeSample(kMockFeatureClamshellHistogram,
+                                            delta, 1);
+    histogram_tester.ExpectTotalCount(kMockFeatureTabletHistogram, 0);
+  }
+}
+
+// Verifies that the metric data is correctly reported when the tablet mode
+// switches before the end of observation.
+TEST_P(FeatureDiscoveryDurationReporterDataSplitTest,
+       SwitchModeBeforeMetricReport) {
+  EXPECT_FALSE(IsReporterActive());
+  GetSessionControllerClient()->SetSessionState(
+      session_manager::SessionState::ACTIVE);
+  EXPECT_TRUE(IsReporterActive());
+
+  base::HistogramTester histogram_tester;
+  FeatureDiscoveryDurationReporterImpl* reporter =
+      GetFeatureDiscoveryDurationReporter();
+  reporter->MaybeActivateObservation(
+      feature_discovery::TrackableFeature::kModeSeparateMockFeature);
+  constexpr base::TimeDelta delta1(base::Minutes(1));
+  task_environment()->FastForwardBy(delta1);
+
+  // Toggle the tablet mode. Wait for the time duration of `delta2`. Then finish
+  // the observation.
+  TabletMode::Get()->SetEnabledForTest(!GetParam());
+  constexpr base::TimeDelta delta2(base::Minutes(2));
+  task_environment()->FastForwardBy(delta2);
+  reporter->MaybeFinishObservation(
+      feature_discovery::TrackableFeature::kModeSeparateMockFeature);
+
+  // Verify that data is recorded with the correct histogram.
+  if (GetParam()) {
+    histogram_tester.ExpectUniqueTimeSample(kMockFeatureTabletHistogram,
+                                            delta1 + delta2, 1);
+    histogram_tester.ExpectTotalCount(kMockFeatureClamshellHistogram, 0);
+  } else {
+    histogram_tester.ExpectUniqueTimeSample(kMockFeatureClamshellHistogram,
+                                            delta1 + delta2, 1);
+    histogram_tester.ExpectTotalCount(kMockFeatureTabletHistogram, 0);
+  }
+}
+
+// Verifies the metric data that is not split by tablet mode should be recorded
+// under both clamshell and tablet.
+TEST_P(FeatureDiscoveryDurationReporterDataSplitTest, CheckUnsplitMetric) {
+  EXPECT_FALSE(IsReporterActive());
+  GetSessionControllerClient()->SetSessionState(
+      session_manager::SessionState::ACTIVE);
+  EXPECT_TRUE(IsReporterActive());
+
+  base::HistogramTester histogram_tester;
+  FeatureDiscoveryDurationReporterImpl* reporter =
+      GetFeatureDiscoveryDurationReporter();
+  reporter->MaybeActivateObservation(
+      feature_discovery::TrackableFeature::kMockFeature);
+  constexpr base::TimeDelta delta(base::Minutes(1));
+  task_environment()->FastForwardBy(delta);
+  reporter->MaybeFinishObservation(
+      feature_discovery::TrackableFeature::kMockFeature);
+  histogram_tester.ExpectUniqueTimeSample(kMockHistogram, delta, 1);
+}
+
 }  // namespace ash
diff --git a/ash/public/cpp/feature_discovery_metric_util.cc b/ash/public/cpp/feature_discovery_metric_util.cc
index 980f58a..6f7b814 100644
--- a/ash/public/cpp/feature_discovery_metric_util.cc
+++ b/ash/public/cpp/feature_discovery_metric_util.cc
@@ -13,15 +13,55 @@
 // The histogram that records the mock feature's discovery duration.
 const char kMockFeatureHistogram[] = "FeatureDiscoveryTestMockFeature";
 
-// The mock feature's name.
+// The mock histograms that report metrics data under clamshell/tablet.
+const char kMockFeatureClamshellHistogram[] =
+    "FeatureDiscoveryTestMockFeature.clamshell";
+const char kMockFeatureTabletHistogram[] =
+    "FeatureDiscoveryTestMockFeature.tablet";
+
+// The mock features' names.
 const char kMockFeatureName[] = "kMockFeature";
+const char kModeSeparateMockFeatureName[] = "kMockFeatureSeparate";
 
 }  // namespace
 
+// TrackableFeatureInfo --------------------------------------------------------
+
+constexpr TrackableFeatureInfo::TrackableFeatureInfo(
+    TrackableFeature param_feature,
+    const char* param_feature_name,
+    const char* param_histogram_clamshell,
+    const char* param_histogram_tablet)
+    : feature(param_feature),
+      name(param_feature_name),
+      histogram(nullptr),
+      histogram_clamshell(param_histogram_clamshell),
+      histogram_tablet(param_histogram_tablet),
+      split_by_tablet_mode(true) {}
+
+constexpr TrackableFeatureInfo::TrackableFeatureInfo(
+    TrackableFeature param_feature,
+    const char* param_feature_name,
+    const char* param_histogram)
+    : feature(param_feature),
+      name(param_feature_name),
+      histogram(param_histogram),
+      histogram_clamshell(nullptr),
+      histogram_tablet(nullptr),
+      split_by_tablet_mode(false) {}
+
+TrackableFeatureInfo::~TrackableFeatureInfo() = default;
+
+// kTrackableFeatureArray ------------------------------------------------------
+
 const std::array<TrackableFeatureInfo, static_cast<int>(TrackableFeature::kMax)>
     kTrackableFeatureArray{
         TrackableFeatureInfo{TrackableFeature::kMockFeature, kMockFeatureName,
                              kMockFeatureHistogram},
+        TrackableFeatureInfo{TrackableFeature::kModeSeparateMockFeature,
+                             kModeSeparateMockFeatureName,
+                             kMockFeatureClamshellHistogram,
+                             kMockFeatureTabletHistogram},
         TrackableFeatureInfo{
             TrackableFeature::kAppListReorderAfterEducationNudge,
             "AppListReorderAfterEducationNudge",
diff --git a/ash/public/cpp/feature_discovery_metric_util.h b/ash/public/cpp/feature_discovery_metric_util.h
index cb2a4f1..9f3e0979 100644
--- a/ash/public/cpp/feature_discovery_metric_util.h
+++ b/ash/public/cpp/feature_discovery_metric_util.h
@@ -15,34 +15,79 @@
 // NOTE: `FeatureDiscoveryDurationReporter` users should add new enum types if
 // the features that users expect to track are not listed here. Also, when a new
 // enum type is added, make sure to update `kTrackableFeatureArray` as well.
-// Do not change the values of the existing enum types except kMax.
+// Ensure that kMax is always the last one.
 enum class ASH_PUBLIC_EXPORT TrackableFeature {
   // A mock feature used for testing.
   kMockFeature = 0,
 
+  // A mock feature whose discovery duration is reported with different
+  // histograms under tablet and clamshell. Used for testing only.
+  kModeSeparateMockFeature,
+
   // App list reorder after the reorder education nudge shows.
   // TODO(https://crbug.com/1316185): split this histogram into the one for
   // clamshell and another one for tablet.
-  kAppListReorderAfterEducationNudge = 1,
+  kAppListReorderAfterEducationNudge,
 
   // App list reorder after the user session activation.
   // TODO(https://crbug.com/1316185): split this histogram into the one for
   // clamshell and another one for tablet.
-  kAppListReorderAfterSessionActivation = 2,
+  kAppListReorderAfterSessionActivation,
 
   // Used to mark the end. It should always be the last one.
-  kMax = 3,
+  kMax,
 };
 
 struct ASH_PUBLIC_EXPORT TrackableFeatureInfo {
+  // This ctor should be used when the metric data collected from this feature
+  // should be separated by the mode, i.e. clamshell or tablet, under which the
+  // feature observation starts.
+  // In detail, when reporting the metric data collected from a feature defined
+  // by this ctor, there are the following two cases:
+  // 1. If the observation on this feature starts in tablet mode,
+  // `param_histogram_tablet` is used for reporting;
+  // 2. If the observation on this feature starts in clamshell mode,
+  // `param_histogram_clamshell` is used for reporting.
+  // NOTE: if a feature is registered with this ctor, do not switch this feature
+  // back to non-split. Otherwise, the data left in pref service may lead to
+  // poorly defined behavior.
+  constexpr TrackableFeatureInfo(TrackableFeature param_feature,
+                                 const char* param_name,
+                                 const char* param_histogram_clamshell,
+                                 const char* param_histogram_tablet);
+
+  // This ctor should be used when the metric data collected from this feature
+  // should NOT be separated by tablet mode.
+  // NOTE: if a feature is registered with this ctor, do not switch this feature
+  // back to tablet-mode-split.
+  constexpr TrackableFeatureInfo(TrackableFeature param_feature,
+                                 const char* param_name,
+                                 const char* param_histogram);
+
+  TrackableFeatureInfo(const TrackableFeatureInfo&) = delete;
+  TrackableFeatureInfo& operator=(const TrackableFeatureInfo&) = delete;
+  ~TrackableFeatureInfo();
+
   // A trackable feature's enum type.
-  TrackableFeature feature;
+  const TrackableFeature feature;
 
   // A trackable feature's name.
-  const char* name;
+  const char* const name;
 
-  // The histogram that records the discovery duration of `feature`.
-  const char* histogram;
+  // The histogram that records the discovery duration of `feature`. Used only
+  // when `split_by_tablet_mode` is false.
+  const char* const histogram;
+
+  // The histograms to record data under the specified mode (tablet or
+  // clamshell). Used only when `split_by_tablet_mode` is true.
+  const char* const histogram_clamshell;
+  const char* const histogram_tablet;
+
+  // Indicates whether the metric recordings should be split by modes (i.e.
+  // tablet or clamshell).
+  // Its value should not be set explicitly by `TrackableFeatureInfo`'s users.
+  // Instead, the value is calculated by the ctor.
+  const bool split_by_tablet_mode;
 };
 
 // A hardcoded array of trackable features' info.
diff --git a/ash/system/diagnostics/diagnostics_log_controller.cc b/ash/system/diagnostics/diagnostics_log_controller.cc
index e5e14214..9688eabd 100644
--- a/ash/system/diagnostics/diagnostics_log_controller.cc
+++ b/ash/system/diagnostics/diagnostics_log_controller.cc
@@ -5,6 +5,8 @@
 #include "ash/system/diagnostics/diagnostics_log_controller.h"
 
 #include <memory>
+#include <string>
+#include <vector>
 
 #include "ash/public/cpp/session/session_types.h"
 #include "ash/session/session_controller_impl.h"
@@ -17,6 +19,9 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/sequence_checker.h"
+#include "base/strings/string_util.h"
+#include "base/task/thread_pool.h"
 #include "components/session_manager/session_manager_types.h"
 
 namespace ash {
@@ -25,10 +30,27 @@
 namespace {
 
 DiagnosticsLogController* g_instance = nullptr;
+
 // Default path for storing logs.
 const char kDiaganosticsTmpDir[] = "/tmp/diagnostics";
 const char kDiaganosticsDirName[] = "diagnostics";
 
+// Session log headers and fallback content.
+const char kRoutineLogSubsectionHeader[] = "--- Test Routines --- \n";
+const char kSystemLogSectionHeader[] = "=== System === \n";
+const char kNetworkingLogSectionHeader[] = "=== Networking === \n";
+const char kNoRoutinesRun[] =
+    "No routines of this type were run in the session.\n";
+
+std::string GetRoutineResultsString(const std::string& results) {
+  const std::string section_header =
+      std::string(kRoutineLogSubsectionHeader) + "\n";
+  if (results.empty()) {
+    return section_header + kNoRoutinesRun;
+  }
+
+  return section_header + results;
+}
 // Determines if profile should be accessed with current session state.  If at
 // sign-in screen, guest user, kiosk app, or before the profile has
 // successfully loaded temporary path should be used for storing logs.
@@ -38,9 +60,6 @@
          status == ash::LoginStatus::USER;
 }
 
-// Placeholder session log contents.
-const char kLogFileContents[] = "Diagnostics Log";
-
 }  // namespace
 
 DiagnosticsLogController::DiagnosticsLogController()
@@ -70,17 +89,53 @@
 void DiagnosticsLogController::Initialize(
     std::unique_ptr<DiagnosticsBrowserDelegate> delegate) {
   DCHECK(g_instance);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(g_instance->sequence_checker_);
   g_instance->delegate_ = std::move(delegate);
   g_instance->ResetAndInitializeLogWriters();
+
+  // Schedule removal of log directory.
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock()},
+      base::BindOnce(&DiagnosticsLogController::RemoveDirectory,
+                     g_instance->weak_ptr_factory_.GetWeakPtr(),
+                     g_instance->log_base_path_));
 }
 
 bool DiagnosticsLogController::GenerateSessionLogOnBlockingPool(
     const base::FilePath& save_file_path) {
   DCHECK(!save_file_path.empty());
+  std::vector<std::string> log_pieces;
 
-  // TODO(ashleydp): Replace |kLogFileContents| when actual log contents
-  // available to write to file.
-  return base::WriteFile(save_file_path, kLogFileContents);
+  // Fetch system data from TelemetryLog.
+  const std::string system_log_contents = telemetry_log_->GetContents();
+  log_pieces.push_back(kSystemLogSectionHeader);
+  if (!system_log_contents.empty()) {
+    log_pieces.push_back(system_log_contents);
+  }
+
+  // Fetch system routines from RoutineLog.
+  const std::string system_routines =
+      routine_log_->GetContentsForCategory("system");
+  // Add the routine section for the system category.
+  log_pieces.push_back(GetRoutineResultsString(system_routines));
+
+  if (features::IsNetworkingInDiagnosticsAppEnabled()) {
+    // Add networking category.
+    log_pieces.push_back(kNetworkingLogSectionHeader);
+
+    // Add the network info section.
+    log_pieces.push_back(networking_log_->GetNetworkInfo());
+
+    // Add the routine section for the network category.
+    const std::string network_routines =
+        routine_log_->GetContentsForCategory("network");
+    log_pieces.push_back(GetRoutineResultsString(network_routines));
+
+    // Add the network events section.
+    log_pieces.push_back(networking_log_->GetNetworkEvents());
+  }
+
+  return base::WriteFile(save_file_path, base::JoinString(log_pieces, "\n"));
 }
 
 void DiagnosticsLogController::ResetAndInitializeLogWriters() {
@@ -135,7 +190,15 @@
     return;
   }
 
-  g_instance->ResetLogBasePath();
+  g_instance->ResetAndInitializeLogWriters();
+}
+
+void DiagnosticsLogController::RemoveDirectory(const base::FilePath& path) {
+  DCHECK(!path.empty());
+
+  if (base::PathExists(path)) {
+    base::DeletePathRecursively(path);
+  }
 }
 
 }  // namespace diagnostics
diff --git a/ash/system/diagnostics/diagnostics_log_controller.h b/ash/system/diagnostics/diagnostics_log_controller.h
index ab36a31..df74539 100644
--- a/ash/system/diagnostics/diagnostics_log_controller.h
+++ b/ash/system/diagnostics/diagnostics_log_controller.h
@@ -11,6 +11,8 @@
 #include "ash/public/cpp/session/session_observer.h"
 #include "ash/system/diagnostics/diagnostics_browser_delegate.h"
 #include "base/files/file_path.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequence_checker.h"
 
 namespace ash {
 namespace diagnostics {
@@ -65,11 +67,18 @@
   // Ensure log_base_path_ set based on current session and ash::LoginStatus.
   void ResetLogBasePath();
 
+  // Removes directory at |path|.
+  void RemoveDirectory(const base::FilePath& path);
+
   std::unique_ptr<DiagnosticsBrowserDelegate> delegate_;
   base::FilePath log_base_path_;
   std::unique_ptr<NetworkingLog> networking_log_;
   std::unique_ptr<RoutineLog> routine_log_;
   std::unique_ptr<TelemetryLog> telemetry_log_;
+  SEQUENCE_CHECKER(sequence_checker_);
+
+  // Must be last.
+  base::WeakPtrFactory<DiagnosticsLogController> weak_ptr_factory_{this};
 };
 
 }  // namespace diagnostics
diff --git a/ash/system/diagnostics/diagnostics_log_controller_unittest.cc b/ash/system/diagnostics/diagnostics_log_controller_unittest.cc
index 966cdbf..02aa1ee7 100644
--- a/ash/system/diagnostics/diagnostics_log_controller_unittest.cc
+++ b/ash/system/diagnostics/diagnostics_log_controller_unittest.cc
@@ -5,11 +5,15 @@
 #include "ash/system/diagnostics/diagnostics_log_controller.h"
 
 #include <memory>
+#include <string>
+#include <vector>
 
 #include "ash/constants/ash_features.h"
 #include "ash/shell.h"
 #include "ash/system/diagnostics/diagnostics_browser_delegate.h"
+#include "ash/system/diagnostics/log_test_helpers.h"
 #include "ash/system/diagnostics/networking_log.h"
+#include "ash/system/diagnostics/routine_log.h"
 #include "ash/system/diagnostics/telemetry_log.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/webui/diagnostics_ui/mojom/network_health_provider.mojom-forward.h"
@@ -19,7 +23,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/test/scoped_feature_list.h"
 #include "components/user_manager/user_type.h"
-#include "routine_log.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace ash {
@@ -27,12 +30,19 @@
 
 namespace {
 
-const char kLogFileContents[] = "Diagnostics Log";
 const char kTestSessionLogFileName[] = "test_session_log.txt";
 const char kDiangosticsDirName[] = "diagnostics";
 const char kDefaultUserDir[] = "/fake/user-dir";
 const char kTmpDiagnosticsDir[] = "/tmp/diagnostics";
 const char kTestUserEmail[] = "test-user@gmail.com";
+const char kFakeUserDir[] = "fake-user";
+
+// Log headers content.
+const char kRoutineLogSubsectionHeader[] = "--- Test Routines ---";
+const char kSystemLogSectionHeader[] = "=== System ===";
+const char kNetworkingLogSectionHeader[] = "=== Networking ===";
+const char kNetworkingLogNetworkInfoHeader[] = "--- Network Info ---";
+const char kNetworkingLogNetworkEventsHeader[] = "--- Network Events ---";
 
 // Fake delegate used to set the expected user directory path.
 class FakeDiagnosticsBrowserDelegate : public DiagnosticsBrowserDelegate {
@@ -110,6 +120,18 @@
 }
 
 TEST_F(DiagnosticsLogControllerTest, GenerateSessionLogOnBlockingPoolFile) {
+  base::ScopedTempDir scoped_diagnostics_log_dir;
+
+  EXPECT_TRUE(scoped_diagnostics_log_dir.CreateUniqueTempDir());
+  const base::FilePath expected_path_regular_user =
+      base::FilePath(scoped_diagnostics_log_dir.GetPath().Append(kFakeUserDir));
+  const base::FilePath expected_diagnostics_log_path =
+      expected_path_regular_user.Append(kDiangosticsDirName);
+  SimulateUserLogin(kTestUserEmail);
+  DiagnosticsLogController::Initialize(
+      std::make_unique<FakeDiagnosticsBrowserDelegate>(
+          expected_path_regular_user));
+
   const base::FilePath save_file_path = GetSessionLogPath();
   EXPECT_TRUE(DiagnosticsLogController::Get()->GenerateSessionLogOnBlockingPool(
       save_file_path));
@@ -117,7 +139,66 @@
 
   std::string contents;
   EXPECT_TRUE(base::ReadFileToString(save_file_path, &contents));
-  EXPECT_EQ(kLogFileContents, contents);
+  const std::vector<std::string> log_lines = GetLogLines(contents);
+  EXPECT_EQ(8u, log_lines.size());
+
+  EXPECT_EQ(kSystemLogSectionHeader, log_lines[0]);
+  EXPECT_EQ(kRoutineLogSubsectionHeader, log_lines[1]);
+  const std::string expected_no_routine_msg =
+      "No routines of this type were run in the session.";
+  EXPECT_EQ(expected_no_routine_msg, log_lines[2]);
+  EXPECT_EQ(kNetworkingLogSectionHeader, log_lines[3]);
+  EXPECT_EQ(kNetworkingLogNetworkInfoHeader, log_lines[4]);
+  EXPECT_EQ(kRoutineLogSubsectionHeader, log_lines[5]);
+  EXPECT_EQ(expected_no_routine_msg, log_lines[6]);
+  EXPECT_EQ(kNetworkingLogNetworkEventsHeader, log_lines[7]);
+}
+
+TEST_F(DiagnosticsLogControllerTest,
+       GenerateWithRoutinesSessionLogOnBlockingPoolFile) {
+  base::ScopedTempDir scoped_diagnostics_log_dir;
+
+  EXPECT_TRUE(scoped_diagnostics_log_dir.CreateUniqueTempDir());
+  const base::FilePath expected_path_regular_user =
+      base::FilePath(scoped_diagnostics_log_dir.GetPath().Append(kFakeUserDir));
+  const base::FilePath expected_diagnostics_log_path =
+      expected_path_regular_user.Append(kDiangosticsDirName);
+  SimulateUserLogin(kTestUserEmail);
+  DiagnosticsLogController::Initialize(
+      std::make_unique<FakeDiagnosticsBrowserDelegate>(
+          expected_path_regular_user));
+  RoutineLog* routine_log = DiagnosticsLogController::Get()->GetRoutineLog();
+  routine_log->LogRoutineCancelled(mojom::RoutineType::kArcHttp);
+  routine_log->LogRoutineCancelled(mojom::RoutineType::kBatteryCharge);
+  task_environment()->RunUntilIdle();
+
+  // Generate log file at test path.
+  const base::FilePath save_file_path = GetSessionLogPath();
+  EXPECT_TRUE(DiagnosticsLogController::Get()->GenerateSessionLogOnBlockingPool(
+      save_file_path));
+  EXPECT_TRUE(base::PathExists(save_file_path));
+  std::string contents;
+  EXPECT_TRUE(base::ReadFileToString(save_file_path, &contents));
+  const std::vector<std::string> log_lines = GetLogLines(contents);
+  EXPECT_EQ(8u, log_lines.size());
+
+  // System state and routine data.
+  EXPECT_EQ(kSystemLogSectionHeader, log_lines[0]);
+  EXPECT_EQ(kRoutineLogSubsectionHeader, log_lines[1]);
+  const std::string expected_canceled_routine_msg =
+      "Inflight Routine Cancelled";
+  auto system_routine_line = GetLogLineContents(log_lines[2]);
+  EXPECT_EQ(2u, system_routine_line.size());
+  EXPECT_EQ(expected_canceled_routine_msg, system_routine_line[1]);
+
+  // Network state and routine data.
+  EXPECT_EQ(kNetworkingLogSectionHeader, log_lines[3]);
+  EXPECT_EQ(kNetworkingLogNetworkInfoHeader, log_lines[4]);
+  EXPECT_EQ(kRoutineLogSubsectionHeader, log_lines[5]);
+  auto network_routine_line = GetLogLineContents(log_lines[6]);
+  EXPECT_EQ(2u, network_routine_line.size());
+  EXPECT_EQ(expected_canceled_routine_msg, network_routine_line[1]);
+  EXPECT_EQ(kNetworkingLogNetworkEventsHeader, log_lines[7]);
 }
 
 TEST_F(DiagnosticsLogControllerTest,
@@ -200,7 +281,7 @@
 
   EXPECT_TRUE(scoped_dir.CreateUniqueTempDir());
   const base::FilePath expected_path_regular_user =
-      base::FilePath(scoped_dir.GetPath().Append("fake-user"));
+      base::FilePath(scoped_dir.GetPath().Append(kFakeUserDir));
   const base::FilePath expected_diagnostics_log_path =
       expected_path_regular_user.Append(kDiangosticsDirName);
   SimulateUserLogin(kTestUserEmail);
@@ -239,5 +320,33 @@
       expected_diagnostics_log_path.Append("diagnostics_routines_system.log")));
 }
 
+TEST_F(DiagnosticsLogControllerTest, ClearLogDirectoryOnInitialize) {
+  base::ScopedTempDir scoped_dir;
+  EXPECT_TRUE(scoped_dir.CreateUniqueTempDir());
+  const base::FilePath expected_path_regular_user =
+      base::FilePath(scoped_dir.GetPath().Append(kFakeUserDir));
+  const base::FilePath expected_diagnostics_log_path =
+      expected_path_regular_user.Append(kDiangosticsDirName);
+  EXPECT_TRUE(base::CreateDirectory(expected_diagnostics_log_path));
+  EXPECT_TRUE(base::PathExists(expected_diagnostics_log_path));
+  SimulateUserLogin(kTestUserEmail);
+  DiagnosticsLogController::Initialize(
+      std::make_unique<FakeDiagnosticsBrowserDelegate>(
+          expected_path_regular_user));
+
+  // Wait for delete to complete.
+  task_environment()->RunUntilIdle();
+  EXPECT_FALSE(base::PathExists(expected_diagnostics_log_path));
+
+  // Before routines updated log file does not exist.
+  RoutineLog* routine_log = DiagnosticsLogController::Get()->GetRoutineLog();
+  routine_log->LogRoutineCancelled(mojom::RoutineType::kDnsResolution);
+
+  // Wait for append to write logs.
+  task_environment()->RunUntilIdle();
+  EXPECT_EQ(expected_diagnostics_log_path, log_base_path());
+  EXPECT_TRUE(base::PathExists(expected_diagnostics_log_path));
+}
+
 }  // namespace diagnostics
 }  // namespace ash
diff --git a/ash/system/network/managed_sim_lock_notifier.cc b/ash/system/network/managed_sim_lock_notifier.cc
index 34484f2..4ad06d0 100644
--- a/ash/system/network/managed_sim_lock_notifier.cc
+++ b/ash/system/network/managed_sim_lock_notifier.cc
@@ -85,7 +85,7 @@
         networks) {
   // Check if there are any PIN locked pSIM or eSIM networks.
   for (auto& network : networks) {
-    if (network->type_state->get_cellular()->sim_locked) {
+    if (network->type_state->get_cellular()->sim_lock_enabled) {
       ShowNotification();
       return;
     }
diff --git a/ash/system/network/managed_sim_lock_notifier_unittest.cc b/ash/system/network/managed_sim_lock_notifier_unittest.cc
index bfeed31..abdd536be 100644
--- a/ash/system/network/managed_sim_lock_notifier_unittest.cc
+++ b/ash/system/network/managed_sim_lock_notifier_unittest.cc
@@ -67,12 +67,10 @@
     return NetworkHandler::Get()->managed_network_configuration_handler();
   }
 
-  void SetCellularSimLockState(bool should_lock_sim = true) {
+  void SetCellularSimLockEnabled(bool enable) {
     // Simulate a locked SIM.
     base::Value sim_lock_status(base::Value::Type::DICTIONARY);
-    sim_lock_status.SetKey(
-        shill::kSIMLockTypeProperty,
-        base::Value(should_lock_sim ? shill::kSIMLockPin : ""));
+    sim_lock_status.SetKey(shill::kSIMLockEnabledProperty, base::Value(enable));
     network_config_helper_->network_state_helper()
         .device_test()
         ->SetDeviceProperty(
@@ -154,7 +152,7 @@
   AddCellularService();
   EXPECT_FALSE(GetManagedSimLockNotification());
 
-  SetCellularSimLockState(true);
+  SetCellularSimLockEnabled(true);
   EXPECT_FALSE(GetManagedSimLockNotification());
 
   SetAllowCellularSimLock(false);
@@ -167,7 +165,7 @@
 TEST_F(ManagedSimLockNotifierTest, NewActiveSession) {
   AddCellularDevice();
   AddCellularService();
-  SetCellularSimLockState(true);
+  SetCellularSimLockEnabled(true);
   SetAllowCellularSimLock(false);
 
   // Notification should be shown; proceed to remove it.
@@ -194,7 +192,7 @@
   // false.
   EXPECT_FALSE(GetManagedSimLockNotification());
 
-  SetCellularSimLockState(false);
+  SetCellularSimLockEnabled(false);
   SetAllowCellularSimLock(false);
 
   LogOut();
diff --git a/ash/system/time/calendar_view.cc b/ash/system/time/calendar_view.cc
index cff59e7..107534e 100644
--- a/ash/system/time/calendar_view.cc
+++ b/ash/system/time/calendar_view.cc
@@ -53,6 +53,7 @@
 constexpr int kWeekRowHorizontalPadding =
     kContentHorizontalPadding - calendar_utils::kDateHorizontalPadding;
 constexpr int kExpandedCalenarPadding = 8;
+constexpr int kChevronPadding = calendar_utils::kColumnSetPadding - 1;
 
 // The offset for `month_label_` to make it align with `month_header`.
 constexpr int kMonthLabelPaddingOffset = -1;
@@ -369,9 +370,9 @@
           calendar_view_controller_->currently_shown_date()));
 
   TriView* tri_view = TrayPopupUtils::CreateDefaultRowView();
-  tri_view->SetBorder(views::CreateEmptyBorder(gfx::Insets::TLBR(
-      kLabelVerticalPadding, kContentHorizontalPadding, 0,
-      kContentHorizontalPadding - calendar_utils::kColumnSetPadding)));
+  tri_view->SetBorder(views::CreateEmptyBorder(
+      gfx::Insets::TLBR(kLabelVerticalPadding, kContentHorizontalPadding, 0,
+                        kContentHorizontalPadding - kChevronPadding)));
   tri_view->AddView(TriView::Container::START, header_);
 
   auto* button_container = new views::View();
@@ -382,8 +383,7 @@
       views::BoxLayout::MainAxisAlignment::kEnd);
   // Aligns button with the calendar dates in the `TableLayout`.
   button_container_layout->set_between_child_spacing(
-      calendar_utils::kDateHorizontalPadding +
-      calendar_utils::kColumnSetPadding);
+      calendar_utils::kDateHorizontalPadding + kChevronPadding);
 
   up_button_ = button_container->AddChildView(std::make_unique<IconButton>(
       base::BindRepeating(&CalendarView::OnMonthArrowButtonActivated,
diff --git a/ash/wallpaper/wallpaper_base_view.cc b/ash/wallpaper/wallpaper_base_view.cc
index dc4e8101..05d80f9 100644
--- a/ash/wallpaper/wallpaper_base_view.cc
+++ b/ash/wallpaper/wallpaper_base_view.cc
@@ -106,6 +106,11 @@
     canvas->FillRect(GetLocalBounds(), GetWallpaperShieldColor());
 }
 
+void WallpaperBaseView::OnThemeChanged() {
+  views::View::OnThemeChanged();
+  SchedulePaint();
+}
+
 void WallpaperBaseView::DrawWallpaper(const gfx::ImageSkia& wallpaper,
                                       const gfx::Rect& src,
                                       const gfx::Rect& dst,
diff --git a/ash/wallpaper/wallpaper_base_view.h b/ash/wallpaper/wallpaper_base_view.h
index 94635a7..b2eda86 100644
--- a/ash/wallpaper/wallpaper_base_view.h
+++ b/ash/wallpaper/wallpaper_base_view.h
@@ -34,6 +34,7 @@
 
   // views::View:
   void OnPaint(gfx::Canvas* canvas) override;
+  void OnThemeChanged() override;
 
  protected:
   virtual void DrawWallpaper(const gfx::ImageSkia& wallpaper,
diff --git a/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc b/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc
index e0d23cd..d6405bb 100644
--- a/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc
+++ b/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc
@@ -349,7 +349,6 @@
 
 // Validates behavior when log controller is used to generate session log.
 TEST_F(SessionLogHandlerAshTest, SaveSessionLogFlagEnabled) {
-  const std::string expected_log_header = "Diagnostics Log";
   base::RunLoop run_loop;
 
   // Simulate select file
@@ -362,8 +361,26 @@
   RunTasks();
 
   const std::vector<std::string> log_lines = GetCombinedLogContents(log_path);
-  ASSERT_EQ(1u, log_lines.size());
-  EXPECT_EQ(expected_log_header, log_lines[0]);
+  ASSERT_EQ(8u, log_lines.size());
+
+  // Empty system data log.
+  const std::string expected_system_header = "=== System ===";
+  EXPECT_EQ(expected_system_header, log_lines[0]);
+  const std::string expected_routine_header = "--- Test Routines ---";
+  EXPECT_EQ(expected_routine_header, log_lines[1]);
+  const std::string expected_no_routine_msg =
+      "No routines of this type were run in the session.";
+  EXPECT_EQ(expected_no_routine_msg, log_lines[2]);
+
+  // Empty network data log.
+  const std::string expected_network_header = "=== Networking ===";
+  EXPECT_EQ(expected_network_header, log_lines[3]);
+  const std::string expected_network_info_header = "--- Network Info ---";
+  EXPECT_EQ(expected_network_info_header, log_lines[4]);
+  EXPECT_EQ(expected_routine_header, log_lines[5]);
+  EXPECT_EQ(expected_no_routine_msg, log_lines[6]);
+  const std::string expected_network_events_header = "--- Network Events ---";
+  EXPECT_EQ(expected_network_events_header, log_lines[7]);
 }
 
 // Validates that invoking the saveSessionLog Web UI event opens the
diff --git a/ash/wm/desks/templates/save_desk_template_button.cc b/ash/wm/desks/templates/save_desk_template_button.cc
index 7d3d66b..c6862bb 100644
--- a/ash/wm/desks/templates/save_desk_template_button.cc
+++ b/ash/wm/desks/templates/save_desk_template_button.cc
@@ -49,6 +49,7 @@
   PillButton::OnThemeChanged();
   SetBackgroundColor(AshColorProvider::Get()->GetBaseLayerColor(
       AshColorProvider::BaseLayerType::kTransparent80));
+  UpdateBorderState();
 }
 
 void SaveDeskTemplateButton::UpdateBorderState() {
diff --git a/ash/wm/desks/templates/saved_desk_library_view.cc b/ash/wm/desks/templates/saved_desk_library_view.cc
index 6f20bba..ef8e665 100644
--- a/ash/wm/desks/templates/saved_desk_library_view.cc
+++ b/ash/wm/desks/templates/saved_desk_library_view.cc
@@ -26,9 +26,11 @@
 #include "ui/compositor/layer.h"
 #include "ui/events/event_handler.h"
 #include "ui/gfx/geometry/insets.h"
+#include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/view.h"
+#include "ui/wm/core/coordinate_conversion.h"
 
 namespace ash {
 namespace {
@@ -108,16 +110,26 @@
   // aura::WindowTargeter:
   bool SubtreeShouldBeExploredForEvent(aura::Window* window,
                                        const ui::LocatedEvent& event) override {
-    // Process the event only if it intersects with grid items or it is for
-    // scrolling.
-    if (!owner_->IntersectsWithUi(event.location()) &&
-        !event.IsMouseWheelEvent()) {
-      return false;
-    }
+    // Process the event it is for scrolling.
+    if (event.IsMouseWheelEvent())
+      return true;
 
-    // None of the libary's children will handle the event, so `window` won't
+    // Check if the located event intersects with the library's children.
+    // Convert to screen coordinate.
+    gfx::Point screen_location;
+    if (event.target()) {
+      screen_location = event.target()->GetScreenLocation(event);
+    } else {
+      screen_location = event.root_location();
+      wm::ConvertPointToScreen(window->GetRootWindow(), &screen_location);
+    }
+    // Process the event if it intersects with grid items.
+    if (owner_->IntersectsWithUi(screen_location))
+      return true;
+
+    // None of the library's children will handle the event, so `window` won't
     // handle the event and it will fall through to the wallpaper.
-    return aura::WindowTargeter::SubtreeShouldBeExploredForEvent(window, event);
+    return false;
   }
 
  private:
@@ -330,16 +342,16 @@
   return false;
 }
 
-bool SavedDeskLibraryView::IntersectsWithUi(const gfx::Point& location) {
+bool SavedDeskLibraryView::IntersectsWithUi(const gfx::Point& screen_location) {
   // Check saved desk items.
   for (auto* grid : grid_views()) {
     for (auto* item : grid->grid_items()) {
-      if (item->GetBoundsInScreen().Contains(location))
+      if (item->GetBoundsInScreen().Contains(screen_location))
         return true;
     }
   }
   // Check feedback button.
-  return feedback_button_->GetBoundsInScreen().Contains(location);
+  return feedback_button_->GetBoundsInScreen().Contains(screen_location);
 }
 
 aura::Window* SavedDeskLibraryView::GetWidgetWindow() {
diff --git a/ash/wm/desks/templates/saved_desk_library_view.h b/ash/wm/desks/templates/saved_desk_library_view.h
index 9fb2054..049de19f 100644
--- a/ash/wm/desks/templates/saved_desk_library_view.h
+++ b/ash/wm/desks/templates/saved_desk_library_view.h
@@ -71,10 +71,10 @@
 
   bool IsAnimating();
 
-  // Called from `SavedDeskLibraryWindowTargeter`. Returns true if `location`
-  // intersects with an interactive part of the library UI. This includes saved
-  // desk items and the feedback button.
-  bool IntersectsWithUi(const gfx::Point& location);
+  // Called from `SavedDeskLibraryWindowTargeter`. Returns true if
+  // `screen_location` intersects with an interactive part of the library UI.
+  // This includes saved desk items and the feedback button.
+  bool IntersectsWithUi(const gfx::Point& screen_location);
 
   // If this view is attached to a widget, returns its window (or nullptr).
   aura::Window* GetWidgetWindow();
diff --git a/ash/wm/desks/templates/saved_desk_unittest.cc b/ash/wm/desks/templates/saved_desk_unittest.cc
index c2b2823..bfe3e60 100644
--- a/ash/wm/desks/templates/saved_desk_unittest.cc
+++ b/ash/wm/desks/templates/saved_desk_unittest.cc
@@ -916,59 +916,89 @@
 // Tests that the save desk as template button and save for later button are
 // enabled and disabled as expected based on the number of templates.
 TEST_F(SavedDeskTest, SaveDeskButtonsEnabledDisabled) {
-  desks_storage::LocalDeskDataManager::
-      SetExcludeSaveAndRecallDeskInMaxEntryCountForTesting(true);
-  // Create an app window which should be supported.
+  // Prepare the test environment, like creating an app window which should be
+  // supported.
   auto no_app_id_window = CreateAppWindow();
+  aura::Window* root_window = Shell::GetPrimaryRootWindow();
   auto* delegate = Shell::Get()->desks_templates_delegate();
   ASSERT_TRUE(
       delegate->IsWindowSupportedForDeskTemplate(no_app_id_window.get()));
 
-  // TODO(yongshun): Once `GetEntryCount()` and `GetMaxEntryCount()` support
-  // `DeskTemplateType`, create `kSaveAndRecall` and add test for save for later
-  // button.
-  std::array<std::string, 6> desk_names_template;
-  for (size_t i = 0; i < desk_names_template.size(); i++)
-    desk_names_template[i] += "desk_template " + base::NumberToString(i + 1);
-  for (const std::string& desk_name : desk_names_template)
-    AddEntry(base::GUID::GenerateRandomV4(), desk_name, base::Time::Now(),
-             DeskTemplateType::kTemplate);
+  // Test `Save Desk as Template` button.
+  {
+    // Add 6 `kTemplate` entries.
+    for (size_t i = 1; i <= 6; i++) {
+      const std::string desk_name = "desk_template " + base::NumberToString(i);
+      AddEntry(base::GUID::GenerateRandomV4(), desk_name, base::Time::Now(),
+               DeskTemplateType::kTemplate);
+    }
 
-  // Open overview and expect the save template button to be disabled.
-  ToggleOverview();
-  auto* overview_controller = Shell::Get()->overview_controller();
-  ASSERT_TRUE(overview_controller->InOverviewSession());
-  WaitForDesksTemplatesUI();
-  EXPECT_EQ(0, GetOverviewGridList()[0]->num_incognito_windows());
-  EXPECT_EQ(0, GetOverviewGridList()[0]->num_unsupported_windows());
+    // Open overview and expect the button to be disabled.
+    ToggleOverview();
+    WaitForDesksTemplatesUI();
+    EXPECT_EQ(views::Button::STATE_DISABLED,
+              GetSaveDeskAsTemplateButtonForRoot(root_window)->GetState());
 
-  aura::Window* root = Shell::GetPrimaryRootWindow();
-  auto* save_as_template_button = GetSaveDeskAsTemplateButtonForRoot(root);
-  auto* save_for_later_button = GetSaveDeskForLaterButtonForRoot(root);
-  EXPECT_EQ(views::Button::STATE_DISABLED, save_as_template_button->GetState());
-  EXPECT_EQ(views::Button::STATE_DISABLED, save_for_later_button->GetState());
+    // Exit and reopen overview, then verify that the entry count reaches the
+    // maximum.
+    ToggleOverview();
+    OpenOverviewAndShowTemplatesGrid();
+    const SavedDeskPresenter* saved_desk_presenter = SavedDeskPresenter::Get();
+    ASSERT_EQ(saved_desk_presenter->GetMaxDeskTemplateEntryCount(),
+              saved_desk_presenter->GetDeskTemplateEntryCount());
 
-  std::vector<const DeskTemplate*> entries = GetAllEntries();
+    // Verify that the button is re-enabled after we delete all entries and exit
+    // the templates grid.
+    std::vector<const DeskTemplate*> entries = GetAllEntries();
+    for (size_t i = entries.size(); i > 0; i--) {
+      DeleteTemplate(/*uuid=*/entries[i - 1]->uuid(),
+                     /*expected_current_item_count=*/i);
+    }
+    EXPECT_FALSE(GetOverviewGridList()[0]->IsShowingDesksTemplatesGrid());
+    EXPECT_EQ(views::Button::STATE_NORMAL,
+              GetSaveDeskAsTemplateButtonForRoot(root_window)->GetState());
 
-  // Exit and reopen overview to delete the template.
-  ToggleOverview();
-  OpenOverviewAndShowTemplatesGrid();
-  const SavedDeskPresenter* saved_desk_presenter = SavedDeskPresenter::Get();
-  EXPECT_EQ(saved_desk_presenter->GetMaxEntryCount(),
-            saved_desk_presenter->GetEntryCount());
-
-  // Verify that the button is re-enabled after we delete all templates and exit
-  // the templates grid.
-  for (size_t i = desk_names_template.size(); i > 0; i--) {
-    DeleteTemplate(/*uuid=*/entries[i - 1]->uuid(),
-                   /*expected_current_item_count=*/i);
+    // Exit overview.
+    ToggleOverview();
   }
-  EXPECT_FALSE(GetOverviewGridList()[0]->IsShowingDesksTemplatesGrid());
 
-  save_as_template_button = GetSaveDeskAsTemplateButtonForRoot(root);
-  save_for_later_button = GetSaveDeskForLaterButtonForRoot(root);
-  EXPECT_EQ(views::Button::STATE_NORMAL, save_as_template_button->GetState());
-  EXPECT_EQ(views::Button::STATE_NORMAL, save_for_later_button->GetState());
+  // Test `Save Desk for Later` button.
+  {
+    // Add 6 `kSaveAndRecall` entries.
+    for (size_t i = 1; i <= 6; i++) {
+      const std::string desk_name = "saved_desk " + base::NumberToString(i);
+      AddEntry(base::GUID::GenerateRandomV4(), desk_name, base::Time::Now(),
+               DeskTemplateType::kSaveAndRecall);
+    }
+
+    // Open overview and expect the button to be disabled.
+    ToggleOverview();
+    WaitForDesksTemplatesUI();
+    EXPECT_EQ(views::Button::STATE_DISABLED,
+              GetSaveDeskForLaterButtonForRoot(root_window)->GetState());
+
+    // Exit and reopen overview, then verify that the entry count reaches the
+    // maximum.
+    ToggleOverview();
+    OpenOverviewAndShowTemplatesGrid();
+    const SavedDeskPresenter* saved_desk_presenter = SavedDeskPresenter::Get();
+    ASSERT_EQ(saved_desk_presenter->GetMaxSaveAndRecallDeskEntryCount(),
+              saved_desk_presenter->GetSaveAndRecallDeskEntryCount());
+
+    // Verify that the button is re-enabled after we delete all entries and exit
+    // the templates grid.
+    std::vector<const DeskTemplate*> entries = GetAllEntries();
+    for (size_t i = entries.size(); i > 0; i--) {
+      DeleteTemplate(/*uuid=*/entries[i - 1]->uuid(),
+                     /*expected_current_item_count=*/i);
+    }
+    EXPECT_FALSE(GetOverviewGridList()[0]->IsShowingDesksTemplatesGrid());
+    EXPECT_EQ(views::Button::STATE_NORMAL,
+              GetSaveDeskForLaterButtonForRoot(root_window)->GetState());
+
+    // Exit overview.
+    ToggleOverview();
+  }
 }
 
 // Tests that clicking the save desk as template button shows the templates
diff --git a/ash/wm/desks/zero_state_button.cc b/ash/wm/desks/zero_state_button.cc
index b396f06..4c47fa1 100644
--- a/ash/wm/desks/zero_state_button.cc
+++ b/ash/wm/desks/zero_state_button.cc
@@ -101,6 +101,7 @@
   background_color_ = AshColorProvider::Get()->GetControlsLayerColor(
       AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive);
   StyleUtil::ConfigureInkDropAttributes(this, StyleUtil::kBaseColor);
+  UpdateBorderState();
   SchedulePaint();
 }
 
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc
index 7a0e5af8..0809658 100644
--- a/ash/wm/overview/overview_grid.cc
+++ b/ash/wm/overview/overview_grid.cc
@@ -1928,18 +1928,16 @@
   SaveDeskTemplateButtonContainer* container =
       static_cast<SaveDeskTemplateButtonContainer*>(
           save_desk_button_container_widget_->GetContentsView());
-  // TODO(yongshun): Once `GetEntryCount()` and `GetMaxEntryCount()` support
-  // `DeskTemplateType`, update `kSaveForLaterButton` to use its own count.
   container->UpdateButtonEnableStateAndTooltip(
       SaveDeskTemplateButton::Type::kSaveAsTemplate,
-      saved_desk_presenter->GetEntryCount(),
-      saved_desk_presenter->GetMaxEntryCount(), num_incognito_windows_,
-      num_unsupported_windows_, size());
+      saved_desk_presenter->GetDeskTemplateEntryCount(),
+      saved_desk_presenter->GetMaxDeskTemplateEntryCount(),
+      num_incognito_windows_, num_unsupported_windows_, size());
   container->UpdateButtonEnableStateAndTooltip(
       SaveDeskTemplateButton::Type::kSaveForLater,
-      saved_desk_presenter->GetEntryCount(),
-      saved_desk_presenter->GetMaxEntryCount(), num_incognito_windows_,
-      num_unsupported_windows_, size());
+      saved_desk_presenter->GetSaveAndRecallDeskEntryCount(),
+      saved_desk_presenter->GetMaxSaveAndRecallDeskEntryCount(),
+      num_incognito_windows_, num_unsupported_windows_, size());
 
   // Set the widget position above the overview item window and default width
   // and height.
diff --git a/ash/wm/overview/overview_item_view.cc b/ash/wm/overview/overview_item_view.cc
index e1fb512..8ec56f41 100644
--- a/ash/wm/overview/overview_item_view.cc
+++ b/ash/wm/overview/overview_item_view.cc
@@ -329,6 +329,11 @@
           IDS_ASH_OVERVIEW_CLOSABLE_HIGHLIGHT_ITEM_A11Y_EXTRA_TIP));
 }
 
+void OverviewItemView::OnThemeChanged() {
+  WindowMiniView::OnThemeChanged();
+  UpdateBorderState(IsViewHighlighted());
+}
+
 BEGIN_METADATA(OverviewItemView, WindowMiniView)
 END_METADATA
 
diff --git a/ash/wm/overview/overview_item_view.h b/ash/wm/overview/overview_item_view.h
index acbf569..ed87f6a0 100644
--- a/ash/wm/overview/overview_item_view.h
+++ b/ash/wm/overview/overview_item_view.h
@@ -94,6 +94,7 @@
   void OnGestureEvent(ui::GestureEvent* event) override;
   bool CanAcceptEvent(const ui::Event& event) override;
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
+  void OnThemeChanged() override;
 
  private:
   // The OverviewItem which owns the widget which houses this view. Non-null
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc
index 85a972d..4ba7de4 100644
--- a/ash/wm/overview/overview_session_unittest.cc
+++ b/ash/wm/overview/overview_session_unittest.cc
@@ -816,7 +816,8 @@
 }
 
 // Tests entering overview mode with maximized window.
-TEST_P(OverviewSessionTest, MaximizedWindow) {
+// TODO(crbug.com/1325386): Flaky.
+TEST_P(OverviewSessionTest, DISABLED_MaximizedWindow) {
   ui::ScopedAnimationDurationScaleMode anmatin_scale(
       ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
 
diff --git a/ash/wm/overview/rounded_label_widget.cc b/ash/wm/overview/rounded_label_widget.cc
index ada209c..4d14354 100644
--- a/ash/wm/overview/rounded_label_widget.cc
+++ b/ash/wm/overview/rounded_label_widget.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "ash/constants/ash_features.h"
 #include "ash/public/cpp/style/color_provider.h"
 #include "ash/public/cpp/window_properties.h"
 #include "ash/wm/overview/scoped_overview_animation_settings.h"
@@ -16,6 +17,7 @@
 #include "ui/views/background.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/label.h"
+#include "ui/views/highlight_border.h"
 
 namespace ash {
 
@@ -32,6 +34,7 @@
                    int message_id)
       : views::Label(l10n_util::GetStringUTF16(message_id),
                      views::style::CONTEXT_LABEL),
+        rounding_dp_(rounding_dp),
         preferred_height_(preferred_height) {
     SetBorder(views::CreateEmptyBorder(
         gfx::Insets::VH(vertical_padding, horizontal_padding)));
@@ -66,7 +69,17 @@
         ColorProvider::ContentLayerType::kTextColorPrimary));
   }
 
+  void OnPaintBorder(gfx::Canvas* canvas) override {
+    if (features::IsDarkLightModeEnabled()) {
+      views::HighlightBorder::PaintBorderToCanvas(
+          canvas, *this, GetLocalBounds(), gfx::RoundedCornersF(rounding_dp_),
+          views::HighlightBorder::Type::kHighlightBorder2,
+          /*use_light_colors=*/false);
+    }
+  }
+
  private:
+  const int rounding_dp_;
   const int preferred_height_;
 };
 
diff --git a/base/allocator/partition_alloc_features.cc b/base/allocator/partition_alloc_features.cc
index e64b3e4..ff4735a 100644
--- a/base/allocator/partition_alloc_features.cc
+++ b/base/allocator/partition_alloc_features.cc
@@ -11,6 +11,11 @@
 namespace base {
 namespace features {
 
+// When set, instead of crashing when encountering a dangling raw_ptr, the
+// signatures of the two stacktraces are logged. This is meant to be used only
+// by Chromium developers. See /docs/dangling_ptr.md
+const BASE_EXPORT Feature kPartitionAllocDanglingPtrRecord{
+    "PartitionAllocDanglingPtrRecord", FEATURE_DISABLED_BY_DEFAULT};
 #if defined(PA_ALLOW_PCSCAN)
 // If enabled, PCScan is turned on by default for all partitions that don't
 // disable it explicitly.
diff --git a/base/allocator/partition_alloc_features.h b/base/allocator/partition_alloc_features.h
index df79f3c..6ac878a 100644
--- a/base/allocator/partition_alloc_features.h
+++ b/base/allocator/partition_alloc_features.h
@@ -17,6 +17,7 @@
 
 namespace features {
 
+extern const BASE_EXPORT Feature kPartitionAllocDanglingPtrRecord;
 #if defined(PA_ALLOW_PCSCAN)
 extern const BASE_EXPORT Feature kPartitionAllocPCScan;
 #endif  // defined(PA_ALLOW_PCSCAN)
diff --git a/base/allocator/partition_alloc_support.cc b/base/allocator/partition_alloc_support.cc
index 730083ac..0aa9fbb 100644
--- a/base/allocator/partition_alloc_support.cc
+++ b/base/allocator/partition_alloc_support.cc
@@ -30,6 +30,8 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/no_destructor.h"
+#include "base/strings/string_piece.h"
+#include "base/strings/string_split.h"
 #include "base/strings/stringprintf.h"
 #include "base/thread_annotations.h"
 #include "base/threading/platform_thread.h"
@@ -374,6 +376,7 @@
 
 void DanglingRawPtrDetected(uintptr_t id) {
   // This is called from inside the allocator. No allocation is allowed.
+
   internal::PartitionAutoLock guard(g_stack_trace_buffer_lock);
 
 #if DCHECK_IS_ON()
@@ -392,37 +395,101 @@
   // enough.
 }
 
+// From the StackTrace recorded in |DanglingRawPtrDetected|, extract the one
+// whose id match |id|. Return nullopt if not found.
+absl::optional<debug::StackTrace> TakeStackTrace(uintptr_t id) {
+  internal::PartitionAutoLock guard(g_stack_trace_buffer_lock);
+  for (absl::optional<StackTraceWithID>& entry : g_stack_trace_buffer) {
+    if (entry && entry->id == id) {
+      debug::StackTrace stack_trace = std::move(entry->stack_trace);
+      entry = absl::nullopt;
+      return stack_trace;
+    }
+  }
+  return absl::nullopt;
+}
+
+// Extract from the StackTrace output, the signature of the pertinent caller.
+// This function is meant to be used only by Chromium developers, to list what
+// are all the dangling raw_ptr occurrences in a table.
+std::string ExtractDanglingPtrSignature(std::string stacktrace) {
+  LOG(ERROR) << stacktrace;
+  std::vector<StringPiece> lines = SplitStringPiece(
+      stacktrace, "\r\n", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
+
+  // We are looking for the callers of the function releasing the raw_ptr and
+  // freeing memory:
+  const StringPiece callees[] = {
+      "internal::BackupRefPtrImpl<>::ReleaseInternal()",
+      "internal::PartitionFree()",
+      "base::(anonymous namespace)::FreeFn()",
+  };
+  size_t caller_index = 0;
+  for (size_t i = 0; i < lines.size(); ++i) {
+    for (const auto& callee : callees) {
+      if (lines[i].find(callee) != StringPiece::npos) {
+        caller_index = i + 1;
+      }
+    }
+  }
+  if (caller_index >= lines.size()) {
+    return "undefined";
+  }
+  StringPiece caller = lines[caller_index];
+
+  // |callers| follows the following format:
+  //
+  //    #4 0x56051fe3404b content::GeneratedCodeCache::DidCreateBackend()
+  //    -- -------------- -----------------------------------------------
+  // Depth Address        Function
+
+  size_t address_start = caller.find(' ');
+  size_t function_start = caller.find(' ', address_start + 1);
+
+  if (address_start == caller.npos || function_start == caller.npos) {
+    return "undefined";
+  }
+
+  return std::string(caller.substr(function_start + 1));
+}
+
 void DanglingRawPtrReleased(uintptr_t id) {
   // This is called from raw_ptr<>'s release operation. Making allocations is
   // allowed. In particular, symbolizing and printing the StackTraces may
   // allocate memory.
 
-  internal::PartitionAutoLock guard(g_stack_trace_buffer_lock);
+  debug::StackTrace stack_trace_release;
+  absl::optional<debug::StackTrace> stack_trace_free = TakeStackTrace(id);
 
-  absl::optional<std::string> stack_trace_free;
-  std::string stack_trace_release = base::debug::StackTrace().ToString();
-  for (absl::optional<StackTraceWithID>& entry : g_stack_trace_buffer) {
-    if (entry && entry->id == id) {
-      stack_trace_free = entry->stack_trace.ToString();
-      entry = absl::nullopt;
-      break;
+  if (FeatureList::IsEnabled(features::kPartitionAllocDanglingPtrRecord)) {
+    if (stack_trace_free) {
+      LOG(ERROR) << StringPrintf(
+          "[DanglingSignature]\t%s\t%s",
+          ExtractDanglingPtrSignature(stack_trace_release.ToString()).c_str(),
+          ExtractDanglingPtrSignature(stack_trace_free->ToString()).c_str());
+    } else {
+      LOG(ERROR) << StringPrintf(
+          "[DanglingSignature]\t%s\tmissing-stacktrace",
+          ExtractDanglingPtrSignature(stack_trace_release.ToString()).c_str());
     }
+    return;
   }
 
   if (stack_trace_free) {
-    LOG(ERROR) << base::StringPrintf(
+    LOG(ERROR) << StringPrintf(
         "Detected dangling raw_ptr with id=0x%016" PRIxPTR
         ":\n\n"
         "The memory was freed at:\n%s\n"
         "The dangling raw_ptr was released at:\n%s",
-        id, stack_trace_free->c_str(), stack_trace_release.c_str());
+        id, stack_trace_free->ToString().c_str(),
+        stack_trace_release.ToString().c_str());
   } else {
-    LOG(ERROR) << base::StringPrintf(
+    LOG(ERROR) << StringPrintf(
         "Detected dangling raw_ptr with id=0x%016" PRIxPTR
         ":\n\n"
         "It was not recorded where the memory was freed.\n\n"
         "The dangling raw_ptr was released at:\n%s",
-        id, stack_trace_release.c_str());
+        id, stack_trace_release.ToString().c_str());
   }
   IMMEDIATE_CRASH();
 }
diff --git a/base/fuchsia/build_info_unittest.cc b/base/fuchsia/build_info_unittest.cc
index e0c1540..354263d 100644
--- a/base/fuchsia/build_info_unittest.cc
+++ b/base/fuchsia/build_info_unittest.cc
@@ -3,119 +3,39 @@
 // found in the LICENSE file.
 
 #include <fuchsia/buildinfo/cpp/fidl.h>
-#include <fuchsia/buildinfo/cpp/fidl_test_base.h>
 
-#include "base/bind.h"
 #include "base/fuchsia/build_info.h"
-#include "base/fuchsia/scoped_service_binding.h"
-#include "base/fuchsia/test_component_context_for_process.h"
-#include "base/location.h"
-#include "base/test/bind.h"
 #include "base/test/gtest_util.h"
-#include "base/test/task_environment.h"
-#include "base/test/test_future.h"
-#include "base/threading/sequence_bound.h"
-#include "base/threading/thread.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
 
-namespace {
-
-class FakeBuildInfoProvider
-    : public fuchsia::buildinfo::testing::Provider_TestBase {
- public:
-  FakeBuildInfoProvider(const std::string& version,
-                        TestComponentContextForProcess& component_context)
-      : version_(version),
-        binding_(component_context.additional_services(), this) {}
-  FakeBuildInfoProvider(const FakeBuildInfoProvider&) = delete;
-  FakeBuildInfoProvider& operator=(const FakeBuildInfoProvider&) = delete;
-  ~FakeBuildInfoProvider() override = default;
-
-  // fuchsia::buildinfo::testing::Provider_TestBase implementation
-  void GetBuildInfo(GetBuildInfoCallback callback) override {
-    fuchsia::buildinfo::BuildInfo build_info;
-    build_info.set_version(version_);
-    callback(std::move(build_info));
-  }
-  void NotImplemented_(const std::string& name) final {
-    ADD_FAILURE() << "Unexpected call: " << name;
-  }
-
- private:
-  std::string version_;
-  ScopedServiceBinding<fuchsia::buildinfo::Provider> binding_;
-};
-
-}  // namespace
-
-// Uses a fake "fuchsia.buildinfo.Provider" implementation.
-// clears the cached BuildInfo to ensure that each test starts with no cached
-// BuildInfo and that subsequent tests runs do not use fake values.
-class BuildInfoTest : public testing::Test {
- protected:
-  BuildInfoTest()
-      : task_environment_(
-            base::test::SingleThreadTaskEnvironment::MainThreadType::IO),
-        thread_("Helper thread") {
-    thread_.StartWithOptions(
-        base::Thread::Options(base::MessagePumpType::IO, 0));
-  }
-
-  void SetUp() override { ClearCachedBuildInfoForTesting(); }
-  void TearDown() override { ClearCachedBuildInfoForTesting(); }
-
-  void FetchBuildInfoAndWaitUntilCached() {
-    base::RunLoop run_loop;
-    thread_.task_runner()->PostTask(FROM_HERE, BindLambdaForTesting([&]() {
-                                      FetchAndCacheSystemBuildInfo();
-                                      run_loop.Quit();
-                                    }));
-    run_loop.Run();
-  }
-
-  base::test::SingleThreadTaskEnvironment task_environment_;
-  TestComponentContextForProcess component_context_;
-  base::Thread thread_;
-};
-
-TEST_F(BuildInfoTest, GetBuildInfoVersion) {
-  FakeBuildInfoProvider build_info_provider("test.version string",
-                                            component_context_);
-  FetchBuildInfoAndWaitUntilCached();
-
-  EXPECT_EQ(GetCachedBuildInfo().version(), "test.version string");
-  EXPECT_EQ(GetBuildInfoVersion(), "test.version string");
-}
-
 // Ensures that when FetchAndCacheSystemBuildInfo() has not been called in the
 // process that a  DCHECK fires to alert the developer.
-TEST_F(BuildInfoTest, FetchAndCacheSystemBuildInfoNotCalled) {
-  bool has_version = false;  // False because EXPECT_FALSE is always executed.
-  EXPECT_DCHECK_DEATH_WITH(
-      { has_version = GetCachedBuildInfo().has_version(); },
-      "FetchAndCacheSystemBuildInfo\\(\\) has not been called in this process");
-  EXPECT_FALSE(has_version);
+TEST(BuildInfoDeathTest, GetCachedBuildInfo_DcheckIfNotAlreadyFetched) {
+  // Clear the cached build info to force an error condition.
+  ClearCachedBuildInfoForTesting();
 
-  has_version = false;  // False because EXPECT_FALSE is always executed.
   EXPECT_DCHECK_DEATH_WITH(
-      { has_version = !GetBuildInfoVersion().empty(); },
+      { GetCachedBuildInfo(); },
       "FetchAndCacheSystemBuildInfo\\(\\) has not been called in this process");
-  EXPECT_FALSE(has_version);
+
+  // All test processes have BuildInfo cached before tests are run. Re-fetch and
+  // cache the BuildInfo to restore that state for any tests that are
+  // subsequently run in the same process as this one.
+  FetchAndCacheSystemBuildInfo();
 }
 
-TEST(BuildInfoFromSystemServiceTest, ValidValues) {
+TEST(BuildInfoTest, GetCachedBuildInfo_CheckExpectedValues) {
+  // Ensure the cached BuildInfo is in a known state.
   ClearCachedBuildInfoForTesting();
-
   FetchAndCacheSystemBuildInfo();
 
+  // TODO(crbug.com/1310358): Check for specific values once Fuchsia
+  // completes the requested changes to the data returned from the fake.
+  EXPECT_TRUE(GetCachedBuildInfo().has_product_config());
+  EXPECT_TRUE(GetCachedBuildInfo().has_board_config());
   EXPECT_TRUE(GetCachedBuildInfo().has_version());
-  EXPECT_FALSE(GetCachedBuildInfo().version().empty());
-
-  EXPECT_FALSE(GetBuildInfoVersion().empty());
-
-  ClearCachedBuildInfoForTesting();
+  EXPECT_TRUE(GetCachedBuildInfo().has_latest_commit_date());
 }
 
 }  // namespace base
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
index 082a7684..d2cc640 100644
--- a/base/test/test_suite.cc
+++ b/base/test/test_suite.cc
@@ -427,7 +427,7 @@
 #if BUILDFLAG(IS_FUCHSIA)
   // Cache the BuildInfo so individual tests do not need to worry about it.
   // Some ProcessUtilTest cases, which use kTestChildProcess, do not pass any
-  // services, so skip this if that switch is not found.
+  // services, so skip this if that switch was present.
   // This must be called before Initialize() because, for example,
   // content::ContentTestSuite::Initialize() may use the cached values.
   if (client_func.empty())
diff --git a/build/config/fuchsia/test/minimum.shard.test-cml b/build/config/fuchsia/test/minimum.shard.test-cml
index cdd4d096..f7ef7a5 100644
--- a/build/config/fuchsia/test/minimum.shard.test-cml
+++ b/build/config/fuchsia/test/minimum.shard.test-cml
@@ -6,7 +6,7 @@
   children: [
     {
       name: "build-info-service",
-      url: "fuchsia-pkg://fuchsia.com/build-info-service#meta/build-info.cm"
+      url: "fuchsia-pkg://fuchsia.com/fake-build-info#meta/fake_build_info.cm",
     },
     {
       name: "intl_property_manager",
diff --git a/cc/input/scrollbar_controller.cc b/cc/input/scrollbar_controller.cc
index 174da482a..1c551002 100644
--- a/cc/input/scrollbar_controller.cc
+++ b/cc/input/scrollbar_controller.cc
@@ -465,6 +465,9 @@
           : thumb_rect.width();
   float viewport_length = GetViewportLength();
 
+  if (scrollbar_track_length == scrollbar_thumb_length)
+    return 0;
+
   return (scroll_layer_length - viewport_length) /
          (scrollbar_track_length - scrollbar_thumb_length);
 }
diff --git a/cc/input/scrollbar_controller.h b/cc/input/scrollbar_controller.h
index 7664a8c..fdaf34d 100644
--- a/cc/input/scrollbar_controller.h
+++ b/cc/input/scrollbar_controller.h
@@ -166,6 +166,8 @@
                            AbortAnimatedScrollBeforeStartingAutoscroll);
   FRIEND_TEST_ALL_PREFIXES(ScrollUnifiedLayerTreeHostImplTest,
                            AutoscrollOnDeletedScrollbar);
+  FRIEND_TEST_ALL_PREFIXES(ScrollUnifiedLayerTreeHostImplTest,
+                           ScrollOnLargeThumb);
 
   // "Autoscroll" here means the continuous scrolling that occurs when the
   // pointer is held down on a hit-testable area of the scrollbar such as an
diff --git a/cc/input/threaded_input_handler.h b/cc/input/threaded_input_handler.h
index 32ab23f..08a35685 100644
--- a/cc/input/threaded_input_handler.h
+++ b/cc/input/threaded_input_handler.h
@@ -186,6 +186,8 @@
                            AutoscrollOnDeletedScrollbar);
   FRIEND_TEST_ALL_PREFIXES(ScrollUnifiedLayerTreeHostImplTest,
                            ThumbDragAfterJumpClick);
+  FRIEND_TEST_ALL_PREFIXES(ScrollUnifiedLayerTreeHostImplTest,
+                           ScrollOnLargeThumb);
   FRIEND_TEST_ALL_PREFIXES(LayerTreeHostImplTest, AutoscrollTaskAbort);
 
   // This method gets the scroll offset for a regular scroller, or the combined
diff --git a/cc/metrics/compositor_timing_history.cc b/cc/metrics/compositor_timing_history.cc
index 1eb6fe1..2d64b32 100644
--- a/cc/metrics/compositor_timing_history.cc
+++ b/cc/metrics/compositor_timing_history.cc
@@ -666,6 +666,7 @@
                                         commit_start_time_);
 
   if (enabled_ && duration_estimates_enabled_) {
+    // TODO(szager): This omits commit queueing time
     bmf_start_to_activate_duration_ +=
         begin_main_frame_end_time - commit_start_time_;
   }
@@ -788,7 +789,13 @@
     activate_duration_history_.InsertSample(activate_duration);
 
     if (duration_estimates_enabled_) {
+      // TODO(szager): MFBA means begin_main_frame_on_critical_path_ may have
+      // been overwritten by a call to WillBeginMainFrame().
       if (begin_main_frame_on_critical_path_) {
+        // TODO(szager): MFBA means bmf_start_to_activate_duration_ may have
+        // been overwritten by a call to NotifyReadyToCommit().
+        // TODO(szager): MFBA means begin_main_frame_queue_duration_ may have
+        // been overwritten by a call to BeginMainFrameAborted().
         bmf_queue_to_activate_critical_history_.InsertSample(
             bmf_start_to_activate_duration_ + activate_duration +
             begin_main_frame_queue_duration_);
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 2f316e4..3db80b2d 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -13625,6 +13625,65 @@
   host_impl_ = nullptr;
 }
 
+// Tests that no scrolls occur when thumb_len equals track_len.
+TEST_P(ScrollUnifiedLayerTreeHostImplTest, ScrollOnLargeThumb) {
+  LayerTreeSettings settings = DefaultSettings();
+  settings.compositor_threaded_scrollbar_scrolling = true;
+  CreateHostImpl(settings, CreateLayerTreeFrameSink());
+
+  // Setup the viewport.
+  const gfx::Size viewport_size = gfx::Size(360, 600);
+  const gfx::Size content_size = gfx::Size(345, 3800);
+  SetupViewportLayersOuterScrolls(viewport_size, content_size);
+  LayerImpl* scroll_layer = OuterViewportScrollLayer();
+
+  // Set up the scrollbar and its dimensions.
+  LayerTreeImpl* layer_tree_impl = host_impl_->active_tree();
+  layer_tree_impl->set_painted_device_scale_factor(2.5f);
+  auto* scrollbar = AddLayer<PaintedScrollbarLayerImpl>(
+      layer_tree_impl, ScrollbarOrientation::VERTICAL, false, true);
+  SetupScrollbarLayerCommon(scroll_layer, scrollbar);
+  scrollbar->SetHitTestable(true);
+
+  const gfx::Size scrollbar_size = gfx::Size(15, 600);
+  scrollbar->SetBounds(scrollbar_size);
+
+  // Set up the thumb dimensions.
+  scrollbar->SetThumbThickness(15);
+  scrollbar->SetThumbLength(575);
+  scrollbar->SetTrackRect(gfx::Rect(0, 15, 15, 575));
+  scrollbar->SetOffsetToTransformParent(gfx::Vector2dF(345, 0));
+
+  TestInputHandlerClient input_handler_client;
+  GetInputHandler().BindToClient(&input_handler_client);
+
+  // PointerDown on the scrollbar should populate drag_state.
+  GetInputHandler().MouseDown(gfx::PointF(350, 300),
+                              /*jump_key_modifier*/ false);
+  EXPECT_TRUE(GetInputHandler()
+                  .scrollbar_controller_for_testing()
+                  ->drag_state_.has_value());
+
+  // Moving the mouse downwards should result in no scroll.
+  InputHandlerPointerResult res =
+      GetInputHandler().MouseMoveAt(gfx::Point(350, 600));
+  EXPECT_EQ(res.scroll_delta.y(), 0);
+
+  // Moving the mouse upwards should result in no scroll.
+  res = GetInputHandler().MouseMoveAt(gfx::Point(350, 0));
+  EXPECT_EQ(res.scroll_delta.y(), 0);
+
+  // End the scroll.
+  GetInputHandler().MouseUp(gfx::PointF(350, 0));
+  EXPECT_TRUE(!GetInputHandler()
+                   .scrollbar_controller_for_testing()
+                   ->drag_state_.has_value());
+
+  // Tear down the LayerTreeHostImpl before the InputHandlerClient.
+  host_impl_->ReleaseLayerTreeFrameSink();
+  host_impl_ = nullptr;
+}
+
 // Tests that deleting a horizontal scrollbar doesn't affect the autoscroll task
 // for the vertical scrollbar.
 TEST_P(ScrollUnifiedLayerTreeHostImplTest, AutoscrollOnDeletedScrollbar) {
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java
index 607c7ec9..487262e 100644
--- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java
+++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java
@@ -325,11 +325,8 @@
     @Test
     @EnormousTest
     @CommandLineFlags.Add({BASE_PARAMS})
-    @DisableIf.Build(message = "Flaky on Android P, see https://crbug.com/1184787",
-            supported_abis_includes = "x86", sdk_is_greater_than = VERSION_CODES.O_MR1,
-            sdk_is_less_than = VERSION_CODES.Q)
-    public void
-    testGridToTabToCurrentNTP() throws InterruptedException, TimeoutException {
+    @DisableIf.Build(message = "See https://crbug.com/1184787", supported_abis_includes = "x86")
+    public void testGridToTabToCurrentNTP() throws InterruptedException, TimeoutException {
         prepareTabs(1, NTP_URL);
         reportGridToTabPerf(false, false, "Grid-to-Tab to current NTP");
     }
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
index bacaa07..63dcd02 100644
--- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
+++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
@@ -52,6 +52,7 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
+import android.os.Build.VERSION_CODES;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.uiautomator.UiDevice;
 import android.view.View;
@@ -320,8 +321,8 @@
     // clang-format off
     @EnableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study"})
     @CommandLineFlags.Add({BASE_PARAMS})
-    @DisableIf.Build(message = "Flaky on emulators; see https://crbug.com/1324721",
-        supported_abis_includes = "x86")
+    @DisableIf.Build(message = "Flaky on emulators; see https://crbug.com/1324721 "
+        + "and crbug.com/1077552", supported_abis_includes = "x86")
     public void testRenderGrid_Incognito() throws IOException {
         // clang-format on
         ChromeTabbedActivity cta = mActivityTestRule.getActivity();
@@ -516,10 +517,11 @@
     @Test
     @MediumTest
     @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    // clang-format off
     @DisableIf.Build(message = "Flaky on emulators; see https://crbug.com/1094492",
-            supported_abis_includes = "x86")
-    public void
-    testGridToTabToCurrentLiveDetached() throws Exception {
+        supported_abis_includes = "x86")
+    public void testGridToTabToCurrentLiveDetached() throws Exception {
+        // clang-format on
         assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
         // This works on emulators but not on real devices. See crbug.com/986047.
         if (!isEmulator()) return;
@@ -755,7 +757,11 @@
     @MediumTest
     @EnableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study"})
     @CommandLineFlags.Add({BASE_PARAMS})
+    // clang-format off
+    @DisableIf.Build(message = "Flaky on Android P, see https://crbug.com/1063991",
+        sdk_is_greater_than = VERSION_CODES.O_MR1, sdk_is_less_than = VERSION_CODES.Q)
     public void testIncognitoToggle_tabCount() {
+        // clang-format on
         mActivityTestRule.loadUrl(mUrl);
         ChromeTabbedActivity cta = mActivityTestRule.getActivity();
 
@@ -779,8 +785,6 @@
     // clang-format off
     @CommandLineFlags.Add({BASE_PARAMS})
     @EnableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study"})
-    @DisableIf.Build(sdk_is_less_than = Build.VERSION_CODES.M,
-            message = "https://crbug.com/1023833")
     @DisabledTest(message = "https://crbug.com/1233169")
     public void testIncognitoToggle_thumbnailFetchCount() throws InterruptedException {
         // clang-format on
@@ -935,7 +939,7 @@
     @Test
     @MediumTest
     @Feature("TabSuggestion")
-    @FlakyTest(message = "https://crbug.com/1230107")
+    @DisabledTest(message = "https://crbug.com/1230107, crbug.com/1130621")
     // clang-format off
     @EnableFeatures({ChromeFeatureList.CLOSE_TAB_SUGGESTIONS + "<Study",
             ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study"})
@@ -957,7 +961,7 @@
     @CommandLineFlags.Add({BASE_PARAMS + "/baseline_tab_suggestions/true" +
             "/baseline_close_tab_suggestions/true/min_time_between_prefetches/0/"
         + "thumbnail_aspect_ratio/1.0"})
-    @FlakyTest(message = "https://crbug.com/1198484")
+    @DisabledTest(message = "https://crbug.com/1198484, crbug.com/1130621")
     public void testShowOnlyOneTabSuggestionMessageCard_withHardCleanup()
             throws InterruptedException {
         // clang-format on
@@ -1327,6 +1331,7 @@
     // clang-format off
     @EnableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study"})
     @CommandLineFlags.Add({BASE_PARAMS + "/thumbnail_aspect_ratio/0.75"})
+    @DisabledTest(message = "http://crbug/1092987")
     public void testRecycling_aspectRatioPoint75() {
         // clang-format on
         prepareTabs(10, 0, mUrl);
@@ -1457,7 +1462,7 @@
     @CommandLineFlags.Add({BASE_PARAMS})
     @EnableFeatures({ChromeFeatureList.TAB_GROUPS_ANDROID,
             ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<study"})
-    @DisabledTest(message = "Flaky - https://crbug.com/1124041")
+    @DisabledTest(message = "Flaky - https://crbug.com/1124041, crbug.com/1061178")
     public void testSwipeToDismiss_GTS() {
         // clang-format on
         ChromeTabbedActivity cta = mActivityTestRule.getActivity();
@@ -1905,7 +1910,7 @@
     @Test
     @MediumTest
     @EnableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study"})
-    @DisabledTest(message = "crbug.com/1187320 This doesn't work with FeedV2.")
+    @DisabledTest(message = "crbug.com/1187320 This doesn't work with FeedV2 and crbug.com/1096295")
     public void testActivityCanBeGarbageCollectedAfterFinished() throws Exception {
         prepareTabs(1, 0, "about:blank");
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchCriticalTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchCriticalTest.java
index 434e37b..ccf2ce54 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchCriticalTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchCriticalTest.java
@@ -11,6 +11,7 @@
 import androidx.test.filters.SmallTest;
 
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -41,6 +42,13 @@
 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
 @Batch(Batch.PER_CLASS)
 public class ContextualSearchCriticalTest extends ContextualSearchInstrumentationBase {
+    @Override
+    @Before
+    public void setUp() throws Exception {
+        mTestPage = "/chrome/test/data/android/contextualsearch/tap_test.html";
+        super.setUp();
+    }
+
     //============================================================================================
     // Test Cases
     //============================================================================================
@@ -156,10 +164,7 @@
     @Feature({"ContextualSearch"})
     @ParameterAnnotations.UseMethodParameter(ContextualSearchManagerTest.FeatureParamProvider.class)
     // Previously flaky and disabled 4/2021.  https://crbug.com/1192285
-    @DisabledTest(
-            message = "TODO:donnd fix and reeenable once expanding resolve works for base tests.")
-    public void
-    testResolveDisablePreload(@EnabledFeature int enabledFeature) throws Exception {
+    public void testResolveDisablePreload(@EnabledFeature int enabledFeature) throws Exception {
         simulateSlowResolveSearch("intelligence");
 
         assertSearchTermRequested();
@@ -179,7 +184,7 @@
     @SmallTest
     @Feature({"ContextualSearch"})
     @ParameterAnnotations.UseMethodParameter(ContextualSearchManagerTest.FeatureParamProvider.class)
-    @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/765403")
+    //   @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/765403")
     @DisabledTest(
             message = "TODO:donnd fix and reeenable once expanding resolve works for base tests.")
     public void
@@ -337,9 +342,11 @@
     @SmallTest
     @Feature({"ContextualSearch"})
     @ParameterAnnotations.UseMethodParameter(ContextualSearchManagerTest.FeatureParamProvider.class)
-    @DisabledTest(message = "http://crbug.com/1296677")
     public void testChainedSearchCreatesNewContent(@EnabledFeature int enabledFeature)
             throws Exception {
+        // This flakes when running the Translations Feature, probably due to DOMUtils issues.
+        if (enabledFeature == EnabledFeature.TRANSLATIONS) return;
+
         // This test depends on preloading the content - which is loaded and not made visible.
         // We only preload when the user has decided to accept the privacy opt-in.
         mPolicy.overrideDecidedStateForTesting(true);
@@ -470,7 +477,6 @@
     @SmallTest
     @Feature({"ContextualSearch"})
     @ParameterAnnotations.UseMethodParameter(ContextualSearchManagerTest.FeatureParamProvider.class)
-    @DisabledTest(message = "http://crbug.com/1296677")
     public void testTapCloseRemovedFromHistory(@EnabledFeature int enabledFeature)
             throws Exception {
         // Simulate a resolving search and make sure a URL was loaded.
@@ -492,7 +498,7 @@
     @SmallTest
     @Feature({"ContextualSearch"})
     @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
-    @DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.O, message = "crbug.com/1184410")
+    //  @DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.O, message = "crbug.com/1184410")
     @ParameterAnnotations.UseMethodParameter(ContextualSearchManagerTest.FeatureParamProvider.class)
     @DisabledTest(
             message = "TODO:donnd fix and reeenable once expanding resolve works for base tests.")
@@ -520,10 +526,7 @@
     @SmallTest
     @Feature({"ContextualSearch"})
     @DisableIf.Build(sdk_is_less_than = Build.VERSION_CODES.P, message = "crbug.com/1161540")
-    @DisabledTest(
-            message = "TODO:donnd fix and reeenable once expanding resolve works for base tests.")
-    public void
-    testChainedTapsRemovedFromHistory() throws Exception {
+    public void testChainedTapsRemovedFromHistory() throws Exception {
         // Make sure we use tap for the simulateResolveSearch since only tap chains.
         FeatureList.setTestFeatures(ENABLE_NONE);
 
@@ -555,4 +558,4 @@
         Assert.assertTrue(mFakeServer.hasRemovedUrl(url2));
         Assert.assertTrue(mFakeServer.hasRemovedUrl(url3));
     }
-}
\ No newline at end of file
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSystemTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSystemTest.java
index 13acc9e8..b9c1ead 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSystemTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSystemTest.java
@@ -37,7 +37,6 @@
 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
 import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
 import org.chromium.chrome.test.util.ChromeTabUtils;
-import org.chromium.chrome.test.util.OmniboxTestUtils;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.test.util.KeyUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
@@ -83,14 +82,11 @@
         }
     }
 
-    private OmniboxTestUtils mOmnibox;
-
     @Override
     @Before
     public void setUp() throws Exception {
         mTestPage = "/chrome/test/data/android/contextualsearch/simple_test.html";
         super.setUp();
-        mOmnibox = new OmniboxTestUtils(sActivityTestRule.getActivity());
     }
 
     //============================================================================================
@@ -151,30 +147,6 @@
     }
 
     //============================================================================================
-    // Omnibox
-    //============================================================================================
-
-    /**
-     * Tests whether the contextual search panel hides when omnibox is clicked.
-     */
-    //@SmallTest
-    //@Feature({"ContextualSearch"})
-    @Test
-    @ParameterAnnotations.UseMethodParameter(FeatureParamProvider.class)
-    @FlakyTest(message = "Flaked in 2017.  https://crbug.com/707529")
-    public void testHidesWhenOmniboxFocused() throws Exception {
-        clickWordNode("intelligence");
-
-        Assert.assertEquals("Intelligence", mFakeServer.getSearchTermRequested());
-        fakeResponse(false, 200, "Intelligence", "display-text", "alternate-term", false);
-        assertContainsParameters("Intelligence", "alternate-term");
-        waitForPanelToPeek();
-
-        mOmnibox.requestFocus();
-        assertPanelClosedOrUndefined();
-    }
-
-    //============================================================================================
     // Tab Crash
     //============================================================================================
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
index 3abc16eb..bc2ad4e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
@@ -493,7 +493,7 @@
         // If the ContentSettingsType.NUM_TYPES value changes *and* a new value has been exposed on
         // Android, then please update this code block to include a test for your new type.
         // Otherwise, just update count in the assert.
-        Assert.assertEquals(76, ContentSettingsType.NUM_TYPES);
+        Assert.assertEquals(77, ContentSettingsType.NUM_TYPES);
         websitePreferenceBridge.addContentSettingException(
                 new ContentSettingException(ContentSettingsType.COOKIES, googleOrigin,
                         ContentSettingValues.DEFAULT, preferenceSource));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilTest.java
index c14eec9c..623bfac 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilTest.java
@@ -426,7 +426,7 @@
     @CommandLineFlags.Add({BASE_PARAMS + "/" + TAB_SWITCHER_ON_RETURN_MS_PARAM + "/0"
             + "/start_surface_variation/single"})
     @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
-    @DisabledTest(message = "https://crbug.com/1023079")
+    @DisabledTest(message = "https://crbug.com/1023079, crbug.com/1063984")
     public void testInitialScrollIndex() throws Exception {
         // clang-format on
         // Instant start is not applicable since we need to create tabs and restart.
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index ce0e1e0..6635efd 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -6004,6 +6004,18 @@
         <message name="IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER" desc="about:browser-switch/internals, section URL Checker, the text shows in which browser will open the URL">
           Opens in: <ph name="OPEN_BROWSER">$1</ph>
         </message>
+        <message name="IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_PROTOCOL_REASON" desc="about:browser-switch/internals, section URL Checker, the explaination reason for check result, when the entered URL are not supported, it will list out supported URL">
+          Reason: LBS only supports http://, https://, and file:// URLs.
+        </message>
+        <message name="IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_RULE_REASON" desc="about:browser-switch/internals, section URL Checker, the explaination reason for check result, displayed when the entered URL matched the rule in provided list">
+          Reason: <ph name="RULE">$1<ex>example.com</ex></ph> was found in the "<ph name="LIST_NAME">$2<ex>Force open in</ex></ph>" list.
+        </message>
+        <message name="IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_INVERT_RULE_REASON" desc="about:browser-switch/internals, section URL Checker, the explaination reason for check result, displayed when the entered URL matched the inverted rule in Force open in list">
+          Reason: The inverted rule <ph name="REVERT_RULE">$1<ex>!example.com</ex></ph> was found in the "Force open in" list.
+        </message>
+        <message name="IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_DEFAULT_REASON" desc="about:browser-switch/internals, section URL Checker, the explaination reason for check result, displayed when the entered URL did not match any listed rule and default browser will not get switched">
+          Reason: LBS stays in <ph name="DEFAULT_OPEN_BROWSER">$1<ex>Chromium</ex></ph> by default.
+        </message>
         <message name="IDS_ABOUT_BROWSER_SWITCH_INTERNALS_INVALID_URL" desc="about:browser-switch/internals, section URL Checker, specific error message when the url is invalid">
           Invalid URL. Make sure it is formatted properly.
         </message>
diff --git a/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_DEFAULT_REASON.png.sha1 b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_DEFAULT_REASON.png.sha1
new file mode 100644
index 0000000..8e21f6e8
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_DEFAULT_REASON.png.sha1
@@ -0,0 +1 @@
+78500bc491766cace5bb543e65983c5c50d2d958
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_INVERT_RULE_REASON.png.sha1 b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_INVERT_RULE_REASON.png.sha1
new file mode 100644
index 0000000..1856a2f
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_INVERT_RULE_REASON.png.sha1
@@ -0,0 +1 @@
+28a218c9aedf981b10851e5dd569c978ea8bd090
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_PROTOCOL_REASON.png.sha1 b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_PROTOCOL_REASON.png.sha1
new file mode 100644
index 0000000..ddb43e2cc
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_PROTOCOL_REASON.png.sha1
@@ -0,0 +1 @@
+ca9b3a1090a264b169cd975a128e2b6c46791b04
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_RULE_REASON.png.sha1 b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_RULE_REASON.png.sha1
new file mode 100644
index 0000000..30f28c43
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_RULE_REASON.png.sha1
@@ -0,0 +1 @@
+49c372340dcb9bf4e9df40461d4ac70c77499116
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 961d6f7..e691f44 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1122,6 +1122,8 @@
     "permissions/last_tab_standing_tracker_observer.h",
     "permissions/last_tab_standing_tracker_tab_helper.cc",
     "permissions/last_tab_standing_tracker_tab_helper.h",
+    "permissions/notifications_engagement_service_factory.cc",
+    "permissions/notifications_engagement_service_factory.h",
     "permissions/permission_actions_history_factory.cc",
     "permissions/permission_actions_history_factory.h",
     "permissions/permission_auditing_service_factory.cc",
diff --git a/chrome/browser/accessibility/ax_screen_ai_annotator.cc b/chrome/browser/accessibility/ax_screen_ai_annotator.cc
index 0b3a69ef..c000da8 100644
--- a/chrome/browser/accessibility/ax_screen_ai_annotator.cc
+++ b/chrome/browser/accessibility/ax_screen_ai_annotator.cc
@@ -31,12 +31,12 @@
       browser_->tab_strip_model()->GetActiveWebContents();
   if (!web_contents)
     return;
-  gfx::NativeWindow native_window = web_contents->GetContentNativeView();
-  if (!native_window)
+  gfx::NativeView native_view = web_contents->GetContentNativeView();
+  if (!native_view)
     return;
 
   ui::GrabViewSnapshotAsync(
-      native_window, gfx::Rect(web_contents->GetSize()),
+      native_view, gfx::Rect(web_contents->GetSize()),
       base::BindOnce(&AXScreenAIAnnotator::OnScreenshotReceived,
                      weak_ptr_factory_.GetWeakPtr(),
                      web_contents->GetMainFrame()->GetAXTreeID()));
diff --git a/chrome/browser/apps/app_shim/app_shim_manager_mac.cc b/chrome/browser/apps/app_shim/app_shim_manager_mac.cc
index ecb98b2..bff3cc5 100644
--- a/chrome/browser/apps/app_shim/app_shim_manager_mac.cc
+++ b/chrome/browser/apps/app_shim/app_shim_manager_mac.cc
@@ -44,6 +44,7 @@
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/profile_picker.h"
 #include "chrome/browser/ui/ui_features.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/web_applications/app_shim_registry_mac.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut_mac.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -713,8 +714,31 @@
   // Otherwise, only launch if there are no open windows.
   if (!do_launch) {
     bool had_windows = delegate_->ShowAppWindows(profile, params.app_id);
-    if (profile_state)
-      had_windows |= !profile_state->browsers.empty();
+    if (!had_windows && profile_state && !profile_state->browsers.empty()) {
+      // Try to activate the most recently used open window.
+      BrowserList* browsers = BrowserList::GetInstance();
+      Browser* browser = nullptr;
+      for (auto it = browsers->begin_browsers_ordered_by_activation();
+           it != browsers->end_browsers_ordered_by_activation(); ++it) {
+        if ((*it)->profile() != profile)
+          continue;
+        if (!(*it)->app_controller())
+          continue;
+        if ((*it)->app_controller()->app_id() != params.app_id)
+          continue;
+        browser = *it;
+        break;
+      }
+
+      // If iterating the browsers by activation order didn't find any matching
+      // windows fall back to showing an arbitrary one from our ProfileState
+      // instead.
+      if (!browser)
+        browser = *(profile_state->browsers.begin());
+
+      browser->window()->Show();
+      had_windows = true;
+    }
 
     if (!had_windows)
       do_launch = true;
diff --git a/chrome/browser/ash/arc/input_overlay/ui/action_tag.h b/chrome/browser/ash/arc/input_overlay/ui/action_tag.h
index 0e15dea..08718e2 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/action_tag.h
+++ b/chrome/browser/ash/arc/input_overlay/ui/action_tag.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_ASH_ARC_INPUT_OVERLAY_UI_ACTION_TAG_H_
 #define CHROME_BROWSER_ASH_ARC_INPUT_OVERLAY_UI_ACTION_TAG_H_
 
+#include "base/memory/raw_ptr.h"
 #include "base/strings/string_piece_forward.h"
 #include "chrome/browser/ash/arc/input_overlay/constants.h"
 #include "chrome/browser/ash/arc/input_overlay/db/proto/app_data.pb.h"
@@ -42,8 +43,8 @@
   void InitTextTag();
   void InitImageTag();
 
-  ActionImage* image_ = nullptr;
-  ActionLabel* label_ = nullptr;
+  raw_ptr<ActionImage> image_ = nullptr;
+  raw_ptr<ActionLabel> label_ = nullptr;
 };
 
 }  // namespace input_overlay
diff --git a/chrome/browser/ash/arc/input_overlay/ui/edit_mode_exit_view.h b/chrome/browser/ash/arc/input_overlay/ui/edit_mode_exit_view.h
index 3e221b69..0ecea075 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/edit_mode_exit_view.h
+++ b/chrome/browser/ash/arc/input_overlay/ui/edit_mode_exit_view.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/memory/raw_ptr.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/views/view.h"
 
@@ -54,12 +55,12 @@
   void OnSaveButtonPressed();
   void OnCancelButtonPressed();
 
-  ash::PillButton* reset_button_ = nullptr;
-  ash::PillButton* save_button_ = nullptr;
-  ash::PillButton* cancel_button_ = nullptr;
+  raw_ptr<ash::PillButton> reset_button_ = nullptr;
+  raw_ptr<ash::PillButton> save_button_ = nullptr;
+  raw_ptr<ash::PillButton> cancel_button_ = nullptr;
 
   // DisplayOverlayController owns |this| class, no need to deallocate.
-  DisplayOverlayController* const display_overlay_controller_ = nullptr;
+  const raw_ptr<DisplayOverlayController> display_overlay_controller_ = nullptr;
 };
 
 }  // namespace input_overlay
diff --git a/chrome/browser/ash/login/encryption_migration_browsertest.cc b/chrome/browser/ash/login/encryption_migration_browsertest.cc
index f509686..0eaf767 100644
--- a/chrome/browser/ash/login/encryption_migration_browsertest.cc
+++ b/chrome/browser/ash/login/encryption_migration_browsertest.cc
@@ -339,7 +339,9 @@
                    .has_account_id());
 }
 
-IN_PROC_BROWSER_TEST_F(EncryptionMigrationTest, MigrateWithInsuficientSpace) {
+// TODO(crbug.com/1325374): Flaky.
+IN_PROC_BROWSER_TEST_F(EncryptionMigrationTest,
+                       DISABLED_MigrateWithInsuficientSpace) {
   set_free_space(5 * 1000 * 1000);
   MarkUserHasEnterprisePolicy();
 
diff --git a/chrome/browser/ash/login/screens/fingerprint_setup_browsertest.cc b/chrome/browser/ash/login/screens/fingerprint_setup_browsertest.cc
index c51a2ad..3fa9f77 100644
--- a/chrome/browser/ash/login/screens/fingerprint_setup_browsertest.cc
+++ b/chrome/browser/ash/login/screens/fingerprint_setup_browsertest.cc
@@ -39,7 +39,7 @@
 constexpr char kTestFingerprintDataString[] = "testFinger";
 constexpr char kAnimationUrlAttribute[] = "animationUrl";
 constexpr char kCheckmarkAnimationUrl[] =
-    "chrome://theme/IDR_FINGERPRINT_COMPLETE_TICK";
+    "chrome://theme/IDR_FINGERPRINT_COMPLETE_CHECK_LIGHT";
 
 int kMaxAllowedFingerprints = 3;
 
diff --git a/chrome/browser/ash/printing/oauth2/test_authorization_server_unittest.cc b/chrome/browser/ash/printing/oauth2/test_authorization_server_unittest.cc
index 1b5419e..ba36c52d 100644
--- a/chrome/browser/ash/printing/oauth2/test_authorization_server_unittest.cc
+++ b/chrome/browser/ash/printing/oauth2/test_authorization_server_unittest.cc
@@ -11,7 +11,7 @@
 #include "base/bind.h"
 #include "base/check.h"
 #include "base/containers/flat_map.h"
-#include "base/json/json_reader.h"
+#include "base/test/values_test_util.h"
 #include "base/values.h"
 #include "net/http/http_status_code.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
@@ -124,10 +124,9 @@
   // Check the response.
   EXPECT_EQ(GetHttpStatus(url_loader.get()),
             static_cast<int>(net::HttpStatusCode::HTTP_OK));
-  auto parsed = base::JSONReader::Read(response_payload);
-  ASSERT_TRUE(parsed);
-  ASSERT_TRUE(parsed->is_dict());
-  EXPECT_EQ(*parsed, base::Value(std::move(content)));
+  base::Value parsed = base::test::ParseJson(response_payload);
+  ASSERT_TRUE(parsed.is_dict());
+  EXPECT_EQ(parsed, base::Value(std::move(content)));
 }
 
 TEST(PrintingOAuth2TestAuthorizationServerTest,
diff --git a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
index 728bc1894..00494f8 100644
--- a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
@@ -254,8 +254,7 @@
     // elements in a form to determine if the form is ready for interaction.
     feature_list_.InitWithFeatures(
         /*enabled_features=*/{features::kAutofillAcrossIframes,
-                              features::kAutofillShowTypePredictions,
-                              features::kAutofillUseUnassociatedListedElements},
+                              features::kAutofillShowTypePredictions},
         /*disabled_features=*/{});
     command_line->AppendSwitchASCII(
         variations::switches::kVariationsOverrideCountry, "us");
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
index de59953..69190e4 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -772,6 +772,10 @@
         delete_end, website_settings_filter);
 #endif
 
+    host_content_settings_map_->ClearSettingsForOneTypeWithPredicate(
+        ContentSettingsType::NOTIFICATION_INTERACTIONS, base::Time(),
+        base::Time::Max(), website_settings_filter);
+
     PermissionDecisionAutoBlockerFactory::GetForProfile(profile_)
         ->RemoveEmbargoAndResetCounts(filter);
   }
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
index a16914e..29e290a 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -123,7 +123,6 @@
 #include "components/permissions/permission_uma_util.h"
 #include "components/permissions/permission_util.h"
 #include "components/permissions/request_type.h"
-#include "components/prefs/testing_pref_service.h"
 #include "components/privacy_sandbox/privacy_sandbox_settings.h"
 #include "components/safe_browsing/core/browser/verdict_cache_manager.h"
 #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
@@ -511,8 +510,6 @@
 
   [[nodiscard]] bool Init(Profile* profile) {
     // Setup required dependencies for segmentation platform:
-    segmentation_platform::SegmentationPlatformServiceFactory::GetInstance()
-        ->set_local_state_for_testing(&local_state_);
     EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
     TestingBrowserProcess::GetGlobal()->SetProfileManager(
         std::make_unique<FakeProfileManager>(temp_dir_.GetPath()));
@@ -549,7 +546,6 @@
 
  private:
   ukm::TestUkmRecorder ukm_recorder_;
-  TestingPrefServiceSimple local_state_;
   base::ScopedTempDir temp_dir_;
   raw_ptr<history::HistoryService> history_service_;
   segmentation_platform::UkmDataManagerTestUtils test_utils_;
diff --git a/chrome/browser/browsing_topics/browsing_topics_internals_browsertest.cc b/chrome/browser/browsing_topics/browsing_topics_internals_browsertest.cc
index 866b7440..24b6924 100644
--- a/chrome/browser/browsing_topics/browsing_topics_internals_browsertest.cc
+++ b/chrome/browser/browsing_topics/browsing_topics_internals_browsertest.cc
@@ -128,6 +128,23 @@
     return html_content;
   }
 
+  std::string GetHostsClassificationInputValidationError() {
+    std::string html_content = EvalJsInWebUI(R"(
+let result = '';
+
+let errorsDiv = document.querySelector('#hosts-classification-input-validation-error');
+
+if (errorsDiv.style.display !== 'none') {
+  Array.from(errorsDiv.children).forEach((errorDiv) => {
+    result += errorDiv.textContent + '\n';
+  });
+}
+
+result
+      )");
+    return html_content;
+  }
+
   std::string GetHostsClassificationResultTableContent() {
     std::string html_content = EvalJsInWebUI(R"(
 let result = '';
@@ -570,6 +587,44 @@
             R"(foo1.com|1. Arts & entertainment;2. Acting & theater;|
 foo2.com|3. Comics;4. Concerts & music festivals;5. Dance;|
 )");
+
+  EXPECT_TRUE(GetHostsClassificationInputValidationError().empty());
+}
+
+IN_PROC_BROWSER_TEST_F(BrowsingTopicsInternalsBrowserTest,
+                       ClassifierTab_InvalidInput) {
+  fixed_browsing_topics_service()->SetWebUIGetBrowsingTopicsStateResultOverride(
+      browsing_topics::mojom::WebUIGetBrowsingTopicsStateResult::
+          NewOverrideStatusMessage("Failed to get the topics state."));
+
+  // Configure the (mock) model.
+  test_page_content_annotator_.UsePageTopics(
+      *optimization_guide::TestModelInfoBuilder()
+           .SetVersion(1)
+           .SetModelFilePath(
+               base::FilePath::FromASCII("/test_path/test_model.tflite"))
+           .Build(),
+      {{"foo2.com", TopicsWithUniformWeight({3, 4, 5}, 0.1)},
+       {"foo1.com", TopicsWithUniformWeight({1, 2}, 0.1)}});
+
+  EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(),
+                                           GURL(kBrowsingTopicsInternalsUrl)));
+
+  constexpr char classify_hosts_script[] = R"(
+    document.querySelector('#input-hosts-textarea').value = 'foo1.com\nhttps://foo1.com\nfoo1.com/path';
+    document.querySelector('#hosts-classification-button').click();
+  )";
+
+  EXPECT_TRUE(ExecJs(web_contents()->GetMainFrame(), classify_hosts_script,
+                     content::EXECUTE_SCRIPT_DEFAULT_OPTIONS,
+                     /*world_id=*/1));
+
+  EXPECT_TRUE(GetHostsClassificationResultTableContent().empty());
+
+  EXPECT_EQ(GetHostsClassificationInputValidationError(),
+            R"(Host "https://foo1.com" contains invalid character: "/"
+Host "foo1.com/path" contains invalid character: "/"
+)");
 }
 
 }  // namespace browsing_topics
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 67c2161..d1e3d8f 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -629,6 +629,10 @@
 #include "base/win/windows_h_disallowed.h"
 #endif  // defined(_WINDOWS_)
 
+#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
+#include "components/services/screen_ai/public/cpp/utilities.h"
+#endif
+
 using blink::mojom::EffectiveConnectionType;
 using blink::web_pref::WebPreferences;
 using content::BrowserThread;
@@ -6367,6 +6371,17 @@
     CHECK(client->SetParameter(sandbox::policy::kParamSodaLanguagePackPath,
                                soda_language_pack_path.value()));
     return true;
+  } else if (sandbox_type == sandbox::mojom::Sandbox::kScreenAI) {
+#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
+    base::FilePath screen_ai_component_path =
+        screen_ai::GetLatestLibraryFilePath();
+    if (screen_ai_component_path.empty())
+      return false;
+
+    CHECK(client->SetParameter(sandbox::policy::kParamScreenAiComponentPath,
+                               screen_ai_component_path.value()));
+    return true;
+#endif
   }
 
   return false;
diff --git a/chrome/browser/download/android/java/res/drawable/infobar_download_complete.xml b/chrome/browser/download/android/java/res/drawable/infobar_download_complete.xml
index c6dc146..5f2cf030 100644
--- a/chrome/browser/download/android/java/res/drawable/infobar_download_complete.xml
+++ b/chrome/browser/download/android/java/res/drawable/infobar_download_complete.xml
@@ -11,7 +11,7 @@
 
     <path
         android:name="circle"
-        android:fillColor="@color/icon_animated_faded_color"
+        android:fillColor="@color/icon_animated_faded_color_list"
         android:fillAlpha="0"
         android:pathData="M 0,12 C 0,6 6,0 12,0 C 18,0 24,6 24,12 C 24,18 18,24 12,24 C 6,24 0,18 0,12"/>
 
diff --git a/chrome/browser/download/bubble/download_bubble_controller.cc b/chrome/browser/download/bubble/download_bubble_controller.cc
index 46af2be..1c58fb8 100644
--- a/chrome/browser/download/bubble/download_bubble_controller.cc
+++ b/chrome/browser/download/bubble/download_bubble_controller.cc
@@ -28,6 +28,7 @@
 
 namespace {
 constexpr int kShowDownloadsInBubbleForNumDays = 1;
+constexpr int kMaxDownloadsToShow = 100;
 
 bool FindOfflineItemByContentId(const ContentId& to_find,
                                 const OfflineItem& candidate) {
@@ -271,6 +272,10 @@
     if (model->ShouldShowInBubble() &&
         DownloadUIModelIsRecent(model, cutoff_time)) {
       models_aggregate.push_back(std::move(model));
+      // Show up to kMaxDownloadsToShow number of downloads, to address OOM
+      // crashes.
+      if (models_aggregate.size() >= kMaxDownloadsToShow)
+        return models_aggregate;
     }
   }
   std::vector<download::DownloadItem*> download_items;
@@ -284,6 +289,10 @@
     if (model->ShouldShowInBubble() &&
         DownloadUIModelIsRecent(model, cutoff_time)) {
       models_aggregate.push_back(std::move(model));
+      // Show up to kMaxDownloadsToShow number of downloads, to address OOM
+      // crashes.
+      if (models_aggregate.size() >= kMaxDownloadsToShow)
+        return models_aggregate;
     }
   }
 
diff --git a/chrome/browser/download/internal/android/java/res/drawable/downloading_fill_animation_24dp.xml b/chrome/browser/download/internal/android/java/res/drawable/downloading_fill_animation_24dp.xml
index d2f8e60..7c61b2b 100644
--- a/chrome/browser/download/internal/android/java/res/drawable/downloading_fill_animation_24dp.xml
+++ b/chrome/browser/download/internal/android/java/res/drawable/downloading_fill_animation_24dp.xml
@@ -17,7 +17,7 @@
 
             <path
                 android:name="arrow_grey"
-                android:fillColor="@color/icon_animated_faded_color"
+                android:fillColor="@color/icon_animated_faded_color_list"
                 android:pathData="M30,15 L42,15 L42,30 L52,30 L36,46 L20,30 L30,30 Z"
                 android:strokeColor="@android:color/transparent"/>
 
@@ -36,7 +36,7 @@
             <path
                 android:name="bar_grey"
                 android:pathData="M12,54 L60,54"
-                android:strokeColor="@color/icon_animated_faded_color"
+                android:strokeColor="@color/icon_animated_faded_color_list"
                 android:strokeWidth="6"/>
 
             <path
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorFactory.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorFactory.java
index 4204ae9..4aae639 100644
--- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorFactory.java
+++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorFactory.java
@@ -22,7 +22,8 @@
     public static DownloadInterstitialCoordinator create(
             Supplier<Context> contextSupplier, String downloadUrl, WindowAndroid windowAndroid) {
         return new DownloadInterstitialCoordinatorImpl(contextSupplier, downloadUrl,
-                OfflineContentAggregatorFactory.get(), SnackbarManagerProvider.from(windowAndroid));
+                OfflineContentAggregatorFactory.get(), SnackbarManagerProvider.from(windowAndroid),
+                () -> NewDownloadTab.closeExistingNewDownloadTab(windowAndroid));
     }
 
     private DownloadInterstitialCoordinatorFactory() {}
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorImpl.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorImpl.java
index a848830..1e14796 100644
--- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorImpl.java
+++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialCoordinatorImpl.java
@@ -32,12 +32,13 @@
      * @param snackbarManager Snackbar manager for the current activity.
      */
     public DownloadInterstitialCoordinatorImpl(Supplier<Context> contextSupplier,
-            String downloadUrl, OfflineContentProvider provider, SnackbarManager snackbarManager) {
+            String downloadUrl, OfflineContentProvider provider, SnackbarManager snackbarManager,
+            Runnable closeRunnable) {
         mView = DownloadInterstitialView.create(contextSupplier.get());
         PropertyModel model =
                 new PropertyModel.Builder(DownloadInterstitialProperties.ALL_KEYS).build();
         mMediator = new DownloadInterstitialMediator(contextSupplier, model, downloadUrl, provider,
-                snackbarManager, SharedPreferencesManager.getInstance());
+                snackbarManager, SharedPreferencesManager.getInstance(), closeRunnable);
         mModelChangeProcessor = PropertyModelChangeProcessor.create(
                 model, mView, DownloadInterstitialViewBinder::bind);
     }
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediator.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediator.java
index 7745981..3d20b94 100644
--- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediator.java
+++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediator.java
@@ -62,6 +62,7 @@
     private final SnackbarManager mSnackbarManager;
     private final OfflineContentProvider.Observer mObserver;
     private final SharedPreferencesManager mSharedPrefs;
+    private final Runnable mCloseRunnable;
     private boolean mDownloadIsComplete;
     private boolean mPendingDeletion;
 
@@ -77,13 +78,14 @@
      */
     DownloadInterstitialMediator(Supplier<Context> contextSupplier, PropertyModel model,
             String downloadUrl, OfflineContentProvider provider, SnackbarManager snackbarManager,
-            SharedPreferencesManager sharedPrefs) {
+            SharedPreferencesManager sharedPrefs, Runnable closeRunnable) {
         mContextSupplier = contextSupplier;
         mModel = model;
         mDownloadUrl = downloadUrl;
         mProvider = provider;
         mSnackbarManager = snackbarManager;
         mSharedPrefs = sharedPrefs;
+        mCloseRunnable = closeRunnable;
 
         mModel.set(ListProperties.ENABLE_ITEM_ANIMATIONS, true);
         mModel.set(ListProperties.CALLBACK_OPEN, this::onOpenItem);
@@ -105,7 +107,7 @@
      */
     void destroy() {
         mProvider.removeObserver(mObserver);
-        if (mPendingDeletion || mModel.get(STATE) == State.CANCELLED) {
+        if (mPendingDeletion || mModel.get(STATE) == State.PENDING_REMOVAL) {
             mProvider.removeItem(mModel.get(DOWNLOAD_ITEM).id);
         }
         clearDownloadPendingRemoval();
@@ -137,7 +139,7 @@
                 mModel.set(SECONDARY_BUTTON_IS_VISIBLE, true);
                 mDownloadIsComplete = true;
                 break;
-            case State.CANCELLED:
+            case State.PENDING_REMOVAL:
                 mModel.set(TITLE_TEXT, mContextSupplier.get().getString(R.string.menu_download));
                 mModel.set(PRIMARY_BUTTON_TEXT,
                         mContextSupplier.get().getString(R.string.menu_download));
@@ -174,16 +176,16 @@
     }
 
     private void onCancelItem(OfflineItem item) {
-        setState(State.CANCELLED);
         storeDownloadPendingRemoval(item.id);
         mProvider.pauseDownload(item.id);
+        setState(State.PENDING_REMOVAL);
     }
 
     private void onDeleteItem(OfflineItem item) {
         mPendingDeletion = true;
         storeDownloadPendingRemoval(item.id);
         showDeletedSnackbar();
-        setState(State.CANCELLED);
+        setState(State.PENDING_REMOVAL);
     }
 
     private void onShareItem(OfflineItem item) {
@@ -265,8 +267,11 @@
                     setState(State.SUCCESSFUL);
                 } else if (item.state == OfflineItemState.PAUSED
                         && mModel.get(STATE) != State.PAUSED
-                        && mModel.get(STATE) != State.CANCELLED) {
+                        && mModel.get(STATE) != State.PENDING_REMOVAL) {
                     setState(State.PAUSED);
+                } else if (item.state == OfflineItemState.CANCELLED
+                        && mModel.get(STATE) != State.PENDING_REMOVAL) {
+                    mCloseRunnable.run();
                 }
             }
         };
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediatorTest.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediatorTest.java
index 37b9993..5b6645ab 100644
--- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediatorTest.java
+++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialMediatorTest.java
@@ -76,7 +76,8 @@
         mModel.set(DownloadInterstitialProperties.SECONDARY_BUTTON_TEXT, CANCEL_BUTTON_TEXT);
         mProvider.addItem(mItem0);
         mMediator = new DownloadInterstitialMediator(InstrumentationRegistry::getContext, mModel,
-                mItem0.originalUrl, mProvider, mSnackbarManager, sharedPrefsManager);
+                mItem0.originalUrl, mProvider, mSnackbarManager, sharedPrefsManager,
+                () -> { mMediator = null; });
         // Increment progress to trigger onItemUpdated method for OfflineContentProvider observers.
         // This attaches the OfflineItem to the mediator.
         mProvider.incrementProgress(mItem0.id);
@@ -111,7 +112,7 @@
         mModel.set(DOWNLOAD_ITEM, null);
         mMediator = new DownloadInterstitialMediator(InstrumentationRegistry::getContext, mModel,
                 item1.originalUrl, mProvider, mSnackbarManager,
-                SharedPreferencesManager.getInstance());
+                SharedPreferencesManager.getInstance(), () -> { mMediator = null; });
         mProvider.incrementProgress(mItem0.id);
         mProvider.addItem(item1);
         mProvider.incrementProgress(item1.id);
@@ -125,7 +126,7 @@
         assertEquals(OfflineItemState.IN_PROGRESS, mModel.get(DOWNLOAD_ITEM).state);
         clickButtonWithText(CANCEL_BUTTON_TEXT);
 
-        assertEquals(DownloadInterstitialProperties.State.CANCELLED, mModel.get(STATE));
+        assertEquals(DownloadInterstitialProperties.State.PENDING_REMOVAL, mModel.get(STATE));
         assertNotEquals(OfflineItemState.IN_PROGRESS, mModel.get(DOWNLOAD_ITEM).state);
     }
 
@@ -195,7 +196,7 @@
         clickButtonWithText(DELETE_BUTTON_TEXT);
 
         assertTrue(mSnackbarShown);
-        assertEquals(DownloadInterstitialProperties.State.CANCELLED, mModel.get(STATE));
+        assertEquals(DownloadInterstitialProperties.State.PENDING_REMOVAL, mModel.get(STATE));
     }
 
     @Test
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialProperties.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialProperties.java
index 3e1718ce..f7850fc 100644
--- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialProperties.java
+++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialProperties.java
@@ -19,7 +19,8 @@
  * UI containing a download ListItem.
  */
 interface DownloadInterstitialProperties extends ListProperties {
-    @IntDef({State.UNKNOWN, State.IN_PROGRESS, State.SUCCESSFUL, State.CANCELLED, State.PAUSED})
+    @IntDef({State.UNKNOWN, State.IN_PROGRESS, State.SUCCESSFUL, State.PENDING_REMOVAL,
+            State.PAUSED})
     /**
      * Keeps track of the state of the DownloadInterstitial. This may be different to the state of
      * the offline item displayed within the UI.
@@ -28,7 +29,7 @@
         int UNKNOWN = 0;
         int IN_PROGRESS = 1;
         int SUCCESSFUL = 2;
-        int CANCELLED = 3;
+        int PENDING_REMOVAL = 3;
         int PAUSED = 4;
     }
 
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialView.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialView.java
index 6379779aa..b5df2ba 100644
--- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialView.java
+++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/interstitial/DownloadInterstitialView.java
@@ -80,7 +80,7 @@
      */
     void updateFileInfo(OfflineItem item, PropertyModel model) {
         // TODO(alexmitra): Investigate removing code which sets the item's state directly.
-        if (model.get(STATE) == DownloadInterstitialProperties.State.CANCELLED) {
+        if (model.get(STATE) == DownloadInterstitialProperties.State.PENDING_REMOVAL) {
             item.state = OfflineItemState.CANCELLED;
         } else if (model.get(STATE) == DownloadInterstitialProperties.State.SUCCESSFUL) {
             item.state = OfflineItemState.COMPLETE;
diff --git a/chrome/browser/extensions/api/commands/command_service.cc b/chrome/browser/extensions/api/commands/command_service.cc
index d5cd77518..37a16ed 100644
--- a/chrome/browser/extensions/api/commands/command_service.cc
+++ b/chrome/browser/extensions/api/commands/command_service.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/extensions/extension_keybinding_registry.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/accelerator_utils.h"
-#include "chrome/common/extensions/api/commands/commands_handler.h"
 #include "chrome/common/pref_names.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/scoped_user_pref_update.h"
@@ -31,6 +30,7 @@
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/notification_types.h"
+#include "extensions/common/api/commands/commands_handler.h"
 #include "extensions/common/feature_switch.h"
 #include "extensions/common/manifest_constants.h"
 #include "extensions/common/permissions/permissions_data.h"
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
index 16e1a8d..895965a 100644
--- a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
+++ b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
@@ -608,7 +608,9 @@
 
 // Tests that if the user hits "backspace" (leaving the extension keyword mode),
 // the extension suggestions are not sent.
-IN_PROC_BROWSER_TEST_P(OmniboxApiTest, ExtensionSuggestionsOnlyInKeywordMode) {
+// TODO(crbug.com/1325409): Flaky.
+IN_PROC_BROWSER_TEST_P(OmniboxApiTest,
+                       DISABLED_ExtensionSuggestionsOnlyInKeywordMode) {
   static constexpr char kManifest[] =
       R"({
            "name": "Basic Send Suggestions",
diff --git a/chrome/browser/extensions/api/printing/printing_api_handler_unittest.cc b/chrome/browser/extensions/api/printing/printing_api_handler_unittest.cc
index 6c49fae..8014e25 100644
--- a/chrome/browser/extensions/api/printing/printing_api_handler_unittest.cc
+++ b/chrome/browser/extensions/api/printing/printing_api_handler_unittest.cc
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include "base/containers/span.h"
-#include "base/json/json_reader.h"
 #include "base/run_loop.h"
+#include "base/test/values_test_util.h"
 #include "base/values.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/chromeos/printing/test_cups_wrapper.h"
@@ -185,10 +185,8 @@
   api::printing::SubmitJobRequest request;
   request.job.printer_id = printer_id;
   request.job.title = title;
-  absl::optional<base::Value> ticket_value = base::JSONReader::Read(ticket);
-  DCHECK(ticket_value.has_value());
   EXPECT_TRUE(api::printer_provider::PrintJob::Ticket::Populate(
-      ticket_value.value(), &request.job.ticket));
+      base::test::ParseJson(ticket), &request.job.ticket));
   request.job.content_type = content_type;
   request.document_blob_uuid = std::move(document_blob_uuid);
 
diff --git a/chrome/browser/extensions/api/printing/printing_api_utils_unittest.cc b/chrome/browser/extensions/api/printing/printing_api_utils_unittest.cc
index 4e6219f..73307d8 100644
--- a/chrome/browser/extensions/api/printing/printing_api_utils_unittest.cc
+++ b/chrome/browser/extensions/api/printing/printing_api_utils_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/browser/extensions/api/printing/printing_api_utils.h"
 
-#include "base/json/json_reader.h"
+#include "base/test/values_test_util.h"
 #include "chromeos/crosapi/mojom/local_printer.mojom.h"
 #include "chromeos/printing/printer_configuration.h"
 #include "printing/backend/print_backend.h"
@@ -155,10 +155,9 @@
 }
 
 TEST(PrintingApiUtilsTest, ParsePrintTicket) {
-  absl::optional<base::Value> cjt_ticket = base::JSONReader::Read(kCjt);
-  ASSERT_TRUE(cjt_ticket);
+  base::Value cjt_ticket = base::test::ParseJson(kCjt);
   std::unique_ptr<printing::PrintSettings> settings =
-      ParsePrintTicket(std::move(*cjt_ticket));
+      ParsePrintTicket(std::move(cjt_ticket));
 
   ASSERT_TRUE(settings);
   EXPECT_EQ(printing::mojom::ColorModel::kGray, settings->color());
@@ -173,10 +172,8 @@
 }
 
 TEST(PrintingApiUtilsTest, ParsePrintTicket_IncompleteCjt) {
-  absl::optional<base::Value> incomplete_cjt_ticket =
-      base::JSONReader::Read(kIncompleteCjt);
-  ASSERT_TRUE(incomplete_cjt_ticket);
-  EXPECT_FALSE(ParsePrintTicket(std::move(*incomplete_cjt_ticket)));
+  base::Value incomplete_cjt_ticket = base::test::ParseJson(kIncompleteCjt);
+  EXPECT_FALSE(ParsePrintTicket(std::move(incomplete_cjt_ticket)));
 }
 
 TEST(PrintingApiUtilsTest, CheckSettingsAndCapabilitiesCompatibility) {
diff --git a/chrome/browser/feed/android/BUILD.gn b/chrome/browser/feed/android/BUILD.gn
index 95b3c0a..c7ecded 100644
--- a/chrome/browser/feed/android/BUILD.gn
+++ b/chrome/browser/feed/android/BUILD.gn
@@ -161,7 +161,7 @@
   sources = [
     "java/res/color/chip_hairline_color_list.xml",
     "java/res/color/header_title_text_color_list.xml",
-    "java/res/color/menu_footer_chip_background_baseline.xml",
+    "java/res/color/menu_footer_chip_background_baseline_list.xml",
     "java/res/color/menu_footer_chip_background_list.xml",
     "java/res/color/tab_layout_text_color_list.xml",
     "java/res/drawable-hdpi/follow_accelerator_shadow.9.png",
diff --git a/chrome/browser/feed/android/java/res/color/menu_footer_chip_background_baseline.xml b/chrome/browser/feed/android/java/res/color/menu_footer_chip_background_baseline_list.xml
similarity index 100%
rename from chrome/browser/feed/android/java/res/color/menu_footer_chip_background_baseline.xml
rename to chrome/browser/feed/android/java/res/color/menu_footer_chip_background_baseline_list.xml
diff --git a/chrome/browser/feed/android/java/res/values/styles.xml b/chrome/browser/feed/android/java/res/values/styles.xml
index 13549343..f6842d7 100644
--- a/chrome/browser/feed/android/java/res/values/styles.xml
+++ b/chrome/browser/feed/android/java/res/values/styles.xml
@@ -9,7 +9,7 @@
         <!-- TODO(crbug.com/1152592): Figure out why setting TextAppearance isn't working for
              ChipView. -->
         <item name="primaryTextAppearance">@style/TextAppearance.MenuChip.Text.Blue</item>
-        <item name="chipColor">@color/menu_footer_chip_background_baseline</item>
+        <item name="chipColor">@color/menu_footer_chip_background_baseline_list</item>
         <item name="solidColorChip">true</item>
         <item name="textAlignStart">true</item>
         <item name="reduceEndPadding">true</item>
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 02cf4fe..f8d8869 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -3972,7 +3972,7 @@
   },
   {
     "name": "mac-syscall-sandbox",
-    "owners": [ "kerrnel@google.com" ],
+    "owners": [ "rsesek@google.com" ],
     "expiry_milestone": 88
   },
   {
diff --git a/chrome/browser/headless/headless_mode_browsertest.cc b/chrome/browser/headless/headless_mode_browsertest.cc
index f6eb9884..44deea1 100644
--- a/chrome/browser/headless/headless_mode_browsertest.cc
+++ b/chrome/browser/headless/headless_mode_browsertest.cc
@@ -28,6 +28,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/common/chrome_switches.h"
+#include "content/public/common/content_switches.h"
 #include "content/public/test/browser_task_environment.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
@@ -61,6 +62,22 @@
   ASSERT_TRUE(headless::IsChromeNativeHeadless());
 }
 
+void HeadlessModeBrowserTestWithStartWindowMode::SetUpCommandLine(
+    base::CommandLine* command_line) {
+  HeadlessModeBrowserTest::SetUpCommandLine(command_line);
+
+  switch (start_window_mode()) {
+    case kStartWindowNormal:
+      break;
+    case kStartWindowMaximized:
+      command_line->AppendSwitch(switches::kStartMaximized);
+      break;
+    case kStartWindowFullscreen:
+      command_line->AppendSwitch(switches::kStartFullscreen);
+      break;
+  }
+}
+
 #if BUILDFLAG(IS_LINUX)
 IN_PROC_BROWSER_TEST_F(HeadlessModeBrowserTest, OzonePlatformHeadless) {
   // On Linux, the Native Headless Chrome uses Ozone/Headless.
diff --git a/chrome/browser/headless/headless_mode_browsertest.h b/chrome/browser/headless/headless_mode_browsertest.h
index ad9727f..6bbfa63 100644
--- a/chrome/browser/headless/headless_mode_browsertest.h
+++ b/chrome/browser/headless/headless_mode_browsertest.h
@@ -7,6 +7,7 @@
 
 #include "base/command_line.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "testing/gtest/include/gtest/gtest.h"
 
 class HeadlessModeBrowserTest : public InProcessBrowserTest {
  public:
@@ -23,4 +24,28 @@
   void SetUpOnMainThread() override;
 };
 
+enum StartWindowMode {
+  kStartWindowNormal,
+  kStartWindowMaximized,
+  kStartWindowFullscreen,
+};
+
+class HeadlessModeBrowserTestWithStartWindowMode
+    : public HeadlessModeBrowserTest,
+      public testing::WithParamInterface<StartWindowMode> {
+ public:
+  HeadlessModeBrowserTestWithStartWindowMode() = default;
+
+  HeadlessModeBrowserTestWithStartWindowMode(
+      const HeadlessModeBrowserTestWithStartWindowMode&) = delete;
+  HeadlessModeBrowserTestWithStartWindowMode& operator=(
+      const HeadlessModeBrowserTestWithStartWindowMode&) = delete;
+
+  ~HeadlessModeBrowserTestWithStartWindowMode() override = default;
+
+  void SetUpCommandLine(base::CommandLine* command_line) override;
+
+  StartWindowMode start_window_mode() const { return GetParam(); };
+};
+
 #endif  // CHROME_BROWSER_HEADLESS_HEADLESS_MODE_BROWSERTEST_H_
diff --git a/chrome/browser/headless/headless_mode_browsertest_mac.mm b/chrome/browser/headless/headless_mode_browsertest_mac.mm
index f09d293..03fbc16 100644
--- a/chrome/browser/headless/headless_mode_browsertest_mac.mm
+++ b/chrome/browser/headless/headless_mode_browsertest_mac.mm
@@ -11,7 +11,13 @@
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-IN_PROC_BROWSER_TEST_F(HeadlessModeBrowserTest,
+INSTANTIATE_TEST_SUITE_P(HeadlessModeBrowserTestWithStartWindowMode,
+                         HeadlessModeBrowserTestWithStartWindowMode,
+                         testing::Values(kStartWindowNormal,
+                                         kStartWindowMaximized,
+                                         kStartWindowFullscreen));
+
+IN_PROC_BROWSER_TEST_P(HeadlessModeBrowserTestWithStartWindowMode,
                        BrowserDesktopWindowVisibility) {
   // On Mac, the Native Headless Chrome browser window exists and is
   // visible, while the underlying platform window is hidden.
diff --git a/chrome/browser/lacros/browser_service_lacros.cc b/chrome/browser/lacros/browser_service_lacros.cc
index 80f75c5..9342bd6 100644
--- a/chrome/browser/lacros/browser_service_lacros.cc
+++ b/chrome/browser/lacros/browser_service_lacros.cc
@@ -36,7 +36,7 @@
 #include "chrome/browser/ui/browser_navigator_params.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/profile_picker.h"
-#include "chrome/browser/ui/startup/first_run_lacros.h"
+#include "chrome/browser/ui/startup/lacros_first_run_service.h"
 #include "chrome/browser/ui/startup/startup_browser_creator.h"
 #include "chrome/browser/ui/startup/startup_tab.h"
 #include "chrome/browser/ui/views/tabs/tab_scrubber_chromeos.h"
@@ -100,10 +100,13 @@
     case Profile::CREATE_STATUS_INITIALIZED:
       DCHECK(profile);
 
-      if (can_trigger_fre && ShouldOpenPrimaryProfileFirstRun(profile)) {
+      auto* fre_service =
+          LacrosFirstRunServiceFactory::GetForBrowserContext(profile);
+      DCHECK(fre_service);
+      if (can_trigger_fre && fre_service->ShouldOpenFirstRun()) {
         // TODO(https://crbug.com/1313848): Consider taking a
         // `ScopedProfileKeepAlive`.
-        OpenPrimaryProfileFirstRunIfNeeded(
+        fre_service->OpenFirstRunIfNeeded(
             base::BindOnce(&MaybeProceedWithProfile, std::move(callback),
                            base::Unretained(profile)));
       } else {
diff --git a/chrome/browser/lacros/browser_service_lacros_browsertest.cc b/chrome/browser/lacros/browser_service_lacros_browsertest.cc
index 0dc009a..01fb848 100644
--- a/chrome/browser/lacros/browser_service_lacros_browsertest.cc
+++ b/chrome/browser/lacros/browser_service_lacros_browsertest.cc
@@ -25,7 +25,7 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/profile_picker.h"
 #include "chrome/browser/ui/profile_ui_test_utils.h"
-#include "chrome/browser/ui/startup/first_run_lacros.h"
+#include "chrome/browser/ui/startup/lacros_first_run_service.h"
 #include "chrome/browser/ui/views/session_crashed_bubble_view.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
index 1dcc7f4..b785352e 100644
--- a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
+++ b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
@@ -875,6 +875,9 @@
 class GetDisplayMediaChangeSourceBrowserTest : public WebRtcTestBase {
  public:
   void SetUpInProcessBrowserTestFixture() override {
+    feature_list_.InitWithFeatures(
+        {media::kShareThisTabInsteadButtonGetDisplayMedia}, {});
+
     WebRtcTestBase::SetUpInProcessBrowserTestFixture();
 
     DetectErrorsInJavaScript();
@@ -889,6 +892,9 @@
     command_line->AppendSwitchASCII(
         switches::kAutoSelectTabCaptureSourceByTitle, kCapturedTabTitle);
   }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(GetDisplayMediaChangeSourceBrowserTest, ChangeSource) {
diff --git a/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc b/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc
index b8ad3a1..ce8f2ba3 100644
--- a/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc
+++ b/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc
@@ -1,6 +1,7 @@
 // Copyright 2022 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
+#include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
@@ -21,6 +22,7 @@
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/public/common/input/web_mouse_event.h"
 
 namespace {
 class AnchorElementPreloaderBrowserTest
@@ -44,6 +46,12 @@
     subresource_filter::SubresourceFilterBrowserTest::SetUp();
   }
 
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    // Without this flag, clicks emitted by SimulateMouseClickOrTapElementWithId
+    // are suppressed in these tests.
+    command_line->AppendSwitch("allow-pre-commit-input");
+  }
+
   void SetUpOnMainThread() override {
     subresource_filter::SubresourceFilterBrowserTest::SetUpOnMainThread();
     host_resolver()->ClearRules();
@@ -102,16 +110,12 @@
   std::unique_ptr<base::HistogramTester> histogram_tester_;
 };
 
-IN_PROC_BROWSER_TEST_F(AnchorElementPreloaderBrowserTest, OneAnchorTest) {
+IN_PROC_BROWSER_TEST_F(AnchorElementPreloaderBrowserTest, OneAnchor) {
   const GURL& url = GetTestURL("/one_anchor.html");
   EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
-  EXPECT_TRUE(content::ExecuteScript(
-      browser()->tab_strip_model()->GetActiveWebContents(),
-      R"(
-                const a = document.getElementById('anchor1');
-                var e = new PointerEvent('pointerdown', {isPrimary: true});
-                a.dispatchEvent(e);
-              )"));
+  content::SimulateMouseClickOrTapElementWithId(
+      browser()->tab_strip_model()->GetActiveWebContents(), "anchor1");
+
   WaitForPreresolveCountForURL(1);
   EXPECT_EQ(1, preresolve_count_);
   ukm::SourceId ukm_source_id = browser()
@@ -140,13 +144,8 @@
 IN_PROC_BROWSER_TEST_F(AnchorElementPreloaderBrowserTest, InvalidHref) {
   const GURL& url = GetTestURL("/invalid_href_anchor.html");
   EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
-  EXPECT_TRUE(content::ExecuteScript(
-      browser()->tab_strip_model()->GetActiveWebContents(),
-      R"(
-                const a = document.getElementById('anchor2');
-                var e = new PointerEvent('pointerdown', {isPrimary: true});
-                a.dispatchEvent(e);
-              )"));
+  content::SimulateMouseClickOrTapElementWithId(
+      browser()->tab_strip_model()->GetActiveWebContents(), "anchor2");
   EXPECT_EQ(0, preresolve_count_);
 
   histogram_tester()->ExpectTotalCount(
@@ -168,15 +167,9 @@
 IN_PROC_BROWSER_TEST_F(AnchorElementPreloaderBrowserTest, DISABLED_IframeTest) {
   const GURL& url = GetTestURL("/iframe_anchor.html");
   EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
-  EXPECT_TRUE(content::ExecuteScript(
-      browser()->tab_strip_model()->GetActiveWebContents(),
-      R"(
-                const iframe = document.getElementById('iframe1');
-                const iframe_doc = iframe.contentWindow.document;
-                const a = iframe_doc.getElementById('iframe_anchor');
-                var e = new PointerEvent('pointerdown', {isPrimary: true});
-                a.dispatchEvent(e);
-             )"));
+  content::SimulateMouseClickAt(
+      browser()->tab_strip_model()->GetActiveWebContents(), 0,
+      blink::WebMouseEvent::Button::kLeft, gfx::Point(200, 200));
   WaitForPreresolveCountForURL(1);
   EXPECT_EQ(1, preresolve_count_);
 
@@ -209,13 +202,8 @@
                                  prefetch::PreloadPagesState::kNoPreloading);
   const GURL& url = GetTestURL("/one_anchor.html");
   EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
-  EXPECT_TRUE(content::ExecuteScript(
-      browser()->tab_strip_model()->GetActiveWebContents(),
-      R"(
-                const a = document.getElementById('anchor1');
-                var e = new PointerEvent('pointerdown', {isPrimary: true});
-                a.dispatchEvent(e);
-             )"));
+  content::SimulateMouseClickOrTapElementWithId(
+      browser()->tab_strip_model()->GetActiveWebContents(), "anchor1");
   EXPECT_EQ(0, preresolve_count_);
 
   histogram_tester()->ExpectTotalCount(
@@ -237,13 +225,10 @@
     : public AnchorElementPreloaderBrowserTest {
  public:
   void SetFeatures() override {
-    feature_list_holdback_.InitAndEnableFeatureWithParameters(
+    feature_list_.InitAndEnableFeatureWithParameters(
         blink::features::kAnchorElementInteraction,
         {{"preconnect_holdback", "true"}});
   }
-
- private:
-  base::test::ScopedFeatureList feature_list_holdback_;
 };
 
 IN_PROC_BROWSER_TEST_F(AnchorElementPreloaderHoldbackBrowserTest,
@@ -251,15 +236,16 @@
   const GURL& url = GetTestURL("/one_anchor.html");
   EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
 
-  EXPECT_TRUE(content::ExecuteScript(
-      browser()->tab_strip_model()->GetActiveWebContents(),
-      R"(
-                const a = document.getElementById('anchor1');
-                var e = new PointerEvent('pointerdown', {isPrimary: true});
-                a.dispatchEvent(e);
-             )"));
+  content::SimulateMouseClickOrTapElementWithId(
+      browser()->tab_strip_model()->GetActiveWebContents(), "anchor1");
   EXPECT_EQ(0, preresolve_count_);
 
+  while (
+      histogram_tester()
+          ->GetAllSamples(kPreloadingAnchorElementPreloaderPreloadingTriggered)
+          .empty()) {
+    base::RunLoop().RunUntilIdle();
+  }
   histogram_tester()->ExpectTotalCount(
       kPreloadingAnchorElementPreloaderPreloadingTriggered, 1);
 
diff --git a/chrome/browser/notifications/persistent_notification_handler.cc b/chrome/browser/notifications/persistent_notification_handler.cc
index 7ff0592..45a3e5d 100644
--- a/chrome/browser/notifications/persistent_notification_handler.cc
+++ b/chrome/browser/notifications/persistent_notification_handler.cc
@@ -14,7 +14,9 @@
 #include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/notifications/platform_notification_service_factory.h"
 #include "chrome/browser/notifications/platform_notification_service_impl.h"
+#include "chrome/browser/permissions/notifications_engagement_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
+#include "components/permissions/features.h"
 #include "components/permissions/permission_uma_util.h"
 #include "components/permissions/permission_util.h"
 #include "components/site_engagement/content/site_engagement_service.h"
@@ -131,6 +133,15 @@
   site_engagement::SiteEngagementService::Get(profile)
       ->HandleNotificationInteraction(origin);
 
+  if (base::FeatureList::IsEnabled(
+          permissions::features::kNotificationInteractionHistory)) {
+    auto* service =
+        NotificationsEngagementServiceFactory::GetForProfile(profile);
+    // This service might be missing for incognito profiles and in tests.
+    if (service)
+      service->RecordNotificationInteraction(origin);
+  }
+
   content::NotificationEventDispatcher::GetInstance()
       ->DispatchNotificationClickEvent(
           profile, notification_id, origin, action_index, reply,
diff --git a/chrome/browser/notifications/platform_notification_service_impl.cc b/chrome/browser/notifications/platform_notification_service_impl.cc
index 362fedd..ebdc9212 100644
--- a/chrome/browser/notifications/platform_notification_service_impl.cc
+++ b/chrome/browser/notifications/platform_notification_service_impl.cc
@@ -23,6 +23,7 @@
 #include "chrome/browser/notifications/metrics/notification_metrics_logger_factory.h"
 #include "chrome/browser/notifications/notification_display_service.h"
 #include "chrome/browser/notifications/notification_display_service_factory.h"
+#include "chrome/browser/permissions/notifications_engagement_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
@@ -30,6 +31,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/permissions/features.h"
 #include "components/permissions/permission_uma_util.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_change_registrar.h"
@@ -257,6 +259,15 @@
   NotificationMetricsLoggerFactory::GetForBrowserContext(profile_)
       ->LogPersistentNotificationShown();
 
+  if (base::FeatureList::IsEnabled(
+          permissions::features::kNotificationInteractionHistory)) {
+    auto* service =
+        NotificationsEngagementServiceFactory::GetForProfile(profile_);
+    // This service might be missing for incognito profiles and in tests.
+    if (service)
+      service->RecordNotificationDisplayed(notification.origin_url());
+  }
+
   permissions::PermissionUmaUtil::RecordPermissionUsage(
       ContentSettingsType::NOTIFICATIONS, profile_, nullptr,
       notification.origin_url());
diff --git a/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc b/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc
index 523b7334..7f36587 100644
--- a/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc
+++ b/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc
@@ -168,12 +168,17 @@
   base::test::ScopedFeatureList feature_list_;
 };
 
-IN_PROC_BROWSER_TEST_F(PageViewportInLCPTest, DISABLED_FullSizeImageInIframe) {
+IN_PROC_BROWSER_TEST_F(PageViewportInLCPTest, FullSizeImageInIframe) {
+  auto waiter = std::make_unique<page_load_metrics::PageLoadMetricsTestWaiter>(
+      web_contents());
+  waiter->AddSubFrameExpectation(page_load_metrics::PageLoadMetricsTestWaiter::
+                                     TimingField::kLargestContentfulPaint);
   Start();
   StartTracing({"loading"});
   Load("/full_size_image.html");
   double lcpTime = EvalJs(web_contents(), "waitForLCP()").ExtractDouble();
 
+  waiter->Wait();
   // Navigate away to force metrics recording.
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank")));
 
diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc
index 3a19df9..c3f440d 100644
--- a/chrome/browser/password_manager/password_manager_browsertest.cc
+++ b/chrome/browser/password_manager/password_manager_browsertest.cc
@@ -1223,8 +1223,10 @@
   // Use autofill predictions
   autofill::ChromeAutofillClient* autofill_client =
       autofill::ChromeAutofillClient::FromWebContents(WebContents());
-  autofill_client->PropagateAutofillPredictions(WebContents()->GetMainFrame(),
-                                                {&form_structure});
+  autofill_client->PropagateAutofillPredictions(
+      autofill::ContentAutofillDriver::GetForRenderFrameHost(
+          WebContents()->GetMainFrame()),
+      {&form_structure});
 
   // Check original values before interaction
   CheckElementValue("username_field", "example@example.com");
@@ -1285,8 +1287,10 @@
   // Use autofill predictions
   autofill::ChromeAutofillClient* autofill_client =
       autofill::ChromeAutofillClient::FromWebContents(WebContents());
-  autofill_client->PropagateAutofillPredictions(WebContents()->GetMainFrame(),
-                                                {&form_structure});
+  autofill_client->PropagateAutofillPredictions(
+      autofill::ContentAutofillDriver::GetForRenderFrameHost(
+          WebContents()->GetMainFrame()),
+      {&form_structure});
 
   // Check original values before interaction
   CheckElementValue("username_field", "example@example.com");
diff --git a/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc b/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc
index 1ab22e1..7a0d3d4 100644
--- a/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc
+++ b/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc
@@ -216,9 +216,7 @@
   void SetUpCommandLine(base::CommandLine* command_line) override {
     feature_list_.InitWithFeatures(
         /*enabled_features=*/{autofill::features::kAutofillShowTypePredictions,
-                              features::kUsernameFirstFlow,
-                              autofill::features::
-                                  kAutofillUseUnassociatedListedElements},
+                              features::kUsernameFirstFlow},
         {});
     command_line->AppendSwitch(autofill::switches::kShowAutofillSignatures);
     captured_sites_test_utils::TestRecipeReplayer::SetUpHostResolverRules(
diff --git a/chrome/browser/permissions/notifications_engagement_service_factory.cc b/chrome/browser/permissions/notifications_engagement_service_factory.cc
new file mode 100644
index 0000000..364f875
--- /dev/null
+++ b/chrome/browser/permissions/notifications_engagement_service_factory.cc
@@ -0,0 +1,41 @@
+// Copyright 2022 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/permissions/notifications_engagement_service_factory.h"
+
+#include "base/memory/singleton.h"
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/permissions/notifications_engagement_service.h"
+
+// static
+NotificationsEngagementServiceFactory*
+NotificationsEngagementServiceFactory::GetInstance() {
+  return base::Singleton<NotificationsEngagementServiceFactory>::get();
+}
+
+// static
+permissions::NotificationsEngagementService*
+NotificationsEngagementServiceFactory::GetForProfile(Profile* profile) {
+  return static_cast<permissions::NotificationsEngagementService*>(
+      GetInstance()->GetServiceForBrowserContext(profile, true));
+}
+
+NotificationsEngagementServiceFactory::NotificationsEngagementServiceFactory()
+    : BrowserContextKeyedServiceFactory(
+          "NotificationsEngagementService",
+          BrowserContextDependencyManager::GetInstance()) {
+  DependsOn(HostContentSettingsMapFactory::GetInstance());
+}
+
+NotificationsEngagementServiceFactory::
+    ~NotificationsEngagementServiceFactory() = default;
+
+KeyedService* NotificationsEngagementServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  Profile* profile = Profile::FromBrowserContext(context);
+  return new permissions::NotificationsEngagementService(context,
+                                                         profile->GetPrefs());
+}
diff --git a/chrome/browser/permissions/notifications_engagement_service_factory.h b/chrome/browser/permissions/notifications_engagement_service_factory.h
new file mode 100644
index 0000000..4f6b61af
--- /dev/null
+++ b/chrome/browser/permissions/notifications_engagement_service_factory.h
@@ -0,0 +1,48 @@
+// Copyright 2022 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_PERMISSIONS_NOTIFICATIONS_ENGAGEMENT_SERVICE_FACTORY_H_
+#define CHROME_BROWSER_PERMISSIONS_NOTIFICATIONS_ENGAGEMENT_SERVICE_FACTORY_H_
+
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "components/permissions/notifications_engagement_service.h"
+
+class Profile;
+
+namespace base {
+template <typename T>
+struct DefaultSingletonTraits;
+}
+
+namespace content {
+class BrowserContext;
+}
+
+class NotificationsEngagementServiceFactory
+    : public BrowserContextKeyedServiceFactory {
+ public:
+  static NotificationsEngagementServiceFactory* GetInstance();
+
+  static permissions::NotificationsEngagementService* GetForProfile(
+      Profile* profile);
+
+  // Non-copyable, non-moveable.
+  NotificationsEngagementServiceFactory(
+      const NotificationsEngagementServiceFactory&) = delete;
+  NotificationsEngagementServiceFactory& operator=(
+      const NotificationsEngagementServiceFactory&) = delete;
+
+ private:
+  friend struct base::DefaultSingletonTraits<
+      NotificationsEngagementServiceFactory>;
+
+  NotificationsEngagementServiceFactory();
+  ~NotificationsEngagementServiceFactory() override;
+
+  // BrowserContextKeyedServiceFactory:
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+};
+
+#endif  // CHROME_BROWSER_PERMISSIONS_NOTIFICATIONS_ENGAGEMENT_SERVICE_FACTORY_H_
diff --git a/chrome/browser/permissions/notifications_engagement_service_unittest.cc b/chrome/browser/permissions/notifications_engagement_service_unittest.cc
new file mode 100644
index 0000000..b342a91
--- /dev/null
+++ b/chrome/browser/permissions/notifications_engagement_service_unittest.cc
@@ -0,0 +1,302 @@
+// Copyright 2022 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/permissions/notifications_engagement_service_factory.h"
+
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/test/browser_task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/supervised_user/supervised_user_metrics_service.h"
+#include "chrome/browser/supervised_user/supervised_user_metrics_service_factory.h"
+#endif
+
+namespace permissions {
+constexpr char kEngagementKey[] = "click_count";
+constexpr char kDisplayedKey[] = "display_count";
+
+class NotificationsEngagementServiceTest : public testing::Test {
+ public:
+  NotificationsEngagementServiceTest()
+      : profile_(std::make_unique<TestingProfile>()) {}
+
+  void SetUp() override;
+
+  NotificationsEngagementServiceTest(
+      const NotificationsEngagementServiceTest&) = delete;
+  NotificationsEngagementServiceTest& operator=(
+      const NotificationsEngagementServiceTest&) = delete;
+
+ protected:
+  NotificationsEngagementService* service() {
+    return NotificationsEngagementServiceFactory::GetForProfile(profile());
+  }
+
+  TestingProfile* profile() { return profile_.get(); }
+
+  content::BrowserTaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+
+ private:
+  std::unique_ptr<TestingProfile> profile_;
+};
+
+void NotificationsEngagementServiceTest::SetUp() {
+  testing::Test::SetUp();
+
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+  // Disable supervised user metrics reporting, otherwise the calls to
+  // FastForwardUntilNoTasksRemain() never return.
+  SupervisedUserMetricsServiceFactory::GetForBrowserContext(profile())
+      ->Shutdown();
+#endif
+}
+
+TEST_F(NotificationsEngagementServiceTest,
+       NotificationsEngagementContentSetting) {
+  GURL hosts[] = {GURL("https://google.com/"),
+                  GURL("https://www.youtube.com/")};
+
+  // Record initial display date to enable comparing dictionaries.
+  std::string displayedDate =
+      service()->GetBucketLabelForLastMonday(base::Time::Now());
+
+  ContentSettingsForOneType notifications_engagement_setting;
+  HostContentSettingsMap* host_content_settings_map =
+      HostContentSettingsMapFactory::GetForProfile(profile());
+
+  // Testing the dictionary of URLS
+  host_content_settings_map->GetSettingsForOneType(
+      ContentSettingsType::NOTIFICATION_INTERACTIONS,
+      &notifications_engagement_setting);
+  ASSERT_EQ(0U, notifications_engagement_setting.size());
+
+  // Test that a new Dict entry is added when no entry existed for the given
+  // URL.
+  service()->RecordNotificationDisplayed(hosts[0]);
+  service()->RecordNotificationDisplayed(hosts[0]);
+  host_content_settings_map->GetSettingsForOneType(
+      ContentSettingsType::NOTIFICATION_INTERACTIONS,
+      &notifications_engagement_setting);
+  ASSERT_EQ(1U, notifications_engagement_setting.size());
+
+  // Advance time to set same URL entries in different dates.
+  task_environment_.FastForwardBy(base::Days(8));
+  std::string displayedDateLater =
+      service()->GetBucketLabelForLastMonday(base::Time::Now());
+
+  // Test that the same URL entry is not duplicated.
+  service()->RecordNotificationDisplayed(hosts[0]);
+  service()->RecordNotificationInteraction(hosts[0]);
+  host_content_settings_map->GetSettingsForOneType(
+      ContentSettingsType::NOTIFICATION_INTERACTIONS,
+      &notifications_engagement_setting);
+  ASSERT_EQ(1U, notifications_engagement_setting.size());
+
+  // Test that different entries are created for different URL.
+  service()->RecordNotificationDisplayed(hosts[1]);
+  host_content_settings_map->GetSettingsForOneType(
+      ContentSettingsType::NOTIFICATION_INTERACTIONS,
+      &notifications_engagement_setting);
+  ASSERT_EQ(2U, notifications_engagement_setting.size());
+
+  // Verify the contents of the |notifications_engagement_setting| for
+  // hosts[0].
+  base::Value::Dict engagement_dict1;
+  base::Value::Dict dict1_entry1;
+  dict1_entry1.Set(kDisplayedKey, 2);
+  base::Value::Dict dict1_entry2;
+  dict1_entry2.Set(kDisplayedKey, 1);
+  dict1_entry2.Set(kEngagementKey, 1);
+  engagement_dict1.Set(displayedDate, std::move(dict1_entry1));
+  engagement_dict1.Set(displayedDateLater, std::move(dict1_entry2));
+  base::Value engagement_dict_value1 = base::Value(std::move(engagement_dict1));
+
+  ASSERT_EQ(ContentSettingsPattern::FromURLNoWildcard(hosts[0]),
+            notifications_engagement_setting.at(0).primary_pattern);
+  ASSERT_EQ(ContentSettingsPattern::Wildcard(),
+            notifications_engagement_setting.at(0).secondary_pattern);
+  ASSERT_EQ(engagement_dict_value1,
+            notifications_engagement_setting.at(0).setting_value);
+
+  // Verify the contents of the |notifications_engagement_setting| for
+  // hosts[1].
+  base::Value::Dict engagement_dict2;
+  base::Value::Dict dict2_entry1;
+  dict2_entry1.Set(kDisplayedKey, 1);
+  engagement_dict2.Set(displayedDateLater, std::move(dict2_entry1));
+  base::Value engagement_dict_value2 = base::Value(std::move(engagement_dict2));
+
+  ASSERT_EQ(ContentSettingsPattern::FromURLNoWildcard(hosts[1]),
+            notifications_engagement_setting.at(1).primary_pattern);
+  ASSERT_EQ(ContentSettingsPattern::Wildcard(),
+            notifications_engagement_setting.at(1).secondary_pattern);
+  ASSERT_EQ(engagement_dict_value2,
+            notifications_engagement_setting.at(1).setting_value);
+}
+
+TEST_F(NotificationsEngagementServiceTest,
+       RecordNotificationDisplayedAndInteraction) {
+  GURL url1("https://www.google.com/");
+  GURL url2("https://www.youtube.com/");
+  GURL url3("https://www.permissions.site.com/");
+
+  HostContentSettingsMap* host_content_settings_map =
+      HostContentSettingsMapFactory::GetForProfile(profile());
+  // Test notifications sent within the same week constitute one date entry.
+
+  service()->RecordNotificationDisplayed(url1);
+
+  task_environment_.FastForwardBy(base::Days(1));
+  service()->RecordNotificationDisplayed(url1);
+
+  base::Value website_engagement_value1 =
+      host_content_settings_map->GetWebsiteSetting(
+          url1, GURL(), ContentSettingsType::NOTIFICATION_INTERACTIONS,
+          nullptr);
+  ASSERT_TRUE(website_engagement_value1.is_dict());
+  base::Value::Dict& website_engagement_dict1 =
+      website_engagement_value1.GetDict();
+
+  ASSERT_EQ(1U, website_engagement_dict1.size());
+
+  // Test notifications sent in different weeks constitute different entries.
+  service()->RecordNotificationDisplayed(url2);
+
+  task_environment_.FastForwardBy(base::Days(14));
+  service()->RecordNotificationDisplayed(url2);
+
+  task_environment_.FastForwardBy(base::Days(28));
+  service()->RecordNotificationDisplayed(url2);
+
+  base::Value website_engagement_value2 =
+      host_content_settings_map->GetWebsiteSetting(
+          url2, GURL(), ContentSettingsType::NOTIFICATION_INTERACTIONS,
+          nullptr);
+  ASSERT_TRUE(website_engagement_value2.is_dict());
+  base::Value::Dict& website_engagement_dict2 =
+      website_engagement_value2.GetDict();
+
+  ASSERT_EQ(3U, website_engagement_dict2.size());
+
+  // Test that display_count and click_count are incremented correctly.
+  service()->RecordNotificationDisplayed(url3);
+  service()->RecordNotificationDisplayed(url3);
+
+  service()->RecordNotificationInteraction(url3);
+  service()->RecordNotificationInteraction(url3);
+  service()->RecordNotificationInteraction(url3);
+
+  base::Value website_engagement_value3 =
+      host_content_settings_map->GetWebsiteSetting(
+          url3, GURL(), ContentSettingsType::NOTIFICATION_INTERACTIONS,
+          nullptr);
+  ASSERT_TRUE(website_engagement_value3.is_dict());
+  base::Value::Dict& website_engagement_dict3 =
+      website_engagement_value3.GetDict();
+
+  std::string displayedDate =
+      service()->GetBucketLabelForLastMonday(base::Time::Now());
+  base::Value* entryForDate = website_engagement_dict3.Find(displayedDate);
+
+  ASSERT_EQ(2, entryForDate->FindIntKey(kDisplayedKey).value());
+  ASSERT_EQ(3, entryForDate->FindIntKey(kEngagementKey).value());
+}
+
+TEST_F(NotificationsEngagementServiceTest, EraseStaleEntries) {
+  GURL url("https://www.google.com/");
+
+  // Test that only entries older than 90 days are deleted.
+  task_environment_.FastForwardBy(base::Days(10950));
+  service()->RecordNotificationDisplayed(url);
+  task_environment_.FastForwardBy(base::Days(91));
+  service()->RecordNotificationDisplayed(url);
+
+  task_environment_.FastForwardBy(base::Days(8));
+  service()->RecordNotificationDisplayed(url);
+
+  HostContentSettingsMap* host_content_settings_map =
+      HostContentSettingsMapFactory::GetForProfile(profile());
+
+  base::Value::Dict website_engagement =
+      host_content_settings_map
+          ->GetWebsiteSetting(url, GURL(),
+                              ContentSettingsType::NOTIFICATION_INTERACTIONS,
+                              nullptr)
+          .GetDict()
+          .Clone();
+
+  // Stale entries should be erased, when a new display/interaction is
+  // recorded.
+  ASSERT_EQ(2u, website_engagement.size());
+}
+
+TEST_F(NotificationsEngagementServiceTest, GetBucketLabelForLastMonday) {
+  base::Time date1, date2, date3, date4;
+  base::Time expected_monday1, expected_monday2, expected_monday3,
+      expected_monday4;
+
+  ASSERT_TRUE(base::Time::FromString("23 Oct 2009 11:30 GMT", &date1));
+  ASSERT_TRUE(
+      base::Time::FromString("2009-10-19 00:00:00.000 GMT", &expected_monday1));
+  ASSERT_EQ(NotificationsEngagementService::GetBucketLabelForLastMonday(date1),
+            base::NumberToString(expected_monday1.base::Time::ToTimeT()));
+  std::string label1 =
+      NotificationsEngagementService::GetBucketLabelForLastMonday(date1);
+  ASSERT_EQ(label1,
+            base::NumberToString(expected_monday1.base::Time::ToTimeT()));
+  absl::optional<base::Time> begin1 =
+      NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label1);
+  ASSERT_TRUE(begin1.has_value());
+  EXPECT_EQ(label1, NotificationsEngagementService::GetBucketLabelForLastMonday(
+                        begin1.value()));
+
+  ASSERT_TRUE(base::Time::FromString("Mon Oct 15 12:45 PDT 2007", &date2));
+  ASSERT_TRUE(
+      base::Time::FromString("2007-10-15 00:00:00.000 GMT", &expected_monday2));
+  ASSERT_EQ(NotificationsEngagementService::GetBucketLabelForLastMonday(date2),
+            base::NumberToString(expected_monday2.base::Time::ToTimeT()));
+  std::string label2 =
+      NotificationsEngagementService::GetBucketLabelForLastMonday(date2);
+  ASSERT_EQ(label2,
+            base::NumberToString(expected_monday2.base::Time::ToTimeT()));
+  absl::optional<base::Time> begin2 =
+      NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label2);
+  ASSERT_TRUE(begin2.has_value());
+  EXPECT_EQ(label2, NotificationsEngagementService::GetBucketLabelForLastMonday(
+                        begin2.value()));
+
+  ASSERT_TRUE(base::Time::FromString("Thu Jan 01 00:59:58 +0100 1970", &date3));
+  ASSERT_TRUE(
+      base::Time::FromString("1969-12-29 00:00:00.000 GMT", &expected_monday3));
+  ASSERT_EQ(NotificationsEngagementService::GetBucketLabelForLastMonday(date3),
+            base::NumberToString(expected_monday3.base::Time::ToTimeT()));
+  std::string label3 =
+      NotificationsEngagementService::GetBucketLabelForLastMonday(date3);
+  ASSERT_EQ(label3,
+            base::NumberToString(expected_monday3.base::Time::ToTimeT()));
+  absl::optional<base::Time> begin3 =
+      NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label3);
+  ASSERT_TRUE(begin3.has_value());
+  EXPECT_EQ(label3, NotificationsEngagementService::GetBucketLabelForLastMonday(
+                        begin3.value()));
+
+  ASSERT_TRUE(base::Time::FromString("Wed Mar 23 04:38:58 -1000 2022", &date4));
+  ASSERT_TRUE(
+      base::Time::FromString("2022-03-21 00:00:00.000 GMT", &expected_monday4));
+  std::string label4 =
+      NotificationsEngagementService::GetBucketLabelForLastMonday(date4);
+  ASSERT_EQ(label4,
+            base::NumberToString(expected_monday4.base::Time::ToTimeT()));
+  absl::optional<base::Time> begin4 =
+      NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label4);
+  ASSERT_TRUE(begin4.has_value());
+  EXPECT_EQ(label4, NotificationsEngagementService::GetBucketLabelForLastMonday(
+                        begin4.value()));
+}
+}  // namespace permissions
diff --git a/chrome/browser/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc b/chrome/browser/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc
index 79ce319..c9c0b3b 100644
--- a/chrome/browser/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc
+++ b/chrome/browser/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc
@@ -438,8 +438,9 @@
   void SetUp() override {
     bool split_cache_by_network_isolation_key = GetParam();
     if (split_cache_by_network_isolation_key) {
-      feature_list_.InitAndEnableFeature(
-          net::features::kSplitCacheByNetworkIsolationKey);
+      feature_list_.InitWithFeatures(
+          {net::features::kSplitCacheByNetworkIsolationKey},
+          {net::features::kForceIsolationInfoFrameOriginToTopLevelFrame});
     } else {
       feature_list_.InitAndDisableFeature(
           net::features::kSplitCacheByNetworkIsolationKey);
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index d63bffe..75f490f 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -231,6 +231,7 @@
 #include "chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.h"
 #include "chrome/browser/lacros/account_manager/profile_account_manager_factory.h"
 #include "chrome/browser/lacros/cert/cert_db_initializer_factory.h"
+#include "chrome/browser/ui/startup/lacros_first_run_service.h"
 #endif
 
 #if BUILDFLAG(BUILD_WITH_TFLITE_LIB)
@@ -377,6 +378,9 @@
 #if !BUILDFLAG(IS_ANDROID)
   InstantServiceFactory::GetInstance();
 #endif
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+  LacrosFirstRunServiceFactory::GetInstance();
+#endif
   LanguageModelManagerFactory::GetInstance();
   if (base::FeatureList::IsEnabled(
           permissions::features::kOneTimeGeolocationPermission)) {
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index e35e0cb..a0f6287 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -166,7 +166,7 @@
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
 #include "chrome/browser/lacros/account_manager/account_profile_mapper.h"
-#include "chrome/browser/ui/startup/first_run_lacros.h"
+#include "chrome/browser/ui/startup/lacros_first_run_service.h"
 #include "chromeos/lacros/lacros_service.h"
 #include "components/account_manager_core/chromeos/account_manager_facade_factory.h"
 #endif
@@ -1644,15 +1644,6 @@
     browsing_data_lifetime_manager->ClearBrowsingDataForOnExitPolicy(
         /*keep_browser_alive=*/false);
   }
-
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  // Check if we should turn Sync on from the background and skip the FRE.
-  if (ShouldOpenPrimaryProfileFirstRun(profile)) {
-    // If we don't manage to set it, we will just have to defer silent or visual
-    // handling of the FRE to when the user attempts to open a browser UI.
-    TryMarkFirstRunAlreadyFinished(profile);
-  }
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
 }
 
 void ProfileManager::DoFinalInitForServices(Profile* profile,
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm
index 554ba7d89..8547c4c 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm
@@ -287,36 +287,30 @@
   // Queue the typical events at the beginning of a new swipe gesture. The
   // ordering and values were determined by recording real swipe events.
   void QueueBeginningEvents(int dx, int dy) {
-    QueueTouch(
-        DEPLOYMENT_TOUCHES_BEGAN, NSEventTypeGesture, NSMouseEventSubtype, NO);
+    QueueTouch(DEPLOYMENT_TOUCHES_BEGAN, NSEventTypeGesture,
+               NSEventSubtypeMouseEvent, NO);
     QueueTrackpadScroll(0, 0, NSEventPhaseMayBegin, YES);
-    QueueTouch(
-        DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture, NSMouseEventSubtype, NO);
+    QueueTouch(DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+               NSEventSubtypeMouseEvent, NO);
 
     QueueTrackpadScroll(dx, dy, NSEventPhaseBegan, NO);
     QueueGestureBegin();
-    QueueTouch(DEPLOYMENT_TOUCHES_MOVED,
-               NSEventTypeBeginGesture,
-               NSTouchEventSubtype,
-               NO);
-    QueueTouch(
-        DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture, NSTouchEventSubtype, YES);
+    QueueTouch(DEPLOYMENT_TOUCHES_MOVED, NSEventTypeBeginGesture,
+               NSEventSubtypeTouch, NO);
+    QueueTouch(DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+               NSEventSubtypeTouch, YES);
     UpdateTouchLocationFromTrackpadScroll(dx, dy);
-    QueueTouch(
-        DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture, NSTouchEventSubtype, NO);
+    QueueTouch(DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+               NSEventSubtypeTouch, NO);
   }
 
   // Queue the typical events at the end of a new swipe gesture. The ordering
   // and values were determined by recording real swipe events.
   void QueueEndEvents() {
-    QueueTouch(DEPLOYMENT_TOUCHES_MOVED,
-               NSEventTypeEndGesture,
-               NSMouseEventSubtype,
-               NO);
-    QueueTouch(DEPLOYMENT_TOUCHES_ENDED,
-               NSEventTypeEndGesture,
-               NSMouseEventSubtype,
-               NO);
+    QueueTouch(DEPLOYMENT_TOUCHES_MOVED, NSEventTypeEndGesture,
+               NSEventSubtypeMouseEvent, NO);
+    QueueTouch(DEPLOYMENT_TOUCHES_ENDED, NSEventTypeEndGesture,
+               NSEventSubtypeMouseEvent, NO);
     QueueGestureEnd();
     QueueTrackpadScroll(0, 0, NSEventPhaseEnded, YES);
   }
@@ -325,8 +319,8 @@
   void QueueScrollAndTouchMoved(int dx, int dy) {
     QueueTrackpadScroll(dx, dy, NSEventPhaseChanged, NO);
     UpdateTouchLocationFromTrackpadScroll(dx, dy);
-    QueueTouch(
-        DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture, NSTouchEventSubtype, YES);
+    QueueTouch(DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+               NSEventSubtypeTouch, YES);
   }
 
   // Queues a touch event with the stored touch coordinates.
@@ -409,227 +403,107 @@
   if (!IsHistorySwipingSupported())
     return;
 
-  QueueTouch(0.510681,
-             0.444672,
-             DEPLOYMENT_TOUCHES_BEGAN,
-             NSEventTypeGesture,
-             NSMouseEventSubtype,
-             NO);
+  QueueTouch(0.510681, 0.444672, DEPLOYMENT_TOUCHES_BEGAN, NSEventTypeGesture,
+             NSEventSubtypeMouseEvent, NO);
   QueueTrackpadScroll(0, 0, NSEventPhaseMayBegin, YES);
-  QueueTouch(0.510681,
-             0.444672,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSMouseEventSubtype,
-             NO);
+  QueueTouch(0.510681, 0.444672, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeMouseEvent, NO);
 
   QueueTrackpadScroll(1, 0, NSEventPhaseBegan, NO);
   QueueGestureBegin();
-  QueueTouch(0.510681,
-             0.444672,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeBeginGesture,
-             NSTouchEventSubtype,
-             NO);
-  QueueTouch(0.510681,
-             0.444672,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.510681, 0.444672, DEPLOYMENT_TOUCHES_MOVED,
+             NSEventTypeBeginGesture, NSEventSubtypeTouch, NO);
+  QueueTouch(0.510681, 0.444672, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
-  QueueTouch(0.507019,
-             0.444092,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             NO);
+  QueueTouch(0.507019, 0.444092, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, NO);
   QueueTrackpadScroll(3, 0, NSEventPhaseChanged, YES);
 
   QueueTrackpadScroll(3, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.502861,
-             0.443512,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.502861, 0.443512, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(6, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.497002,
-             0.44294,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.497002, 0.44294, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(5, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.487236,
-             0.44149,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.487236, 0.44149, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(8, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.480392,
-             0.440628,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             NO);
-  QueueTouch(0.475266,
-             0.440338,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.480392, 0.440628, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, NO);
+  QueueTouch(0.475266, 0.440338, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(6, -1, NSEventPhaseChanged, NO);
   QueueTrackpadScroll(10, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.467934,
-             0.439758,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.467934, 0.439758, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(6, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.462807,
-             0.439186,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.462807, 0.439186, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
   QueueTrackpadScroll(12, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.454018,
-             0.438316,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.454018, 0.438316, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(6, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.449623,
-             0.438026,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.449623, 0.438026, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(9, 0, NSEventPhaseChanged, NO);
-  QueueTouch(0.443275,
-             0.437744,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
-  QueueTouch(0.437164,
-             0.437164,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.443275, 0.437744, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
+  QueueTouch(0.437164, 0.437164, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(9, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.431305,
-             0.436874,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.431305, 0.436874, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
   QueueTrackpadScroll(8, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.425926,
-             0.436295,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.425926, 0.436295, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
   QueueTrackpadScroll(7, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.420311,
-             0.43573,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.420311, 0.43573, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(7, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.415184,
-             0.43544,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.415184, 0.43544, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
   QueueTrackpadScroll(6, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.410057,
-             0.43457,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
-  QueueTouch(0.40493,
-             0.43399,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.410057, 0.43457, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
+  QueueTouch(0.40493, 0.43399, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
   QueueTrackpadScroll(7, -1, NSEventPhaseChanged, YES);
   QueueTrackpadScroll(3, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.402489,
-             0.433701,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.402489, 0.433701, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
   QueueTrackpadScroll(5, 0, NSEventPhaseChanged, NO);
-  QueueTouch(0.398094,
-             0.433418,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.398094, 0.433418, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   QueueTrackpadScroll(4, -1, NSEventPhaseChanged, NO);
-  QueueTouch(0.394669,
-             0.433128,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
-  QueueTouch(0.391006,
-             0.432549,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.394669, 0.433128, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
+  QueueTouch(0.391006, 0.432549, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
   QueueTrackpadScroll(4, -1, NSEventPhaseChanged, NO);
   QueueTrackpadScroll(5, 0, NSEventPhaseChanged, YES);
-  QueueTouch(0.386848,
-             0.432259,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
-  QueueTouch(0.38343,
-             0.432259,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeGesture,
-             NSTouchEventSubtype,
-             YES);
+  QueueTouch(0.386848, 0.432259, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
+  QueueTouch(0.38343, 0.432259, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeGesture,
+             NSEventSubtypeTouch, YES);
 
   // Skipped a bunch of events. The data on the gesture end events are fudged.
 
-  QueueTouch(0.38343,
-             0.432259,
-             DEPLOYMENT_TOUCHES_MOVED,
-             NSEventTypeEndGesture,
-             NSMouseEventSubtype,
-             NO);
-  QueueTouch(0.38343,
-             0.432259,
-             DEPLOYMENT_TOUCHES_ENDED,
-             NSEventTypeEndGesture,
-             NSMouseEventSubtype,
-             NO);
+  QueueTouch(0.38343, 0.432259, DEPLOYMENT_TOUCHES_MOVED, NSEventTypeEndGesture,
+             NSEventSubtypeMouseEvent, NO);
+  QueueTouch(0.38343, 0.432259, DEPLOYMENT_TOUCHES_ENDED, NSEventTypeEndGesture,
+             NSEventSubtypeMouseEvent, NO);
   QueueGestureEnd();
   QueueTrackpadScroll(0, 0, NSEventPhaseEnded, YES);
 
@@ -789,11 +663,11 @@
   for (int i = 0; i < 150; ++i)
     QueueScrollAndTouchMoved(1, 0);
 
-  QueueTouch(
-      DEPLOYMENT_TOUCHES_MOVED, NSEventTypeEndGesture, NSMouseEventSubtype, NO);
+  QueueTouch(DEPLOYMENT_TOUCHES_MOVED, NSEventTypeEndGesture,
+             NSEventSubtypeMouseEvent, NO);
   QueueGestureEnd();
-  QueueTouch(
-      DEPLOYMENT_TOUCHES_ENDED, NSEventTypeEndGesture, NSMouseEventSubtype, NO);
+  QueueTouch(DEPLOYMENT_TOUCHES_ENDED, NSEventTypeEndGesture,
+             NSEventSubtypeMouseEvent, NO);
   QueueTrackpadScroll(0, 0, NSEventPhaseEnded, YES);
 
   RunQueuedEvents();
diff --git a/chrome/browser/resources/browser_switch/internals/app.ts b/chrome/browser/resources/browser_switch/internals/app.ts
index 61aac796..b6c01a7 100644
--- a/chrome/browser/resources/browser_switch/internals/app.ts
+++ b/chrome/browser/resources/browser_switch/internals/app.ts
@@ -149,31 +149,30 @@
     let reason = '';
     if (decision.matching_rule) {
       if (decision.matching_rule.startsWith('!')) {
-        reason += `Reason: The inverted rule ${
-            JSON.stringify(decision.matching_rule)} was found in `;
+        reason += this.i18n(
+                      'openBrowserInvertRuleReason',
+                      JSON.stringify(decision.matching_rule)) +
+            '\n';
       } else {
-        reason +=
-            `Reason: ${JSON.stringify(decision.matching_rule)} was found in `;
+        const list = decision.reason === 'sitelist' ?
+            this.i18n('forceOpenTitle') :
+            this.i18n('ignoreTitle');
+        reason += this.i18n(
+                      'openBrowserRuleReason',
+                      JSON.stringify(decision.matching_rule), list) +
+            '\n';
       }
     }
     // if undefined - add nothing to the output
 
     switch (decision.reason) {
       case 'globally_disabled':
-        reason += 'Reason: The BrowserSwitcherEnabled policy is false.\n';
-        break;
+        throw new Error('BrowserSwitcherEnabled policy is set as false!');
       case 'protocol':
-        reason +=
-            'Reason: LBS only supports http://, https://, and file:// URLs.\n';
-        break;
-      case 'sitelist':
-        reason += 'the "Force open in" list.\n';
-        break;
-      case 'greylist':
-        reason += 'the "Ignore" list.\n';
+        reason += this.i18n('openBrowserProtocolReason') + '\n';
         break;
       case 'default':
-        reason += `Reason: LBS stays in ${browserName} by default.\n`;
+        reason += this.i18n('openBrowserDefaultReason', browserName) + '\n';
         break;
     }
 
diff --git a/chrome/browser/resources/browsing_topics/browsing_topics_internals.css b/chrome/browser/resources/browsing_topics/browsing_topics_internals.css
index 9acc889..31593d4 100644
--- a/chrome/browser/resources/browsing_topics/browsing_topics_internals.css
+++ b/chrome/browser/resources/browsing_topics/browsing_topics_internals.css
@@ -117,6 +117,7 @@
 .model-info-div,
 .hosts-classification-input-area-div,
 .hosts-classification-result-div,
+.hosts-classification-input-validation-error-div,
 .features-and-parameters-div,
 .classification-input-div {
   font-size: 1rem;
@@ -124,6 +125,10 @@
   padding: 10px;
 }
 
+.hosts-classification-input-validation-error-div {
+  color: red;
+}
+
 .hosts-classification-input-area-div {
   border-top: var(--common-border);
   margin-top: 10px;
diff --git a/chrome/browser/resources/browsing_topics/browsing_topics_internals.html b/chrome/browser/resources/browsing_topics/browsing_topics_internals.html
index 84b0e02..573da4c3 100644
--- a/chrome/browser/resources/browsing_topics/browsing_topics_internals.html
+++ b/chrome/browser/resources/browsing_topics/browsing_topics_internals.html
@@ -48,6 +48,7 @@
       <button type="button" id="hosts-classification-button">Classify</button>
     </div>
     <div id="hosts-classification-loader-div" class="loader-div"></div>
+    <div id="hosts-classification-input-validation-error" class="hosts-classification-input-validation-error-div"></div>
     <div id="hosts-classification-result-table-wrapper" class="hosts-classification-result-div">
       <table id="hosts-classification-result-table" class="hosts-classification-result-table">
         <tr>
diff --git a/chrome/browser/resources/browsing_topics/browsing_topics_internals.ts b/chrome/browser/resources/browsing_topics/browsing_topics_internals.ts
index 1e9912e..ba9229a2 100644
--- a/chrome/browser/resources/browsing_topics/browsing_topics_internals.ts
+++ b/chrome/browser/resources/browsing_topics/browsing_topics_internals.ts
@@ -233,13 +233,6 @@
     return;
   }
 
-  const table = document.querySelector('#hosts-classification-result-table')! as
-      HTMLTableElement;
-
-  while (table.rows[1]) {
-    table.deleteRow(1);
-  }
-
   for (let i = 0; i < hosts.length; i++) {
     const host = hosts[i] as string;
     const topics = topicsForHosts![i] as WebUITopic[];
@@ -252,6 +245,23 @@
   setElementVisible('hosts-classification-result-table-wrapper', true);
 }
 
+function clearHostsClassificationResult() {
+  const table = document.querySelector('#hosts-classification-result-table')! as
+      HTMLTableElement;
+
+  while (table.rows[1]) {
+    table.deleteRow(1);
+  }
+
+  const div = document.querySelector<HTMLElement>(
+      '#hosts-classification-input-validation-error');
+  div!.innerHTML = '';
+
+  setElementVisible('hosts-classification-loader-div', false);
+  setElementVisible('hosts-classification-input-validation-error', false);
+  setElementVisible('hosts-classification-result-table-wrapper', false);
+}
+
 async function asyncGetModelInfo() {
   const response = await pageHandler.getModelInfo();
 
@@ -277,6 +287,8 @@
 
   document.querySelector(
               '#hosts-classification-button')!.addEventListener('click', () => {
+    clearHostsClassificationResult();
+
     const input = (document.querySelector('#input-hosts-textarea')! as
                    HTMLTextAreaElement)
                       .value;
@@ -292,9 +304,30 @@
       preprocessedHosts.push(trimmedHost);
     });
 
-    setElementVisible('hosts-classification-loader-div', true);
-    setElementVisible('hosts-classification-result-table-wrapper', false);
-    asyncClassifyHosts(preprocessedHosts, ++hostsClassificationSequenceNumber);
+    const inputValidationErrors = [] as string[];
+    preprocessedHosts.forEach((host) => {
+      if (host.includes('/')) {
+        inputValidationErrors.push(
+            'Host \"' + host + '" contains invalid character: "\/"');
+      }
+    });
+
+    ++hostsClassificationSequenceNumber;
+
+    if (inputValidationErrors.length > 0) {
+      const errorsDiv = document.querySelector<HTMLElement>(
+          '#hosts-classification-input-validation-error');
+      inputValidationErrors.forEach((error) => {
+        const errorDiv = document.createElement('div');
+        errorDiv.textContent = error;
+        errorsDiv!.appendChild(errorDiv);
+      });
+
+      setElementVisible('hosts-classification-input-validation-error', true);
+    } else {
+      setElementVisible('hosts-classification-loader-div', true);
+      asyncClassifyHosts(preprocessedHosts, hostsClassificationSequenceNumber);
+    }
   });
 }
 
@@ -308,6 +341,7 @@
   setElementVisible('model-info-div', false);
   setElementVisible('hosts-classification-input-area-div', false);
   setElementVisible('hosts-classification-loader-div', false);
+  setElementVisible('hosts-classification-input-validation-error', false);
   setElementVisible('hosts-classification-result-table-wrapper', false);
 
   asyncGetBrowsingTopicsConfiguration();
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_background.js
index ddf8f624..0689d649f 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_background.js
@@ -159,7 +159,8 @@
 BrailleBackground.instance_ = null;
 
 BridgeHelper.registerHandler(
-    BridgeTarget.BRAILLE_BACKGROUND, BridgeAction.BACK_TRANSLATE,
+    BridgeConstants.BrailleBackground.TARGET,
+    BridgeConstants.BrailleBackground.Action.BACK_TRANSLATE,
     (cells) => new Promise(resolve => {
       BrailleBackground.instance.getTranslatorManager()
           .getDefaultTranslator()
@@ -167,6 +168,7 @@
     }));
 
 BridgeHelper.registerHandler(
-    BridgeTarget.BRAILLE_BACKGROUND, BridgeAction.REFRESH_BRAILLE_TABLE,
+    BridgeConstants.BrailleBackground.TARGET,
+    BridgeConstants.BrailleBackground.Action.REFRESH_BRAILLE_TABLE,
     (brailleTable) => BrailleBackground.instance.getTranslatorManager().refresh(
         brailleTable));
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js
index e6293d14..18db96e 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js
@@ -235,5 +235,5 @@
 BrailleCommandHandler.instance_;
 
 BridgeHelper.registerHandler(
-    BridgeTarget.BRAILLE_COMMAND_HANDLER, BridgeAction.SET_ENABLED,
+    BridgeTargets.BRAILLE_COMMAND_HANDLER, BridgeActions.SET_ENABLED,
     enabled => BrailleCommandHandler.setEnabled(enabled));
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js
index 3487a48f..f9115da6 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js
@@ -174,8 +174,8 @@
 };
 
 BridgeHelper.registerHandler(
-    BridgeTarget.CHROMEVOX_STATE, BridgeAction.CLEAR_CURRENT_RANGE,
+    BridgeTargets.CHROMEVOX_STATE, BridgeActions.CLEAR_CURRENT_RANGE,
     () => ChromeVoxState.instance.setCurrentRange(null));
 BridgeHelper.registerHandler(
-    BridgeTarget.CHROMEVOX_STATE, BridgeAction.UPDATE_PUNCTUATION_ECHO,
+    BridgeTargets.CHROMEVOX_STATE, BridgeActions.UPDATE_PUNCTUATION_ECHO,
     (echo) => ChromeVoxState.backgroundTts.updatePunctuationEcho(echo));
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
index ff694ab..5cea8c9 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
@@ -313,7 +313,7 @@
 
     ChromeVoxState.backgroundTts = background.backgroundTts_;
     BridgeHelper.registerHandler(
-        /* target= */ 'ChromeVoxBackground', 'getCurrentVoice',
+        BridgeTargets.CHROMEVOX_BACKGROUND, BridgeActions.GET_CURRENT_VOICE,
         () => background.getCurrentVoice());
   }
 }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
index 0f6f974..8c92348 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
@@ -1534,5 +1534,5 @@
 CommandHandlerInterface.instance = new CommandHandler();
 
 BridgeHelper.registerHandler(
-    BridgeTarget.COMMAND_HANDLER, BridgeAction.ON_COMMAND,
+    BridgeTargets.COMMAND_HANDLER, BridgeActions.ON_COMMAND,
     (command) => CommandHandlerInterface.instance.onCommand(command));
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/event_source.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/event_source.js
index aa4a5ca..987ec4e 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/event_source.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/event_source.js
@@ -42,5 +42,5 @@
     EventSourceType.NONE;
 
 BridgeHelper.registerHandler(
-    BridgeTarget.EVENT_SOURCE_STATE, BridgeAction.GET,
+    BridgeTargets.EVENT_SOURCE_STATE, BridgeActions.GET,
     () => EventSourceState.get());
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js
index ed7d17f..129b0053 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js
@@ -137,5 +137,5 @@
 GestureCommandHandler.init_();
 
 BridgeHelper.registerHandler(
-    BridgeTarget.GESTURE_COMMAND_HANDLER, BridgeAction.SET_ENABLED,
+    BridgeTargets.GESTURE_COMMAND_HANDLER, BridgeActions.SET_ENABLED,
     enabled => GestureCommandHandler.setEnabled(enabled));
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/log_store.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/log_store.js
index 0ee23b7d..9545d9f2 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/log_store.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/log_store.js
@@ -163,8 +163,8 @@
 LogStore.instance;
 
 BridgeHelper.registerHandler(
-    BridgeTarget.LOG_STORE, BridgeAction.CLEAR_LOG,
+    BridgeTargets.LOG_STORE, BridgeActions.CLEAR_LOG,
     () => LogStore.instance.clearLog());
 BridgeHelper.registerHandler(
-    BridgeTarget.LOG_STORE, BridgeAction.GET_LOGS,
+    BridgeTargets.LOG_STORE, BridgeActions.GET_LOGS,
     () => LogStore.instance.getLogs());
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
index 8bae491..1791bb1 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
@@ -36,54 +36,55 @@
     PanelBackground.stateObserver_ = new PanelStateObserver();
 
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.CREATE_ALL_NODE_MENU_BACKGROUNDS,
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.CREATE_ALL_NODE_MENU_BACKGROUNDS,
         (opt_activateMenuTitle) =>
             PanelBackground.instance.createAllNodeMenuBackgrounds_(
                 opt_activateMenuTitle));
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.CREATE_NEW_I_SEARCH,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.CREATE_NEW_I_SEARCH,
         () => PanelBackground.instance.createNewISearch_());
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.DESTROY_I_SEARCH,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.DESTROY_I_SEARCH,
         () => PanelBackground.instance.destroyISearch_());
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.FOCUS_TAB,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.FOCUS_TAB,
         ({windowId, tabId}) =>
             PanelTabMenuBackground.focusTab(windowId, tabId));
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.GET_ACTIONS_FOR_CURRENT_NODE,
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.GET_ACTIONS_FOR_CURRENT_NODE,
         () => PanelBackground.instance.getActionsForCurrentNode_());
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.GET_TAB_MENU_DATA,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.GET_TAB_MENU_DATA,
         () => PanelTabMenuBackground.getTabMenuData());
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.INCREMENTAL_SEARCH,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.INCREMENTAL_SEARCH,
         ({searchStr, dir, opt_nextObject}) =>
             PanelBackground.instance.incrementalSearch_(
                 searchStr, dir, opt_nextObject));
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.NODE_MENU_CALLBACK,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.NODE_MENU_CALLBACK,
         (callbackNodeIndex) =>
             PanelNodeMenuBackground.focusNodeCallback(callbackNodeIndex));
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.PERFORM_CUSTOM_ACTION_ON_CURRENT_NODE,
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.PERFORM_CUSTOM_ACTION_ON_CURRENT_NODE,
         (actionId) =>
             PanelBackground.instance.performCustomActionOnCurrentNode_(
                 actionId));
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.PERFORM_STANDARD_ACTION_ON_CURRENT_NODE,
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.PERFORM_STANDARD_ACTION_ON_CURRENT_NODE,
         (action) =>
             PanelBackground.instance.performStandardActionOnCurrentNode_(
                 action));
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.SET_RANGE_TO_I_SEARCH_NODE,
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.SET_RANGE_TO_I_SEARCH_NODE,
         () => PanelBackground.instance.setRangeToISearchNode_());
     BridgeHelper.registerHandler(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.WAIT_FOR_PANEL_COLLAPSE,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.WAIT_FOR_PANEL_COLLAPSE,
         () => PanelBackground.instance.waitForPanelCollapse_());
   }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
index f6e0638..cf74d42 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
@@ -201,11 +201,11 @@
 ChromeVoxPrefs.instance = new ChromeVoxPrefs();
 
 BridgeHelper.registerHandler(
-    BridgeTarget.CHROMEVOX_PREFS, BridgeAction.GET_PREFS,
+    BridgeTargets.CHROMEVOX_PREFS, BridgeActions.GET_PREFS,
     () => ChromeVoxPrefs.instance.getPrefs());
 BridgeHelper.registerHandler(
-    BridgeTarget.CHROMEVOX_PREFS, BridgeAction.SET_LOGGING_PREFS,
+    BridgeTargets.CHROMEVOX_PREFS, BridgeActions.SET_LOGGING_PREFS,
     ({key, value}) => ChromeVoxPrefs.instance.setLoggingPrefs(key, value));
 BridgeHelper.registerHandler(
-    BridgeTarget.CHROMEVOX_PREFS, BridgeAction.SET_PREF,
+    BridgeTargets.CHROMEVOX_PREFS, BridgeActions.SET_PREF,
     ({key, value}) => ChromeVoxPrefs.instance.setPref(key, value));
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js
index 73ceccb..45697c7 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js
@@ -357,9 +357,9 @@
 UserActionMonitor.instance;
 
 BridgeHelper.registerHandler(
-    BridgeTarget.USER_ACTION_MONITOR, BridgeAction.CREATE,
+    BridgeTargets.USER_ACTION_MONITOR, BridgeActions.CREATE,
     (actions) =>
         new Promise(resolve => UserActionMonitor.create(actions, resolve)));
 BridgeHelper.registerHandler(
-    BridgeTarget.USER_ACTION_MONITOR, BridgeAction.DESTROY,
+    BridgeTargets.USER_ACTION_MONITOR, BridgeActions.DESTROY,
     () => UserActionMonitor.destroy());
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js
index 5cc942e..94981383e 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js
@@ -9,9 +9,10 @@
 
 goog.provide('BackgroundBridge');
 
-goog.require('BridgeAction');
+goog.require('BridgeActions');
+goog.require('BridgeConstants');
 goog.require('BridgeHelper');
-goog.require('BridgeTarget');
+goog.require('BridgeTargets');
 
 BackgroundBridge.BrailleBackground = {
   /**
@@ -21,7 +22,8 @@
    */
   async backTranslate(cells) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.BRAILLE_BACKGROUND, BridgeAction.BACK_TRANSLATE, cells);
+        BridgeConstants.BrailleBackground.TARGET,
+        BridgeConstants.BrailleBackground.Action.BACK_TRANSLATE, cells);
   },
 
   /**
@@ -30,7 +32,8 @@
    */
   async refreshBrailleTable(brailleTable) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.BRAILLE_BACKGROUND, BridgeAction.REFRESH_BRAILLE_TABLE,
+        BridgeConstants.BrailleBackground.TARGET,
+        BridgeConstants.BrailleBackground.Action.REFRESH_BRAILLE_TABLE,
         brailleTable);
   },
 };
@@ -42,7 +45,7 @@
    */
   async setEnabled(enabled) {
     return BridgeHelper.sendMessage(
-        Bridgetarget.BRAILLE_COMMAND_HANDLER, BridgeAction.SET_ENABLED,
+        BridgeTargets.BRAILLE_COMMAND_HANDLER, BridgeActions.SET_ENABLED,
         enabled);
   },
 };
@@ -53,7 +56,8 @@
    * @return {!Promise<string>}
    */
   async getCurrentVoice() {
-    return BridgeHelper.sendMessage('ChromeVoxBackground', 'getCurrentVoice');
+    return BridgeHelper.sendMessage(
+        BridgeTargets.CHROMEVOX_BACKGROUND, BridgeActions.GET_CURRENT_VOICE);
   },
 };
 
@@ -65,7 +69,7 @@
    */
   async getPrefs() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.CHROMEVOX_PREFS, BridgeAction.GET_PREFS);
+        BridgeTargets.CHROMEVOX_PREFS, BridgeActions.GET_PREFS);
   },
 
   /**
@@ -76,7 +80,7 @@
    */
   async setLoggingPrefs(key, value) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.CHROMEVOX_PREFS, BridgeAction.SET_LOGGING_PREFS,
+        BridgeTargets.CHROMEVOX_PREFS, BridgeActions.SET_LOGGING_PREFS,
         {key, value});
   },
 
@@ -88,7 +92,7 @@
    */
   async setPref(key, value) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.CHROMEVOX_PREFS, BridgeAction.SET_PREF, {key, value});
+        BridgeTargets.CHROMEVOX_PREFS, BridgeActions.SET_PREF, {key, value});
   },
 };
 
@@ -96,7 +100,7 @@
   /** @return {!Promise} */
   async clearCurrentRange() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.CHROMEVOX_STATE, BridgeAction.CLEAR_CURRENT_RANGE);
+        BridgeTargets.CHROMEVOX_STATE, BridgeActions.CLEAR_CURRENT_RANGE);
   },
 
   /**
@@ -108,7 +112,7 @@
    */
   async updatePunctuationEcho(punctuationEcho) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.CHROMEVOX_STATE, BridgeAction.UPDATE_PUNCTUATION_ECHO,
+        BridgeTargets.CHROMEVOX_STATE, BridgeActions.UPDATE_PUNCTUATION_ECHO,
         punctuationEcho);
   },
 };
@@ -121,7 +125,7 @@
    */
   async onCommand(command) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.COMMAND_HANDLER, BridgeAction.ON_COMMAND, command);
+        BridgeTargets.COMMAND_HANDLER, BridgeActions.ON_COMMAND, command);
   },
 };
 
@@ -132,7 +136,7 @@
    */
   async get() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.EVENT_SOURCE_STATE, BridgeAction.GET);
+        BridgeTargets.EVENT_SOURCE_STATE, BridgeActions.GET);
   },
 };
 
@@ -143,7 +147,7 @@
    */
   async setEnabled(enabled) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.GESTURE_COMMAND_HANDLER, BridgeAction.SET_ENABLED);
+        BridgeTargets.GESTURE_COMMAND_HANDLER, BridgeActions.SET_ENABLED);
   },
 };
 
@@ -155,8 +159,8 @@
    */
   async notifyEventStreamFilterChanged(name, enabled) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.EVENT_STREAM_LOGGER,
-        BridgeAction.NOTIFY_EVENT_STREAM_FILTER_CHANGED, {name, enabled});
+        BridgeTargets.EVENT_STREAM_LOGGER,
+        BridgeActions.NOTIFY_EVENT_STREAM_FILTER_CHANGED, {name, enabled});
   },
 };
 
@@ -167,7 +171,7 @@
    */
   async clearLog() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.LOG_STORE, BridgeAction.CLEAR_LOG);
+        BridgeTargets.LOG_STORE, BridgeActions.CLEAR_LOG);
   },
 
   /**
@@ -177,7 +181,7 @@
    */
   async getLogs() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.LOG_STORE, BridgeAction.GET_LOGS);
+        BridgeTargets.LOG_STORE, BridgeActions.GET_LOGS);
   },
 };
 
@@ -185,8 +189,8 @@
   /** @param {string=} opt_activatedMenuTitle */
   async createAllNodeMenuBackgrounds(opt_activatedMenuTitle) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.CREATE_ALL_NODE_MENU_BACKGROUNDS, opt_activatedMenuTitle);
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.CREATE_ALL_NODE_MENU_BACKGROUNDS, opt_activatedMenuTitle);
   },
 
   /**
@@ -196,7 +200,7 @@
    */
   async createNewISearch() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.CREATE_NEW_I_SEARCH);
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.CREATE_NEW_I_SEARCH);
   },
 
   /**
@@ -205,7 +209,7 @@
    */
   async destroyISearch() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.DESTROY_I_SEARCH);
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.DESTROY_I_SEARCH);
   },
 
   /**
@@ -215,7 +219,7 @@
    */
   async focusTab(windowId, tabId) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.FOCUS_TAB,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.FOCUS_TAB,
         {windowId, tabId});
   },
 
@@ -227,14 +231,14 @@
    */
   async getActionsForCurrentNode() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.GET_ACTIONS_FOR_CURRENT_NODE);
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.GET_ACTIONS_FOR_CURRENT_NODE);
   },
 
   /** @return {!Promise<!Array<!PanelTabMenuItemData>>} */
   async getTabMenuData() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.GET_TAB_MENU_DATA);
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.GET_TAB_MENU_DATA);
   },
 
   /**
@@ -245,7 +249,7 @@
    */
   async incrementalSearch(searchStr, dir, opt_nextObject) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.INCREMENTAL_SEARCH,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.INCREMENTAL_SEARCH,
         {searchStr, dir, opt_nextObject});
   },
 
@@ -255,7 +259,7 @@
    */
   async nodeMenuCallback(callbackNodeIndex) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.NODE_MENU_CALLBACK,
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.NODE_MENU_CALLBACK,
         callbackNodeIndex);
   },
 
@@ -265,8 +269,8 @@
    */
   async performCustomActionOnCurrentNode(actionId) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.PERFORM_CUSTOM_ACTION_ON_CURRENT_NODE, actionId);
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.PERFORM_CUSTOM_ACTION_ON_CURRENT_NODE, actionId);
   },
 
   /**
@@ -275,8 +279,8 @@
    */
   async performStandardActionOnCurrentNode(action) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND,
-        BridgeAction.PERFORM_STANDARD_ACTION_ON_CURRENT_NODE, action);
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.PERFORM_STANDARD_ACTION_ON_CURRENT_NODE, action);
   },
 
   /**
@@ -285,7 +289,8 @@
    */
   async setRangeToISearchNode() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.SET_RANGE_TO_I_SEARCH_NODE);
+        BridgeTargets.PANEL_BACKGROUND,
+        BridgeActions.SET_RANGE_TO_I_SEARCH_NODE);
   },
 
   /**
@@ -293,7 +298,7 @@
    */
   async waitForPanelCollapse() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL_BACKGROUND, BridgeAction.WAIT_FOR_PANEL_COLLAPSE);
+        BridgeTargets.PANEL_BACKGROUND, BridgeActions.WAIT_FOR_PANEL_COLLAPSE);
   },
 };
 
@@ -310,7 +315,7 @@
    */
   async create(actions) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.USER_ACTION_MONITOR, BridgeAction.CREATE, actions);
+        BridgeTargets.USER_ACTION_MONITOR, BridgeActions.CREATE, actions);
   },
 
   /**
@@ -319,6 +324,6 @@
    */
   async destroy() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.USER_ACTION_MONITOR, BridgeAction.DESTROY);
+        BridgeTargets.USER_ACTION_MONITOR, BridgeActions.DESTROY);
   },
 };
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js
index 858847e..cc9960d 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js
@@ -6,15 +6,15 @@
  * @fileoverview Enums for BridgeHelper functions.
  */
 goog.provide('BridgeAction');
+goog.provide('BridgeActions');
+goog.provide('BridgeConstants');
 goog.provide('BridgeTarget');
+goog.provide('BridgeTargets');
 
-/**
- * The class that a message is being sent to.
- * @enum {string}
- */
-BridgeTarget = {
-  BRAILLE_BACKGROUND: 'BrailleBackground',
+/** @enum {string} */
+BridgeTargets = {
   BRAILLE_COMMAND_HANDLER: 'BrailleCommandHandler',
+  CHROMEVOX_BACKGROUND: 'ChromeVoxBackground',
   CHROMEVOX_PREFS: 'ChromeVoxPrefs',
   CHROMEVOX_STATE: 'ChromeVoxState',
   COMMAND_HANDLER: 'CommandHandler',
@@ -26,14 +26,29 @@
   PANEL_BACKGROUND: 'PanelBackground',
   USER_ACTION_MONITOR: 'UserActionMonitor',
 };
+/**
+ * The class that a message is being sent to.
+ * @typedef {BridgeTargets|string}
+ */
+BridgeTarget;
+
+BridgeConstants = {
+  BrailleBackground: {
+    /** @public {BridgeTarget} */
+    TARGET: 'BrailleBackground',
+    /** @enum {string} */
+    Action: {
+      BACK_TRANSLATE: 'backTranslate',
+      REFRESH_BRAILLE_TABLE: 'refreshBrailleTable',
+    },
+  },
+};
 
 /**
- * The action that the message is requesting be performed.
  * @enum {string}
  */
-BridgeAction = {
+BridgeActions = {
   ADD_MENU_ITEM: 'addMenuItem',
-  BACK_TRANSLATE: 'backTranslate',
   CLEAR_CURRENT_RANGE: 'clearCurrentRange',
   CLEAR_LOG: 'clearLog',
   CREATE: 'create',
@@ -44,6 +59,7 @@
   FOCUS_TAB: 'focusTab',
   GET: 'get',
   GET_ACTIONS_FOR_CURRENT_NODE: 'getActionsForCurrentNode',
+  GET_CURRENT_VOICE: 'getCurrentVoice',
   GET_LOGS: 'getLogs',
   GET_PREFS: 'getPrefs',
   GET_TAB_MENU_DATA: 'getTabMenuData',
@@ -54,7 +70,6 @@
   ON_CURRENT_RANGE_CHANGED: 'onCurrentRangeChanged',
   PERFORM_CUSTOM_ACTION_ON_CURRENT_NODE: 'performCustomActionOnCurrentNode',
   PERFORM_STANDARD_ACTION_ON_CURRENT_NODE: 'performStandardActionOnCurrentNode',
-  REFRESH_BRAILLE_TABLE: 'refreshBrailleTable',
   SET_ENABLED: 'setEnabled',
   SET_LOGGING_PREFS: 'setLoggingPrefs',
   SET_PREF: 'setPref',
@@ -62,3 +77,9 @@
   UPDATE_PUNCTUATION_ECHO: 'updatePunctuationEcho',
   WAIT_FOR_PANEL_COLLAPSE: 'waitForPanelCollapse',
 };
+
+/**
+ * The action that the message is requesting be performed.
+ * @typedef {BridgeActions|BridgeConstants.BrailleBackground.Action}
+ */
+BridgeAction;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_helper.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_helper.js
index a5f9c769f3..5e4e77b5 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_helper.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_helper.js
@@ -54,8 +54,8 @@
   }
 
   if (BridgeHelper.handlers_[target][action]) {
-    throw 'Error: Re-assigning handlers for a specific target/action ' +
-        'is not permitted';
+    throw 'Error: Re-assigning handlers for a specific target/action (' +
+        target + '.' + action + ') is not permitted';
   }
 
   BridgeHelper.handlers_[target][action] = handler;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/panel_bridge.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/panel_bridge.js
index 0e4eb29a..773df72 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/panel_bridge.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/panel_bridge.js
@@ -18,12 +18,12 @@
    */
   addMenuItem(itemData) {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL, BridgeAction.ADD_MENU_ITEM, itemData);
+        BridgeTargets.PANEL, BridgeActions.ADD_MENU_ITEM, itemData);
   },
 
   /** @return {!Promise} */
   async onCurrentRangeChanged() {
     return BridgeHelper.sendMessage(
-        BridgeTarget.PANEL, BridgeAction.ON_CURRENT_RANGE_CHANGED);
+        BridgeTargets.PANEL, BridgeActions.ON_CURRENT_RANGE_CHANGED);
   },
 };
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
index 6e455e9..720de65 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
@@ -1269,8 +1269,8 @@
 }
 
 BridgeHelper.registerHandler(
-    BridgeTarget.PANEL, BridgeAction.ADD_MENU_ITEM,
+    BridgeTargets.PANEL, BridgeActions.ADD_MENU_ITEM,
     (itemData) => Panel.addNodeMenuItem(itemData));
 BridgeHelper.registerHandler(
-    BridgeTarget.PANEL, BridgeAction.ON_CURRENT_RANGE_CHANGED,
+    BridgeTargets.PANEL, BridgeActions.ON_CURRENT_RANGE_CHANGED,
     () => Panel.onCurrentRangeChanged());
diff --git a/chrome/browser/resources/privacy_sandbox/BUILD.gn b/chrome/browser/resources/privacy_sandbox/BUILD.gn
index 9d41283..51e093d 100644
--- a/chrome/browser/resources/privacy_sandbox/BUILD.gn
+++ b/chrome/browser/resources/privacy_sandbox/BUILD.gn
@@ -5,7 +5,7 @@
 import("//chrome/common/features.gni")
 import("//tools/grit/grit_rule.gni")
 import("//tools/grit/preprocess_if_expr.gni")
-import("//tools/polymer/html_to_js.gni")
+import("//tools/polymer/html_to_wrapper.gni")
 import("//tools/typescript/ts_library.gni")
 import("//ui/webui/resources/tools/generate_grd.gni")
 import("privacy_sandbox.gni")
@@ -47,18 +47,18 @@
 preprocess_if_expr("preprocess") {
   in_folder = "."
   out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = non_web_component_files
+  in_files = ts_files
 }
 
 preprocess_if_expr("preprocess_generated") {
-  deps = [ ":web_components" ]
+  deps = [ ":html_wrapper_files" ]
   in_folder = target_gen_dir
   out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = web_component_files
+  in_files = html_wrapper_files
 }
 
-html_to_js("web_components") {
-  js_files = web_component_files
+html_to_wrapper("html_wrapper_files") {
+  in_files = html_files
 }
 
 ts_library("build_ts") {
@@ -66,7 +66,7 @@
   out_dir = "$target_gen_dir/tsc"
   composite = true
   tsconfig_base = "tsconfig_base.json"
-  in_files = non_web_component_files + web_component_files
+  in_files = ts_files + html_wrapper_files
   definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ]
   deps = [
     "//third_party/polymer/v3_0:library",
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox.gni b/chrome/browser/resources/privacy_sandbox/privacy_sandbox.gni
index 3e8844f..2ac978e 100644
--- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox.gni
+++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox.gni
@@ -2,6 +2,18 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-non_web_component_files = [ "privacy_sandbox_dialog_browser_proxy.ts" ]
-
 web_component_files = [ "privacy_sandbox_dialog_app.ts" ]
+
+# Files that are passed as input to html_to_wrapper().
+html_files = []
+foreach(f, web_component_files) {
+  html_files += [ string_replace(f, ".ts", ".html") ]
+}
+
+# Files that are generated by html_to_wrapper().
+html_wrapper_files = []
+foreach(f, html_files) {
+  html_wrapper_files += [ f + ".ts" ]
+}
+
+ts_files = [ "privacy_sandbox_dialog_browser_proxy.ts" ] + web_component_files
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_app.ts b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_app.ts
index 67b0104..5dbc1d2d 100644
--- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_app.ts
+++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_app.ts
@@ -9,24 +9,25 @@
 import './strings.m.js';
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {afterNextRender, html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {afterNextRender, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
+import {getTemplate} from './privacy_sandbox_dialog_app.html.js';
 import {PrivacySandboxDialogBrowserProxy, PrivacySandboxPromptAction} from './privacy_sandbox_dialog_browser_proxy.js';
 
-const PrivacySandboxDialogAppElementBase = PolymerElement;
-
 export interface PrivacySandboxDialogAppElement {
-  $: {contentArea: HTMLElement, expandSection: HTMLElement};
+  $: {
+    contentArea: HTMLElement,
+    expandSection: HTMLElement,
+  };
 }
 
-export class PrivacySandboxDialogAppElement extends
-    PrivacySandboxDialogAppElementBase {
+export class PrivacySandboxDialogAppElement extends PolymerElement {
   static get is() {
     return 'privacy-sandbox-dialog-app';
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
@@ -35,12 +36,14 @@
         type: Boolean,
         observer: 'onLearnMoreExpandedChanged_',
       },
+
       isConsent_: {
         type: Boolean,
         value: () => {
           return loadTimeData.getBoolean('isConsent');
         },
       },
+
       canScrollClass_: String,
       fitIntoDialogClass_: String,
     };
@@ -48,8 +51,8 @@
 
   private expanded_: boolean;
   private isConsent_: boolean;
-  private canScrollClass_: String;
-  private fitIntoDialogClass_: String;
+  private canScrollClass_: string;
+  private fitIntoDialogClass_: string;
   private didStartWithScrollbar_: boolean;
 
   override connectedCallback() {
@@ -144,6 +147,5 @@
   }
 }
 
-
 customElements.define(
     PrivacySandboxDialogAppElement.is, PrivacySandboxDialogAppElement);
diff --git a/chrome/browser/resources/profile_internals/profile_internals_app.html b/chrome/browser/resources/profile_internals/profile_internals_app.html
index 74c7a7c7..26b2949 100644
--- a/chrome/browser/resources/profile_internals/profile_internals_app.html
+++ b/chrome/browser/resources/profile_internals/profile_internals_app.html
@@ -88,6 +88,10 @@
           </ul>
         </td>
       </tr>
+      <tr>
+        <td>Loaded in Memory</td>
+        <td>[[item.profileState.isLoaded]]</td>
+      </tr>
     </table>
   </iron-collapse>
 </template>
diff --git a/chrome/browser/resources/profile_internals/profile_internals_browser_proxy.ts b/chrome/browser/resources/profile_internals/profile_internals_browser_proxy.ts
index d5e17774..aace5840 100644
--- a/chrome/browser/resources/profile_internals/profile_internals_browser_proxy.ts
+++ b/chrome/browser/resources/profile_internals/profile_internals_browser_proxy.ts
@@ -22,6 +22,7 @@
   userAcceptedAccountManagement: boolean,
   keepAlives: Array<KeepAlive>,
   signedAccounts: Array<string>,
+  isLoaded: boolean,
 };
 
 export type ProfileStateElement = {
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/api_listener.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/api_listener.js
index 8aed5e4..afb1468 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/api_listener.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/api_listener.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {createInitialState} from '//resources/cr_components/app_management/util.js';
+import {createInitialState} from 'chrome://resources/cr_components/app_management/util.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {Action} from 'chrome://resources/js/cr/ui/store.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js
index fbbd2f1..94c3a9ed 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js
@@ -10,10 +10,10 @@
 import './borealis_page/borealis_detail_view.js';
 import '../../../settings_shared_css.js';
 
-import {AppManagementUserAction, AppType} from '//resources/cr_components/app_management/constants.js';
-import {getSelectedApp, recordAppManagementUserAction} from '//resources/cr_components/app_management/util.js';
-import {assertNotReached} from '//resources/js/assert.m.js';
-import {html, microTask, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {AppManagementUserAction, AppType} from 'chrome://resources/cr_components/app_management/constants.js';
+import {getSelectedApp, recordAppManagementUserAction} from 'chrome://resources/cr_components/app_management/util.js';
+import {assertNotReached} from 'chrome://resources/js/assert.m.js';
+import {html, microTask, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {Route, Router} from '../../../router.js';
 import {routes} from '../../os_route.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js
index 2d9bb0d..82f02f2 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '//resources/cr_components/localized_link/localized_link.js';
-import '//resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_components/localized_link/localized_link.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
 
-import {AppType, InstallSource} from '//resources/cr_components/app_management/constants.js';
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {AppType, InstallSource} from 'chrome://resources/cr_components/app_management/constants.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {BrowserProxy} from './browser_proxy.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_item.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_item.js
index e46bef55..1d31fa3f 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_item.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_item.js
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 import './shared_style.js';
 import './shared_vars.js';
-import '//resources/cr_elements/cr_icons_css.m.js';
+import 'chrome://resources/cr_elements/cr_icons_css.m.js';
 
-import {AppManagementEntryPoint, AppManagementEntryPointsHistogramName, AppType} from '//resources/cr_components/app_management/constants.js';
-import {getAppIcon} from '//resources/cr_components/app_management/util.js';
-import {assertNotReached} from '//resources/js/assert.m.js';
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {AppManagementEntryPoint, AppManagementEntryPointsHistogramName, AppType} from 'chrome://resources/cr_components/app_management/constants.js';
+import {getAppIcon} from 'chrome://resources/cr_components/app_management/util.js';
+import {assertNotReached} from 'chrome://resources/js/assert.m.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {AppManagementStoreClient, AppManagementStoreClientInterface} from './store_client.js';
 import {openAppDetailPage} from './util.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_management_page.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_management_page.js
index c554d533..752df2e 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_management_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_management_page.js
@@ -8,7 +8,7 @@
 import './main_view.js';
 import '../../../settings_shared_css.js';
 
-import {html, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 /** @polymer */
 class SettingsAppManagementPageElement extends PolymerElement {
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/arc_detail_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/arc_detail_view.js
index e3b399f8..d50d08b4 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/arc_detail_view.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/arc_detail_view.js
@@ -7,13 +7,13 @@
 import './resize_lock_item.js';
 import './supported_links_item.js';
 import './shared_style.js';
-import '//resources/cr_components/app_management/icons.js';
-import '//resources/cr_components/app_management/more_permissions_item.js';
-import '//resources/cr_components/app_management/permission_item.js';
-import '//resources/cr_elements/icons.m.js';
+import 'chrome://resources/cr_components/app_management/icons.js';
+import 'chrome://resources/cr_components/app_management/more_permissions_item.js';
+import 'chrome://resources/cr_components/app_management/permission_item.js';
+import 'chrome://resources/cr_elements/icons.m.js';
 
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {getAppIcon, getPermission, getSelectedApp} from 'chrome://resources/cr_components/app_management/util.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {AppManagementStoreClient, AppManagementStoreClientInterface} from './store_client.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/borealis_page/borealis_detail_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/borealis_page/borealis_detail_view.js
index f61c80e7..5ff220b0 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/borealis_page/borealis_detail_view.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/borealis_page/borealis_detail_view.js
@@ -4,12 +4,12 @@
 
 import '../pin_to_shelf_item.js';
 import '../shared_style.js';
-import '//resources/cr_components/app_management/icons.js';
-import '//resources/cr_components/app_management/permission_item.js';
-import '//resources/cr_elements/icons.m.js';
+import 'chrome://resources/cr_components/app_management/icons.js';
+import 'chrome://resources/cr_components/app_management/permission_item.js';
+import 'chrome://resources/cr_elements/icons.m.js';
 
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {getSelectedApp} from 'chrome://resources/cr_components/app_management/util.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {Router} from '../../../../router.js';
 import {routes} from '../../../os_route.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/browser_proxy.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/browser_proxy.js
index 6587333..4d551a9 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/browser_proxy.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/browser_proxy.js
@@ -12,10 +12,9 @@
 import '/app-management/types.mojom-lite.js';
 import '/app-management/app_management.mojom-lite.js';
 
-import {BrowserProxy as ComponentBrowserProxy} from '//resources/cr_components/app_management/browser_proxy.js';
-import {AppType, InstallReason, OptionalBool} from '//resources/cr_components/app_management/constants.js';
-import {PermissionType, TriState} from '//resources/cr_components/app_management/permission_constants.js';
-import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
+import {BrowserProxy as ComponentBrowserProxy} from 'chrome://resources/cr_components/app_management/browser_proxy.js';
+import {AppType, InstallReason, OptionalBool} from 'chrome://resources/cr_components/app_management/constants.js';
+import {PermissionType, TriState} from 'chrome://resources/cr_components/app_management/permission_constants.js';
 
 import {FakePageHandler} from './fake_page_handler.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/chrome_app_detail_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/chrome_app_detail_view.js
index 9cd6ff3..44a99759 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/chrome_app_detail_view.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/chrome_app_detail_view.js
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 import './app_details_item.js';
-import '//resources/cr_components/app_management/more_permissions_item.js';
+import 'chrome://resources/cr_components/app_management/more_permissions_item.js';
 import './pin_to_shelf_item.js';
 import './shared_style.js';
 
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {getSelectedApp} from 'chrome://resources/cr_components/app_management/util.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {BrowserProxy} from './browser_proxy.js';
 import {AppManagementStoreClient, AppManagementStoreClientInterface} from './store_client.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js
index f4cf39a7..1615371 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js
@@ -31,9 +31,9 @@
  */
 
 // TODO(crbug.com/992795) Merge with cr-view-manager.
-import {assert} from '//resources/js/assert.m.js';
-import {PromiseResolver} from '//resources/js/promise_resolver.m.js';
-import {html, PolymerElement, TemplateInstanceBase, templatize} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
+import {html, PolymerElement, TemplateInstanceBase, templatize} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 /** @polymer */
 class AppManagementDomSwitchElement extends PolymerElement {
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
index 6bee8a9..7d93a29 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {AppType, InstallReason, InstallSource, OptionalBool, WindowMode} from '//resources/cr_components/app_management/constants.js';
-import {PermissionType, PermissionValue, TriState} from '//resources/cr_components/app_management/permission_constants.js';
-import {createBoolPermission, createTriStatePermission, getTriStatePermissionValue} from '//resources/cr_components/app_management/permission_util.js';
+import {AppType, InstallReason, InstallSource, OptionalBool, WindowMode} from 'chrome://resources/cr_components/app_management/constants.js';
+import {PermissionType, PermissionValue, TriState} from 'chrome://resources/cr_components/app_management/permission_constants.js';
+import {createBoolPermission, createTriStatePermission, getTriStatePermissionValue} from 'chrome://resources/cr_components/app_management/permission_util.js';
 import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
 import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/main_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/main_view.js
index 12f9c9c..0351f49 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/main_view.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/main_view.js
@@ -4,13 +4,13 @@
 
 import './app_item.js';
 import './shared_style.js';
-import '//resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
-import '//resources/cr_elements/shared_style_css.m.js';
+import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
+import 'chrome://resources/cr_elements/shared_style_css.m.js';
 
-import {assert} from '//resources/js/assert.m.js';
-import {focusWithoutInk} from '//resources/js/cr/ui/focus_without_ink.m.js';
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {alphabeticalSort} from 'chrome://resources/cr_components/app_management/util.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {Route} from '../../../router.js';
 import {routes} from '../../os_route.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pin_to_shelf_item.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pin_to_shelf_item.js
index 4d44fe9..0531dc4 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pin_to_shelf_item.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pin_to_shelf_item.js
@@ -1,12 +1,12 @@
 // 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.
-import '//resources/cr_components/app_management/toggle_row.js';
+import 'chrome://resources/cr_components/app_management/toggle_row.js';
 
-import {AppManagementUserAction, OptionalBool} from '//resources/cr_components/app_management/constants.js';
-import {assert} from '//resources/js/assert.m.js';
-import {html, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {AppManagementUserAction, OptionalBool} from 'chrome://resources/cr_components/app_management/constants.js';
 import {convertOptionalBoolToBool, recordAppManagementUserAction, toggleOptionalBool} from 'chrome://resources/cr_components/app_management/util.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {recordSettingChange} from '../../metrics_recorder.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_detail_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_detail_view.js
index 6172a786..1c512f06 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_detail_view.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_detail_view.js
@@ -3,17 +3,17 @@
 // found in the LICENSE file.
 
 import '../pin_to_shelf_item.js';
-import '//resources/cr_components/app_management/icons.js';
-import '//resources/cr_components/app_management/permission_item.js';
+import 'chrome://resources/cr_components/app_management/icons.js';
+import 'chrome://resources/cr_components/app_management/permission_item.js';
 import '../shared_style.js';
-import '//resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
-import '//resources/cr_elements/icons.m.js';
+import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
+import 'chrome://resources/cr_elements/icons.m.js';
 
-import {assertNotReached} from '//resources/js/assert.m.js';
-import {loadTimeData} from '//resources/js/load_time_data.m.js';
-import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from '//resources/js/web_ui_listener_behavior.m.js';
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {getSelectedApp} from 'chrome://resources/cr_components/app_management/util.js';
+import {assertNotReached} from 'chrome://resources/js/assert.m.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
+import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/js/web_ui_listener_behavior.m.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {Router} from '../../../../router.js';
 import {routes} from '../../../os_route.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pwa_detail_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pwa_detail_view.js
index 9135bce..dee10bc7 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pwa_detail_view.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/pwa_detail_view.js
@@ -5,14 +5,14 @@
 import './pin_to_shelf_item.js';
 import './supported_links_item.js';
 import './shared_style.js';
-import '//resources/cr_components/app_management/file_handling_item.js';
-import '//resources/cr_components/app_management/icons.js';
-import '//resources/cr_components/app_management/more_permissions_item.js';
-import '//resources/cr_components/app_management/permission_item.js';
-import '//resources/cr_elements/icons.m.js';
+import 'chrome://resources/cr_components/app_management/file_handling_item.js';
+import 'chrome://resources/cr_components/app_management/icons.js';
+import 'chrome://resources/cr_components/app_management/more_permissions_item.js';
+import 'chrome://resources/cr_components/app_management/permission_item.js';
+import 'chrome://resources/cr_elements/icons.m.js';
 
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {getAppIcon, getSelectedApp} from 'chrome://resources/cr_components/app_management/util.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {AppManagementStoreClient, AppManagementStoreClientInterface} from './store_client.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/resize_lock_item.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/resize_lock_item.js
index 47ee5d8..7c7356b 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/resize_lock_item.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/resize_lock_item.js
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '//resources/cr_components/app_management/toggle_row.js';
+import 'chrome://resources/cr_components/app_management/toggle_row.js';
 
-import {AppManagementUserAction} from '//resources/cr_components/app_management/constants.js';
-import {assert} from '//resources/js/assert.m.js';
-import {html, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {AppManagementUserAction} from 'chrome://resources/cr_components/app_management/constants.js';
 import {recordAppManagementUserAction} from 'chrome://resources/cr_components/app_management/util.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {recordSettingChange} from '../../metrics_recorder.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_style.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_style.js
index fb160eb..ffdc1f5 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_style.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_style.js
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '//resources/cr_elements/chromeos/cros_color_overrides.m.js';
-import '//resources/cr_components/app_management/shared_style.js';
+import 'chrome://resources/cr_elements/chromeos/cros_color_overrides.m.js';
+import 'chrome://resources/cr_components/app_management/shared_style.js';
 
 const template = document.createElement('template');
 template.innerHTML = `
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.js
index fe8e31f..49d414e 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.js
@@ -2,10 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-
-import '//resources/cr_elements/shared_vars_css.m.js';
-import '//resources/cr_components/app_management/shared_vars.js';
+import 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import 'chrome://resources/cr_elements/shared_vars_css.m.js';
+import 'chrome://resources/cr_components/app_management/shared_vars.js';
 
 const $_documentContainer = document.createElement('template');
 $_documentContainer.innerHTML = `{__html_template__}`;
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_dialog.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_dialog.js
index c32bf5e..d88096e 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_dialog.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_dialog.js
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '//resources/cr_elements/cr_dialog/cr_dialog.m.js';
-import '//resources/polymer/v3_0/iron-list/iron-list.js';
+import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js';
+import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
 
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 /**
  * @constructor
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js
index e15c9b9c..7f39fb4 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_item.js
@@ -4,16 +4,16 @@
 
 import './supported_links_overlapping_apps_dialog.js';
 import './supported_links_dialog.js';
-import '//resources/cr_components/localized_link/localized_link.js';
-import '//resources/cr_elements/cr_radio_button/cr_radio_button.m.js';
-import '//resources/cr_elements/cr_radio_group/cr_radio_group.m.js';
+import 'chrome://resources/cr_components/localized_link/localized_link.js';
+import 'chrome://resources/cr_elements/cr_radio_button/cr_radio_button.m.js';
+import 'chrome://resources/cr_elements/cr_radio_group/cr_radio_group.m.js';
 
-import {AppManagementUserAction, AppType, WindowMode} from '//resources/cr_components/app_management/constants.js';
-import {assert} from '//resources/js/assert.m.js';
-import {focusWithoutInk} from '//resources/js/cr/ui/focus_without_ink.m.js';
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {AppManagementUserAction, AppType, WindowMode} from 'chrome://resources/cr_components/app_management/constants.js';
 import {recordAppManagementUserAction} from 'chrome://resources/cr_components/app_management/util.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {recordSettingChange} from '../../metrics_recorder.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_overlapping_apps_dialog.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_overlapping_apps_dialog.js
index fb36af0..5385c497 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_overlapping_apps_dialog.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/supported_links_overlapping_apps_dialog.js
@@ -4,9 +4,9 @@
 
 import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js';
 
-import {assert} from '//resources/js/assert.m.js';
-import {I18nBehavior, I18nBehaviorInterface} from '//resources/js/i18n_behavior.m.js';
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
+import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {AppManagementStoreClient, AppManagementStoreClientInterface} from './store_client.js';
 
diff --git a/chrome/browser/safe_browsing/signature_evaluator_mac.mm b/chrome/browser/safe_browsing/signature_evaluator_mac.mm
index 8c0882a..ca4259d5 100644
--- a/chrome/browser/safe_browsing/signature_evaluator_mac.mm
+++ b/chrome/browser/safe_browsing/signature_evaluator_mac.mm
@@ -66,7 +66,7 @@
                           ClientDownloadRequest_SignatureInfo* signature) {
   scoped_refptr<BinaryFeatureExtractor> bfe = new BinaryFeatureExtractor();
 
-  // TODO(kerrnel): if Chrome ever opts into the OS X "kill" semantics, this
+  // If Chrome ever opts into the OS X "kill" semantics, this
   // call has to change. `ExtractImageFeatures` maps the file, which will
   // cause Chrome to be killed before it can report on the invalid file.
   // This call will need to read(2) the binary into a buffer.
diff --git a/chrome/browser/segmentation_platform/segmentation_platform_service_factory.cc b/chrome/browser/segmentation_platform/segmentation_platform_service_factory.cc
index 5da61d7..60ffc753 100644
--- a/chrome/browser/segmentation_platform/segmentation_platform_service_factory.cc
+++ b/chrome/browser/segmentation_platform/segmentation_platform_service_factory.cc
@@ -87,9 +87,6 @@
   params->ukm_data_manager =
       UkmDatabaseClient::GetInstance().GetUkmDataManager();
   params->profile_prefs = profile->GetPrefs();
-  params->local_state = local_state_to_use_ == nullptr
-                            ? g_browser_process->local_state()
-                            : local_state_to_use_.get();
   params->configs = GetSegmentationPlatformConfig();
   params->field_trial_register = std::make_unique<FieldTrialRegisterImpl>();
 
diff --git a/chrome/browser/segmentation_platform/segmentation_platform_service_factory.h b/chrome/browser/segmentation_platform/segmentation_platform_service_factory.h
index 250750e..4e24232 100644
--- a/chrome/browser/segmentation_platform/segmentation_platform_service_factory.h
+++ b/chrome/browser/segmentation_platform/segmentation_platform_service_factory.h
@@ -5,7 +5,6 @@
 #ifndef CHROME_BROWSER_SEGMENTATION_PLATFORM_SEGMENTATION_PLATFORM_SERVICE_FACTORY_H_
 #define CHROME_BROWSER_SEGMENTATION_PLATFORM_SEGMENTATION_PLATFORM_SERVICE_FACTORY_H_
 
-#include "base/memory/raw_ptr.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 
 namespace base {
@@ -17,7 +16,6 @@
 class BrowserContext;
 }  // namespace content
 
-class PrefService;
 class Profile;
 
 namespace segmentation_platform {
@@ -40,10 +38,6 @@
   SegmentationPlatformServiceFactory& operator=(
       const SegmentationPlatformServiceFactory&) = delete;
 
-  void set_local_state_for_testing(PrefService* local_state) {
-    local_state_to_use_ = local_state;
-  }
-
  private:
   friend struct base::DefaultSingletonTraits<
       SegmentationPlatformServiceFactory>;
@@ -54,8 +48,6 @@
   // BrowserContextKeyedServiceFactory overrides.
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-
-  raw_ptr<PrefService> local_state_to_use_;
 };
 
 }  // namespace segmentation_platform
diff --git a/chrome/browser/segmentation_platform/service_browsertest.cc b/chrome/browser/segmentation_platform/service_browsertest.cc
index 05ace33..7eab6daa 100644
--- a/chrome/browser/segmentation_platform/service_browsertest.cc
+++ b/chrome/browser/segmentation_platform/service_browsertest.cc
@@ -132,13 +132,7 @@
                                /*result_expected=*/false);
 }
 
-// TODO(crbug.com/1324887): Re-enable this test
-#if defined(MEMORY_SANITIZER)
-#define MAYBE_RunDefaultModel DISABLED_RunDefaultModel
-#else
-#define MAYBE_RunDefaultModel RunDefaultModel
-#endif
-IN_PROC_BROWSER_TEST_F(SegmentationPlatformTest, MAYBE_RunDefaultModel) {
+IN_PROC_BROWSER_TEST_F(SegmentationPlatformTest, RunDefaultModel) {
   WaitForPlatformInit();
   // Result is available from previous session's selection.
   ExpectSegmentSelectionResult(kChromeLowUserEngagementSegmentationKey,
@@ -173,8 +167,7 @@
 // incognito mode. This disables the segmentation platform data collection.
 // TODO(ssid): Fix this test for CrOS by waiting for signin profile to be
 // deleted at startup before adding metrics.
-// TODO(crbug.com/1324887): Re-enable this test
-#if BUILDFLAG(IS_CHROMEOS) || defined(MEMORY_SANITIZER)
+#if BUILDFLAG(IS_CHROMEOS)
 #define MAYBE_PRE_RunUkmBasedModel DISABLED_PRE_RunUkmBasedModel
 #define MAYBE_RunUkmBasedModel DISABLED_RunUkmBasedModel
 #else
diff --git a/chrome/browser/tracing/chrome_tracing_delegate.cc b/chrome/browser/tracing/chrome_tracing_delegate.cc
index 3d99201..271d647c 100644
--- a/chrome/browser/tracing/chrome_tracing_delegate.cc
+++ b/chrome/browser/tracing/chrome_tracing_delegate.cc
@@ -64,26 +64,6 @@
 using tracing::BackgroundTracingState;
 using tracing::BackgroundTracingStateManager;
 
-// These values are logged to UMA. Entries should not be renumbered and numeric
-// values should never be reused. Please keep in sync with
-// "TracingFinalizationDisallowedReason" in
-// src/tools/metrics/histograms/enums.xml.
-enum class TracingFinalizationDisallowedReason {
-  kIncognitoLaunched = 0,
-  kProfileNotLoaded = 1,
-  kCrashMetricsNotLoaded = 2,
-  kLastSessionCrashed = 3,
-  kMetricsReportingDisabled = 4,
-  kTraceUploadedRecently = 5,
-  kLastTracingSessionDidNotEnd = 6,
-  kMaxValue = kLastTracingSessionDidNotEnd
-};
-
-void RecordDisallowedMetric(TracingFinalizationDisallowedReason reason) {
-  UMA_HISTOGRAM_ENUMERATION("Tracing.Background.FinalizationDisallowedReason",
-                            reason);
-}
-
 bool IsBackgroundTracingCommandLine() {
   auto tracing_mode = tracing::GetBackgroundTracingSetupMode();
   if (tracing_mode == BackgroundTracingSetupMode::kFromConfigFile ||
@@ -192,8 +172,8 @@
 
   if (requires_anonymized_data &&
       (incognito_launched_ || chrome::IsOffTheRecordSessionActive())) {
-    RecordDisallowedMetric(
-        TracingFinalizationDisallowedReason::kIncognitoLaunched);
+    tracing::RecordDisallowedMetric(
+        tracing::TracingFinalizationDisallowedReason::kIncognitoLaunched);
     return false;
   }
 
@@ -203,16 +183,17 @@
   // Don't start a new trace if the previous trace did not end.
   if (action == BackgroundScenarioAction::kStartTracing &&
       state.DidLastSessionEndUnexpectedly()) {
-    RecordDisallowedMetric(
-        TracingFinalizationDisallowedReason::kLastTracingSessionDidNotEnd);
+    tracing::RecordDisallowedMetric(
+        tracing::TracingFinalizationDisallowedReason::
+            kLastTracingSessionDidNotEnd);
     return false;
   }
 
   // Check the trace limit for both kStartTracing and kUploadTrace actions
   // because there is no point starting a trace that can't be uploaded.
   if (!ignore_trace_limit && state.DidRecentlyUploadForScenario(config)) {
-    RecordDisallowedMetric(
-        TracingFinalizationDisallowedReason::kTraceUploadedRecently);
+    tracing::RecordDisallowedMetric(
+        tracing::TracingFinalizationDisallowedReason::kTraceUploadedRecently);
     return false;
   }
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 851b21a..6542482 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -3260,8 +3260,8 @@
 
   if (is_chromeos_lacros) {
     sources += [
-      "startup/first_run_lacros.cc",
-      "startup/first_run_lacros.h",
+      "startup/lacros_first_run_service.cc",
+      "startup/lacros_first_run_service.h",
       "views/chrome_browser_main_extra_parts_views_lacros.cc",
       "views/chrome_browser_main_extra_parts_views_lacros.h",
       "views/frame/browser_frame_lacros.cc",
diff --git a/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.cc b/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.cc
index 39f3b3b..af2d0f48 100644
--- a/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.cc
+++ b/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.cc
@@ -10,13 +10,18 @@
 #include "ash/public/cpp/assistant/assistant_interface_binder.h"
 #include "ash/public/cpp/assistant/controller/assistant_interaction_controller.h"
 #include "ash/public/cpp/network_config_service.h"
+#include "ash/public/cpp/new_window_delegate.h"
 #include "base/command_line.h"
+#include "base/strings/string_util.h"
 #include "chrome/browser/ash/assistant/assistant_util.h"
+#include "chrome/browser/ash/crosapi/browser_util.h"
+#include "chrome/browser/ash/crosapi/url_handler_ash.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/ui/ash/assistant/assistant_setup.h"
 #include "chrome/browser/ui/ash/assistant/device_actions_delegate_impl.h"
+#include "chrome/common/webui_url_constants.h"
 #include "chromeos/services/assistant/public/cpp/features.h"
 #include "chromeos/services/assistant/public/mojom/assistant_audio_decoder.mojom.h"
 #include "components/session_manager/core/session_manager.h"
@@ -154,6 +159,27 @@
   ash::GetNetworkConfigService(std::move(receiver));
 }
 
+void AssistantBrowserDelegateImpl::OpenUrl(GURL url) {
+  // OS settings app is implemented in Ash, using `NewWindowDelegate::OpenUrl()`
+  // does not qualify for redirection in Lacros due to security limitations.
+  // Thus we need to explicitly send the request to Ash to launch the OS
+  // settings app.
+  if (crosapi::browser_util::IsLacrosPrimaryBrowser() &&
+      base::StartsWith(url.spec(), chrome::kChromeUIOSSettingsURL,
+                       base::CompareCase::INSENSITIVE_ASCII)) {
+    crosapi::UrlHandlerAsh().OpenUrl(url);
+  } else {
+    // The new tab should be opened with a user activation since the user
+    // interacted with the Assistant to open the url. |in_background| describes
+    // the relationship between |url| and Assistant UI, not the browser. As
+    // such, the browser will always be instructed to open |url| in a new
+    // browser tab and Assistant UI state will be updated downstream to respect
+    // |in_background|.
+    ash::NewWindowDelegate::GetPrimary()->OpenUrl(
+        url, ash::NewWindowDelegate::OpenUrlFrom::kUserInteraction);
+  }
+}
+
 #if BUILDFLAG(ENABLE_CROS_LIBASSISTANT)
 void AssistantBrowserDelegateImpl::RequestLibassistantService(
     mojo::PendingReceiver<chromeos::libassistant::mojom::LibassistantService>
diff --git a/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.h b/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.h
index 948d2d7..27c746e 100644
--- a/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.h
+++ b/chrome/browser/ui/ash/assistant/assistant_browser_delegate_impl.h
@@ -73,6 +73,7 @@
   void RequestNetworkConfig(
       mojo::PendingReceiver<chromeos::network_config::mojom::CrosNetworkConfig>
           receiver) override;
+  void OpenUrl(GURL url) override;
 #if BUILDFLAG(ENABLE_CROS_LIBASSISTANT)
   void RequestLibassistantService(
       mojo::PendingReceiver<chromeos::libassistant::mojom::LibassistantService>
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc
index 9120760..d7616a3a 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -877,13 +877,18 @@
 }
 
 void ChromeAutofillClient::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
+    AutofillDriver* autofill_driver,
     const std::vector<FormStructure*>& forms) {
-  password_manager::ContentPasswordManagerDriver* driver =
+  // This cast is safe because all non-iOS clients use ContentAutofillDriver as
+  // AutofillDriver implementation.
+  content::RenderFrameHost* rfh =
+      static_cast<ContentAutofillDriver*>(autofill_driver)->render_frame_host();
+  password_manager::ContentPasswordManagerDriver* password_manager_driver =
       password_manager::ContentPasswordManagerDriver::GetForRenderFrameHost(
           rfh);
-  if (driver) {
-    driver->GetPasswordManager()->ProcessAutofillPredictions(driver, forms);
+  if (password_manager_driver) {
+    password_manager_driver->GetPasswordManager()->ProcessAutofillPredictions(
+        password_manager_driver, forms);
   }
 }
 
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h
index 757ed60..ff68e21 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.h
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -18,6 +18,7 @@
 #include "chrome/browser/ui/autofill/payments/autofill_error_dialog_controller_impl.h"
 #include "chrome/browser/ui/autofill/payments/autofill_progress_dialog_controller_impl.h"
 #include "components/autofill/core/browser/autofill_client.h"
+#include "components/autofill/core/browser/autofill_driver.h"
 #include "components/autofill/core/browser/logging/log_manager.h"
 #include "components/autofill/core/browser/payments/legal_message_line.h"
 #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl.h"
@@ -192,7 +193,7 @@
   bool IsAutocompleteEnabled() override;
   bool IsPasswordManagerEnabled() override;
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
+      AutofillDriver* driver,
       const std::vector<FormStructure*>& forms) override;
   void DidFillOrPreviewField(const std::u16string& autofilled_value,
                              const std::u16string& profile_full_name) override;
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index 631c30c..f720ded 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -734,7 +734,7 @@
 
   StatusBubble* GetStatusBubbleForTesting();
 
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
   void RunScreenAIAnnotator();
 #endif
 
diff --git a/chrome/browser/ui/passwords/password_manager_navigation_throttle.cc b/chrome/browser/ui/passwords/password_manager_navigation_throttle.cc
index 1e51bd2..622ef08 100644
--- a/chrome/browser/ui/passwords/password_manager_navigation_throttle.cc
+++ b/chrome/browser/ui/passwords/password_manager_navigation_throttle.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/common/webui_url_constants.h"
+#include "components/password_manager/core/browser/password_manager_constants.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/navigation_handle.h"
@@ -31,8 +32,6 @@
 using content::NavigationThrottle;
 using content::WebContents;
 
-constexpr char kManageMyPasswordsURL[] = "https://passwords.google.com/native";
-constexpr char kReferrerURL[] = "https://passwords.google/";
 #if !BUILDFLAG(IS_ANDROID)
 constexpr char kChromeUIPasswordsURL[] = "chrome:/settings/passwords";
 #endif
@@ -45,8 +44,8 @@
 
   // Referrer origin and target URL must match.
   url::Origin origin = handle->GetInitiatorOrigin().value_or(url::Origin());
-  if (origin != url::Origin::Create(GURL(kReferrerURL)) ||
-      handle->GetURL() != GURL(kManageMyPasswordsURL))
+  if (origin != url::Origin::Create(GURL(password_manager::kReferrerURL)) ||
+      handle->GetURL() != GURL(password_manager::kManageMyPasswordsURL))
     return false;
 
 #if BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/ui/passwords/password_manager_navigation_throttle_unittest.cc b/chrome/browser/ui/passwords/password_manager_navigation_throttle_unittest.cc
index a4cb16e..935eff0 100644
--- a/chrome/browser/ui/passwords/password_manager_navigation_throttle_unittest.cc
+++ b/chrome/browser/ui/passwords/password_manager_navigation_throttle_unittest.cc
@@ -6,6 +6,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/password_manager/core/browser/password_manager_constants.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "components/variations/scoped_variations_ids_provider.h"
 #include "content/public/browser/navigation_throttle.h"
@@ -22,9 +23,6 @@
 
 namespace {
 
-constexpr char kManageMyPasswordsURL[] = "https://passwords.google.com/native";
-constexpr char kReferrerURL[] = "https://passwords.google/";
-
 // An option struct to simplify setting up a specific navigation throttle.
 struct NavigationThrottleOptions {
   GURL url;
@@ -74,16 +72,17 @@
 
 TEST_F(PasswordManagerNavigationThrottleTest, CreatesNavigationThrottle) {
   EXPECT_TRUE(CreateNavigationThrottle({
-      .url = GURL(kManageMyPasswordsURL),
+      .url = GURL(password_manager::kManageMyPasswordsURL),
       .page_transition = ui::PAGE_TRANSITION_LINK,
-      .initiator_origin = url::Origin::Create(GURL(kReferrerURL)),
+      .initiator_origin =
+          url::Origin::Create(GURL(password_manager::kReferrerURL)),
   }));
 }
 
 TEST_F(PasswordManagerNavigationThrottleTest,
        DoesntCreateNavigationThrottleWhenOriginDoesntMatch) {
   EXPECT_FALSE(CreateNavigationThrottle({
-      .url = GURL(kManageMyPasswordsURL),
+      .url = GURL(password_manager::kManageMyPasswordsURL),
       .page_transition = ui::PAGE_TRANSITION_LINK,
       .initiator_origin = url::Origin::Create(GURL("https://example.com/")),
   }));
@@ -94,15 +93,17 @@
   EXPECT_FALSE(CreateNavigationThrottle({
       .url = GURL("https://passwords.google.com/help"),
       .page_transition = ui::PAGE_TRANSITION_LINK,
-      .initiator_origin = url::Origin::Create(GURL(kReferrerURL)),
+      .initiator_origin =
+          url::Origin::Create(GURL(password_manager::kReferrerURL)),
   }));
 }
 
 TEST_F(PasswordManagerNavigationThrottleTest,
        DoesntCreateNavigationThrottleWhenNotLinkTransition) {
   EXPECT_FALSE(CreateNavigationThrottle({
-      .url = GURL(kManageMyPasswordsURL),
+      .url = GURL(password_manager::kManageMyPasswordsURL),
       .page_transition = ui::PAGE_TRANSITION_AUTO_BOOKMARK,
-      .initiator_origin = url::Origin::Create(GURL(kReferrerURL)),
+      .initiator_origin =
+          url::Origin::Create(GURL(password_manager::kReferrerURL)),
   }));
 }
diff --git a/chrome/browser/ui/signin_view_controller.h b/chrome/browser/ui/signin_view_controller.h
index 8974d9f5..2594583 100644
--- a/chrome/browser/ui/signin_view_controller.h
+++ b/chrome/browser/ui/signin_view_controller.h
@@ -148,6 +148,8 @@
   // If `profile_creation_required_by_policy` is true, the wording of the dialog
   // will tell the user that an admin requires a new profile for the account,
   // otherwise the default wording will be used.
+  // When `show_link_data_option` is false, the callback is called with either
+  // SIGNIN_CHOICE_CANCEL or SIGNIN_CHOICE_NEW_PROFILE.
   void ShowModalEnterpriseConfirmationDialog(
       const AccountInfo& account_info,
       bool profile_creation_required_by_policy,
diff --git a/chrome/browser/ui/startup/first_run_lacros.cc b/chrome/browser/ui/startup/first_run_lacros.cc
deleted file mode 100644
index ec79603..0000000
--- a/chrome/browser/ui/startup/first_run_lacros.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2022 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/startup/first_run_lacros.h"
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_forward.h"
-#include "base/command_line.h"
-#include "base/feature_list.h"
-#include "base/files/file_path.h"
-#include "base/logging.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/lacros/lacros_prefs.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/profiles/profile_window.h"
-#include "chrome/browser/profiles/profiles_state.h"
-#include "chrome/browser/signin/identity_manager_factory.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/profile_picker.h"
-#include "chrome/common/chrome_switches.h"
-#include "components/prefs/pref_service.h"
-#include "components/signin/public/base/consent_level.h"
-#include "components/signin/public/base/signin_switches.h"
-#include "components/signin/public/identity_manager/identity_manager.h"
-
-namespace {
-
-void SetFirstRunFinished() {
-  PrefService* local_state = g_browser_process->local_state();
-  local_state->SetBoolean(lacros_prefs::kPrimaryProfileFirstRunFinished, true);
-}
-
-// Processes the outcome from the FRE and resumes the user's interrupted task.
-// `original_intent_callback` should be run to allow the caller to resume what
-// they were trying to do before they stopped to show the FRE. If the FRE's
-// `status` is not `ProfilePicker::FirstRunExitStatus::kCompleted`, that
-// `original_intent_callback` will be called with `proceed` set to false,
-// otherwise it will be called with true. `post_first_run_callback` will be
-// executed for completed flows, to perform tasks that the FRE requires after
-// the interrupted task is resumed.
-void OnFirstRunHasExited(ResumeTaskCallback original_intent_callback,
-                         ProfilePicker::FirstRunExitStatus status,
-                         base::OnceClosure post_first_run_callback) {
-  if (status != ProfilePicker::FirstRunExitStatus::kQuitEarly) {
-    // The user got to the last step, we can mark the FRE as finished, whether
-    // we eventually proceed with the original intent or not.
-    SetFirstRunFinished();
-  }
-
-  bool proceed = status == ProfilePicker::FirstRunExitStatus::kCompleted;
-  std::move(original_intent_callback).Run(proceed);
-
-  if (proceed && post_first_run_callback)
-    std::move(post_first_run_callback).Run();
-}
-
-}  // namespace
-
-bool ShouldOpenPrimaryProfileFirstRun(Profile* profile) {
-  if (!base::FeatureList::IsEnabled(switches::kLacrosNonSyncingProfiles)) {
-    // Sync is already always forced, no point showing the FRE to ask the user
-    // to sync.
-    return false;
-  }
-
-  const base::CommandLine* command_line =
-      base::CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(switches::kNoFirstRun))
-    return false;
-
-  if (profiles::IsKioskSession() || profiles::IsPublicSession())
-    return false;
-
-  // Having secondary profiles implies that the user already used Chrome and so
-  // should not have to see the FRE. So we never want to run it for these.
-  if (!profile->IsMainProfile())
-    return false;
-
-  // Don't show the FRE if we are in a Guest user pod or in a Guest profile.
-  if (profile->IsGuestSession())
-    return false;
-
-  const PrefService* const pref_service = g_browser_process->local_state();
-  return !pref_service->GetBoolean(
-      lacros_prefs::kPrimaryProfileFirstRunFinished);
-}
-
-bool TryMarkFirstRunAlreadyFinished(Profile* profile) {
-  DCHECK(ShouldOpenPrimaryProfileFirstRun(profile));  // Caller should check.
-
-  signin::IdentityManager* identity_manager =
-      IdentityManagerFactory::GetForProfile(profile);
-
-  // Handle sessions migrated from Ash or from Lacros without the feature. These
-  // always had Sync on and don't need the FRE.
-  if (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) {
-    // The FRE artificially marks Sync as being consented while it's open, as
-    // it needs to check the sync server for policies. We need to check if
-    // that's the case, and let the active FRE take care of marking its state
-    // finished.
-    if (ProfilePicker::IsLacrosFirstRunOpen()) {
-      return false;
-    }
-
-    SetFirstRunFinished();
-    return true;
-  }
-
-  // TODO(crbug.com/1300109): Also update Sync and FRE state based on policies.
-
-  return false;
-}
-
-void OpenPrimaryProfileFirstRunIfNeeded(ResumeTaskCallback callback) {
-  ProfileManager* profile_manager = g_browser_process->profile_manager();
-
-  Profile* primary_profile = profile_manager->GetProfileByPath(
-      profile_manager->GetPrimaryUserProfilePath());
-  DCHECK(primary_profile);
-
-  if (TryMarkFirstRunAlreadyFinished(primary_profile)) {
-    std::move(callback).Run(/*proceed=*/true);
-    return;
-  }
-
-  ProfilePicker::Show(ProfilePicker::Params::ForLacrosPrimaryProfileFirstRun(
-      base::BindOnce(&OnFirstRunHasExited, std::move(callback))));
-}
diff --git a/chrome/browser/ui/startup/first_run_lacros.h b/chrome/browser/ui/startup/first_run_lacros.h
deleted file mode 100644
index affe9b6f..0000000
--- a/chrome/browser/ui/startup/first_run_lacros.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2022 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_STARTUP_FIRST_RUN_LACROS_H_
-#define CHROME_BROWSER_UI_STARTUP_FIRST_RUN_LACROS_H_
-
-#include "base/callback_forward.h"
-#include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
-
-#if !BUILDFLAG(IS_CHROMEOS_LACROS)
-#error This file should only be included on lacros.
-#endif
-
-class Profile;
-
-// Task to run after the FRE is exited, with `proceed` indicating whether it
-// should be aborted or resumed.
-using ResumeTaskCallback = base::OnceCallback<void(bool proceed)>;
-
-// Returns whether the primary (main) profile first run experience (including
-// sync promo) should be opened on startup.
-bool ShouldOpenPrimaryProfileFirstRun(Profile* profile);
-
-// Assuming that the primary profile first run experience needs to be opened on
-// startup, attempts to complete it silently, in case collecting consent is not
-// needed.
-// Returns `true` if the FRE was marked finished. If not, `false` will be
-// returned and `OpenPrimaryProfileFirstRunIfNeeded()` will need to be
-// eventually called to show the visual FRE.
-bool TryMarkFirstRunAlreadyFinished(Profile* primary_profile);
-
-// This function takes the user through the browser FRE.
-// 1) First, it checks whether the FRE flow can be skipped in the first place.
-//    This is the case when sync consent is already given (true for existing
-//    users that migrated to lacros) or when enterprise policies forbid the FRE.
-//    If so, the call directly 'finishes' the flow (see below).
-// 2) Then, it opens the FRE UI (in the profile picker window) and
-//    asynchronously 'finishes' the flow (sets a flag in the local prefs) once
-//    the user chooses any action on the sync consent screen. If the user exits
-//    the FRE UI via the generic 'Close window' affordances, it is interpreted
-//    as an intent to exit the app and `callback` will be called with `proceed`
-//    set to false. If they exit it via the dedicated options in the flow, it
-//    will be considered 'completed' and `callback` will be run with `proceed`
-//    set to true. If the FRE flow is exited before the sync consent screen, the
-//    flow is considered 'aborted', and can be shown again at the next startup.
-// When this method is called again while FRE is in progress, the previous
-// callback is aborted (called with false), and is replaced by `callback`.
-void OpenPrimaryProfileFirstRunIfNeeded(ResumeTaskCallback callback);
-
-#endif  // CHROME_BROWSER_UI_STARTUP_FIRST_RUN_LACROS_H_
diff --git a/chrome/browser/ui/startup/lacros_first_run_service.cc b/chrome/browser/ui/startup/lacros_first_run_service.cc
new file mode 100644
index 0000000..616ad085
--- /dev/null
+++ b/chrome/browser/ui/startup/lacros_first_run_service.cc
@@ -0,0 +1,198 @@
+// Copyright 2022 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/startup/lacros_first_run_service.h"
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/callback_forward.h"
+#include "base/command_line.h"
+#include "base/feature_list.h"
+#include "base/files/file_path.h"
+#include "base/logging.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/lacros/lacros_prefs.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_window.h"
+#include "chrome/browser/profiles/profiles_state.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/profile_picker.h"
+#include "chrome/common/chrome_switches.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/prefs/pref_service.h"
+#include "components/signin/public/base/consent_level.h"
+#include "components/signin/public/base/signin_switches.h"
+#include "components/signin/public/identity_manager/identity_manager.h"
+
+namespace {
+
+bool IsFirstRunEligibleProfile(Profile* profile) {
+  // Having secondary profiles implies that the user already used Chrome and so
+  // should not have to see the FRE. So we never want to run it for these.
+  if (!profile->IsMainProfile())
+    return false;
+
+  // Don't show the FRE if we are in a Guest user pod or in a Guest profile.
+  if (profile->IsGuestSession())
+    return false;
+
+  if (profile->IsOffTheRecord())
+    return false;
+
+  return true;
+}
+
+void SetFirstRunFinished() {
+  PrefService* local_state = g_browser_process->local_state();
+  local_state->SetBoolean(lacros_prefs::kPrimaryProfileFirstRunFinished, true);
+}
+
+// Processes the outcome from the FRE and resumes the user's interrupted task.
+// `original_intent_callback` should be run to allow the caller to resume what
+// they were trying to do before they stopped to show the FRE. If the FRE's
+// `status` is not `ProfilePicker::FirstRunExitStatus::kCompleted`, that
+// `original_intent_callback` will be called with `proceed` set to false,
+// otherwise it will be called with true. `post_first_run_callback` will be
+// executed for completed flows, to perform tasks that the FRE requires after
+// the interrupted task is resumed.
+void OnFirstRunHasExited(ResumeTaskCallback original_intent_callback,
+                         ProfilePicker::FirstRunExitStatus status,
+                         base::OnceClosure post_first_run_callback) {
+  if (status != ProfilePicker::FirstRunExitStatus::kQuitEarly) {
+    // The user got to the last step, we can mark the FRE as finished, whether
+    // we eventually proceed with the original intent or not.
+    SetFirstRunFinished();
+  }
+
+  bool proceed = status == ProfilePicker::FirstRunExitStatus::kCompleted;
+  std::move(original_intent_callback).Run(proceed);
+
+  if (proceed && post_first_run_callback)
+    std::move(post_first_run_callback).Run();
+}
+
+}  // namespace
+
+// LacrosFirstRunService -------------------------------------------------------
+
+LacrosFirstRunService::LacrosFirstRunService(Profile* profile)
+    : profile_(profile) {}
+LacrosFirstRunService::~LacrosFirstRunService() = default;
+
+bool LacrosFirstRunService::ShouldOpenFirstRun() const {
+  DCHECK(IsFirstRunEligibleProfile(profile_));
+
+  if (!base::FeatureList::IsEnabled(switches::kLacrosNonSyncingProfiles)) {
+    // Sync is already always forced, no point showing the FRE to ask the user
+    // to sync.
+    return false;
+  }
+
+  const base::CommandLine* command_line =
+      base::CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(switches::kNoFirstRun))
+    return false;
+
+  // Skip for users without Gaia account (e.g. Active Directory, Kiosk, Guest…)
+  if (!profiles::SessionHasGaiaAccount())
+    return false;
+
+  const PrefService* const pref_service = g_browser_process->local_state();
+  return !pref_service->GetBoolean(
+      lacros_prefs::kPrimaryProfileFirstRunFinished);
+}
+
+bool LacrosFirstRunService::TryMarkFirstRunAlreadyFinished() {
+  DCHECK(ShouldOpenFirstRun());  // Caller should check.
+
+  signin::IdentityManager* identity_manager =
+      IdentityManagerFactory::GetForProfile(profile_);
+
+  // Handle sessions migrated from Ash or from Lacros without the feature. These
+  // always had Sync on and don't need the FRE.
+  if (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) {
+    // The FRE artificially marks Sync as being consented while it's open, as
+    // it needs to check the sync server for policies. We need to check if
+    // that's the case, and let the active FRE take care of marking its state
+    // finished.
+    if (ProfilePicker::IsLacrosFirstRunOpen()) {
+      return false;
+    }
+
+    SetFirstRunFinished();
+    return true;
+  }
+
+  // TODO(crbug.com/1300109): Also update Sync and FRE state based on policies.
+
+  return false;
+}
+
+void LacrosFirstRunService::OpenFirstRunIfNeeded(ResumeTaskCallback callback) {
+  if (TryMarkFirstRunAlreadyFinished()) {
+    std::move(callback).Run(/*proceed=*/true);
+    return;
+  }
+
+  ProfilePicker::Show(ProfilePicker::Params::ForLacrosPrimaryProfileFirstRun(
+      base::BindOnce(&OnFirstRunHasExited, std::move(callback))));
+}
+
+// LacrosFirstRunServiceFactory ------------------------------------------------
+
+LacrosFirstRunServiceFactory::LacrosFirstRunServiceFactory()
+    : BrowserContextKeyedServiceFactory(
+          "LacrosFirstRunServiceFactory",
+          BrowserContextDependencyManager::GetInstance()) {
+  // Used for checking Sync consent level.
+  DependsOn(IdentityManagerFactory::GetInstance());
+}
+
+LacrosFirstRunServiceFactory::~LacrosFirstRunServiceFactory() = default;
+
+// static
+LacrosFirstRunServiceFactory* LacrosFirstRunServiceFactory::GetInstance() {
+  static base::NoDestructor<LacrosFirstRunServiceFactory> factory;
+  return factory.get();
+}
+
+// static
+LacrosFirstRunService* LacrosFirstRunServiceFactory::GetForBrowserContext(
+    content::BrowserContext* context) {
+  return static_cast<LacrosFirstRunService*>(
+      GetInstance()->GetServiceForBrowserContext(context, /*create=*/true));
+}
+
+KeyedService* LacrosFirstRunServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  Profile* profile = Profile::FromBrowserContext(context);
+  if (!IsFirstRunEligibleProfile(profile))
+    return nullptr;
+
+  auto* instance = new LacrosFirstRunService(profile);
+
+  // Check if we should turn Sync on from the background and skip the FRE.
+  // TODO(dgn): maybe post task? For example see
+  // //chrome/browser/permissions/permission_auditing_service_factory.cc
+  if (instance->ShouldOpenFirstRun()) {
+    // If we don't manage to set it, we will just have to defer silent or visual
+    // handling of the FRE to when the user attempts to open a browser UI.
+    instance->TryMarkFirstRunAlreadyFinished();
+  }
+
+  return instance;
+}
+
+bool LacrosFirstRunServiceFactory::ServiceIsCreatedWithBrowserContext() const {
+  return true;
+}
+
+// Helpers ---------------------------------------------------------------------
+
+bool ShouldOpenPrimaryProfileFirstRun(Profile* profile) {
+  auto* instance = LacrosFirstRunServiceFactory::GetForBrowserContext(profile);
+  return instance && instance->ShouldOpenFirstRun();
+}
diff --git a/chrome/browser/ui/startup/lacros_first_run_service.h b/chrome/browser/ui/startup/lacros_first_run_service.h
new file mode 100644
index 0000000..1d75061
--- /dev/null
+++ b/chrome/browser/ui/startup/lacros_first_run_service.h
@@ -0,0 +1,93 @@
+// Copyright 2022 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_STARTUP_LACROS_FIRST_RUN_SERVICE_H_
+#define CHROME_BROWSER_UI_STARTUP_LACROS_FIRST_RUN_SERVICE_H_
+
+#include "base/callback_forward.h"
+#include "base/no_destructor.h"
+#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "components/keyed_service/core/keyed_service.h"
+
+#if !BUILDFLAG(IS_CHROMEOS_LACROS)
+#error This file should only be included on lacros.
+#endif
+
+class Profile;
+
+// Task to run after the FRE is exited, with `proceed` indicating whether it
+// should be aborted or resumed.
+using ResumeTaskCallback = base::OnceCallback<void(bool proceed)>;
+
+// Service handling the First Run Experience for the primary profile on Lacros.
+// It is not available on the other profiles.
+class LacrosFirstRunService : public KeyedService {
+ public:
+  explicit LacrosFirstRunService(Profile* profile);
+  ~LacrosFirstRunService() override;
+
+  // Returns whether first run experience (including sync promo) should be
+  // opened on startup.
+  bool ShouldOpenFirstRun() const;
+
+  // Assuming that the first run experience needs to be opened on startup,
+  // attempts to complete it silently, in case collecting consent is not needed.
+  // Returns `true` if the FRE was marked finished. If not, `false` will be
+  // returned and `OpenFirstRunIfNeeded()` will need to be eventually called to
+  // show the visual FRE.
+  bool TryMarkFirstRunAlreadyFinished();
+
+  // This function takes the user through the browser FRE.
+  // 1) First, it checks whether the FRE flow can be skipped in the first place.
+  //    This is the case when sync consent is already given (true for existing
+  //    users that migrated to lacros) or when enterprise policies forbid the
+  //    FRE. If so, the call directly 'finishes' the flow (see below).
+  // 2) Then, it opens the FRE UI (in the profile picker window) and
+  //    asynchronously 'finishes' the flow (sets a flag in the local prefs) once
+  //    the user chooses any action on the sync consent screen. If the user
+  //    exits the FRE UI via the generic 'Close window' affordances, it is
+  //    interpreted as an intent to exit the app and `callback` will be called
+  //    with `proceed` set to false. If they exit it via the dedicated options
+  //    in the flow, it will be considered 'completed' and `callback` will be
+  //    run with `proceed` set to true. If the FRE flow is exited before the
+  //    sync consent screen, the flow is considered 'aborted', and can be shown
+  //    again at the next startup.
+  // When this method is called again while FRE is in progress, the previous
+  // callback is aborted (called with false), and is replaced by `callback`.
+  void OpenFirstRunIfNeeded(ResumeTaskCallback callback);
+
+ private:
+  // Owns of this instance via the KeyedService mechanism.
+  const raw_ptr<Profile> profile_;
+};
+
+class LacrosFirstRunServiceFactory : public BrowserContextKeyedServiceFactory {
+ public:
+  LacrosFirstRunServiceFactory(const LacrosFirstRunServiceFactory&) = delete;
+  LacrosFirstRunServiceFactory& operator=(const LacrosFirstRunServiceFactory&) =
+      delete;
+
+  static LacrosFirstRunService* GetForBrowserContext(
+      content::BrowserContext* context);
+
+  static LacrosFirstRunServiceFactory* GetInstance();
+
+ private:
+  friend class base::NoDestructor<LacrosFirstRunServiceFactory>;
+
+  LacrosFirstRunServiceFactory();
+  ~LacrosFirstRunServiceFactory() override;
+
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+  bool ServiceIsCreatedWithBrowserContext() const override;
+};
+
+// Helper to call `LacrosFirstRunService::ShouldOpenFirstRun()` without having
+// to first obtain the service instance.
+bool ShouldOpenPrimaryProfileFirstRun(Profile* profile);
+
+#endif  // CHROME_BROWSER_UI_STARTUP_LACROS_FIRST_RUN_SERVICE_H_
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc
index b82d72b4..d3f4405 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -108,7 +108,7 @@
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "chrome/browser/ui/startup/first_run_lacros.h"
+#include "chrome/browser/ui/startup/lacros_first_run_service.h"
 #include "chromeos/lacros/lacros_service.h"
 #endif
 
@@ -664,11 +664,13 @@
 
   if (!IsSilentLaunchEnabled(command_line, profile)) {
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
-    if (ShouldOpenPrimaryProfileFirstRun(profile)) {
+    auto* fre_service =
+        LacrosFirstRunServiceFactory::GetForBrowserContext(profile);
+    if (fre_service && fre_service->ShouldOpenFirstRun()) {
       // Show the FRE and let `OpenNewWindowForFirstRun()` handle the browser
       // launch. This `StartupBrowserCreator` will get destroyed when the method
       // returns so the relevant data is copied over and passed to the callback.
-      OpenPrimaryProfileFirstRunIfNeeded(
+      fre_service->OpenFirstRunIfNeeded(
           base::BindOnce(&OpenNewWindowForFirstRun, command_line, profile,
                          cur_dir, first_run_tabs_, process_startup,
                          is_first_run, std::move(launch_mode_recorder)));
diff --git a/chrome/browser/ui/views/accelerator_table.cc b/chrome/browser/ui/views/accelerator_table.cc
index 03a1521..8003938 100644
--- a/chrome/browser/ui/views/accelerator_table.cc
+++ b/chrome/browser/ui/views/accelerator_table.cc
@@ -236,7 +236,7 @@
     {ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, IDC_TOGGLE_QUICK_COMMANDS},
 #endif  // !BUILDFLAG(IS_CHROMEOS)
 #endif  // !BUILDFLAG(IS_MAC)
-#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
     {ui::VKEY_S, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
      IDC_RUN_SCREEN_AI_VISUAL_ANNOTATIONS},
 #endif
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
index 2b7a0c0..e8413c7 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -1394,20 +1394,6 @@
                                    .get();
     nodes.push_back(node);
     parent = node->parent();
-    // saved tab groups feature flag.
-    if (base::FeatureList::IsEnabled(features::kTabGroupsSave) &&
-        !node->is_url()) {
-      RecordBookmarkFolderOpen(BOOKMARK_LAUNCH_LOCATION_ATTACHED_BAR);
-      const size_t start_index = (node == bookmark_model_->bookmark_bar_node())
-                                     ? GetFirstHiddenNodeIndex()
-                                     : 0;
-      bookmark_menu_ =
-          new BookmarkMenuController(browser_, GetPageNavigatorGetter(),
-                                     GetWidget(), node, start_index, false);
-      bookmark_menu_->set_observer(this);
-      bookmark_menu_->RunMenuAt(this);
-      return;
-    }
   } else {
     parent = bookmark_model_->bookmark_bar_node();
     nodes.push_back(parent);
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
index 5b8b308..2009c79 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -466,7 +466,7 @@
 }
 
 WebUITabStripContainerView::~WebUITabStripContainerView() {
-  content::WebContentsObserver::Observe(nullptr);
+  DeinitializeWebView();
   // The TabCounter button uses |this| as a listener. We need to make
   // sure we outlive it.
   delete new_tab_button_;
@@ -937,8 +937,20 @@
   task_manager::WebContentsTags::CreateForTabContents(
       web_view_->web_contents());
 
-  if (TabStripUI* tab_strip_ui = GetTabStripUI(web_view_->GetWebContents()))
+  if (TabStripUI* tab_strip_ui = GetTabStripUI(web_view_->GetWebContents())) {
+    // References to the |browser_view_->browser()| and |this| are borrowed
+    // here, and will be released |DeinitializeWebView|.
     tab_strip_ui->Initialize(browser_view_->browser(), this);
+  }
 
   content::WebContentsObserver::Observe(web_view_->GetWebContents());
 }
+
+void WebUITabStripContainerView::DeinitializeWebView() {
+  content::WebContentsObserver::Observe(nullptr);
+
+  if (TabStripUI* tab_strip_ui = GetTabStripUI(web_view_->GetWebContents())) {
+    // See corresponding comments from InitializeWebView().
+    tab_strip_ui->Deinitialize();
+  }
+}
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
index b387174..652c6d1 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
@@ -118,6 +118,7 @@
   void CloseForEventOutsideTabStrip(TabStripUICloseAction reason);
 
   void InitializeWebView();
+  void DeinitializeWebView();
 
   // TabStripUIEmbedder:
   const ui::AcceleratorProvider* GetAcceleratorProvider() const override;
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
index 5901bf2..b56fa93 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
@@ -97,7 +97,7 @@
 #include "components/policy/core/common/management/management_service.h"
 #include "components/policy/core/common/management/scoped_management_service_override_for_testing.h"
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "chrome/browser/ui/startup/first_run_lacros.h"
+#include "chrome/browser/ui/startup/lacros_first_run_service.h"
 #include "components/account_manager_core/chromeos/account_manager.h"
 #include "components/account_manager_core/chromeos/account_manager_facade_factory.h"
 #include "components/account_manager_core/chromeos/account_manager_mojo_service.h"
diff --git a/chrome/browser/ui/views/side_panel/side_panel_util.cc b/chrome/browser/ui/views/side_panel/side_panel_util.cc
index 8b334421f..e59d9c9 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_util.cc
+++ b/chrome/browser/ui/views/side_panel/side_panel_util.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/views/side_panel/side_panel_util.h"
 
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/views/side_panel/bookmarks/bookmarks_side_panel_coordinator.h"
@@ -29,7 +30,8 @@
       ->CreateAndRegisterEntry(global_registry);
 
   // Add history clusters.
-  if (base::FeatureList::IsEnabled(features::kSidePanelJourneys)) {
+  if (base::FeatureList::IsEnabled(features::kSidePanelJourneys) &&
+      !browser->profile()->IsIncognitoProfile()) {
     HistoryClustersSidePanelCoordinator::GetOrCreateForBrowser(browser)
         ->CreateAndRegisterEntry(global_registry);
   }
diff --git a/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc b/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc
index 4d64db31..0dea7c6 100644
--- a/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc
+++ b/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc
@@ -140,6 +140,14 @@
       {"urlCheckerTitle", IDS_ABOUT_BROWSER_SWITCH_INTERNALS_URL_CHECKER_TITLE},
       {"urlCheckerDesc", IDS_ABOUT_BROWSER_SWITCH_INTERNALS_URL_CHECKER_DESC},
       {"openBrowser", IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER},
+      {"openBrowserProtocolReason",
+       IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_PROTOCOL_REASON},
+      {"openBrowserDefaultReason",
+       IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_DEFAULT_REASON},
+      {"openBrowserRuleReason",
+       IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_RULE_REASON},
+      {"openBrowserInvertRuleReason",
+       IDS_ABOUT_BROWSER_SWITCH_INTERNALS_OPEN_BROWSER_INVERT_RULE_REASON},
       {"invalidURL", IDS_ABOUT_BROWSER_SWITCH_INTERNALS_INVALID_URL},
       {"xmlTitle", IDS_ABOUT_BROWSER_SWITCH_INTERNALS_XML_TITLE},
       {"xmlDesc", IDS_ABOUT_BROWSER_SWITCH_INTERNALS_XML_DESC},
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
index 227bb8e..5f4cc24 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -259,7 +259,7 @@
       network::mojom::CSPDirectiveName::WorkerSrc, "worker-src blob: 'self';");
 }
 
-void AddDebuggerResources(content::WebUIDataSource* source) {
+void AddDebuggerResources(content::WebUIDataSource* source, bool use_poly3) {
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   bool enable_debugger = command_line->HasSwitch(switches::kShowOobeDevOverlay);
   // Enable for ChromeOS-on-linux for developers and test images.
@@ -267,10 +267,10 @@
     LOG(WARNING) << "OOBE Debug overlay can only be used on test images";
     base::SysInfo::CrashIfChromeOSNonTestImage();
   }
-  const bool poly3_enabled = features::IsOobePolymer3Enabled();
+
   if (enable_debugger) {
     source->AddResourcePath(kDebuggerUtilJSPath, IDR_OOBE_DEBUGGER_UTIL_JS);
-    if (poly3_enabled) {
+    if (use_poly3) {
       source->AddResourcePath(kDebuggerMJSPath, IDR_OOBE_DEBUGGER_M_JS);
     } else {
       source->AddResourcePath(kDebuggerJSPath, IDR_OOBE_DEBUGGER_JS);
@@ -325,6 +325,18 @@
   source->AddResourcePath(kLoginJSPath, IDR_OOBE_JS);
 }
 
+// Polymer3 could be turned on for both flows (OOBE & 'Add Person'), or just
+// for the 'Add Person' flow.
+bool ShouldUsePolymer3Resources(bool is_oobe_flow) {
+  const bool is_add_person_flow = !is_oobe_flow;
+  const bool poly3_enabled_for_both_flows = features::IsOobePolymer3Enabled();
+  const bool poly3_enabled_for_addperson_flow =
+      features::IsOobeAddPersonPolymer3Enabled();
+
+  return poly3_enabled_for_both_flows ||
+         (poly3_enabled_for_addperson_flow && is_add_person_flow);
+}
+
 // Creates a WebUIDataSource for chrome://oobe
 content::WebUIDataSource* CreateOobeUIDataSource(
     const base::Value::Dict& localized_strings,
@@ -343,18 +355,20 @@
 
   OobeUI::AddOobeComponents(source);
 
-  // First, configure default and non-shared resources for the current display
-  // type.
-  if (features::IsOobePolymer3Enabled()) {
+  // Determine whether this is the 'OOBE' or the 'Add Person' flow, and add
+  // either Polymer3 or Polymer2 default resources.
+  const bool is_oobe_flow = display_type == OobeUI::kOobeDisplay;
+  const bool use_polymer3_resources = ShouldUsePolymer3Resources(is_oobe_flow);
+  if (use_polymer3_resources) {
     source->SetDefaultResource(IDR_OOBE_POLY3_HTML);
     // Add boolean variables that are used by Polymer3 to add screens
-    // dynamically.
+    // dynamically depending on the flow type.
     source->AddBoolean("isOsInstallAllowed", switches::IsOsInstallAllowed());
-    source->AddBoolean("isOobeFlow", display_type == OobeUI::kOobeDisplay);
-  } else {
-    if (display_type == OobeUI::kOobeDisplay) {
+    source->AddBoolean("isOobeFlow", is_oobe_flow);
+  } else { /* Polymer 2 Resources */
+    if (is_oobe_flow) {
       AddOobeDisplayTypeDefaultResources(source);
-    } else {
+    } else /* is_add_person_flow */ {
       AddLoginDisplayTypeDefaultResources(source);
     }
   }
@@ -368,7 +382,7 @@
   AddAssistantScreensResources(source);
   AddMultiDeviceSetupResources(source);
 
-  AddDebuggerResources(source);
+  AddDebuggerResources(source, use_polymer3_resources);
   AddTestAPIResources(source);
 
   source->AddResourcePath(kWebviewSamlInjectedJSPath,
diff --git a/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc b/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc
index 412aec8..9e07eb7 100644
--- a/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/containers/queue.h"
-#include "base/json/json_reader.h"
 #include "base/json/json_string_value_serializer.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted_memory.h"
@@ -722,7 +721,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title, std::move(base::JSONReader::Read(kPdfSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kPdfSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
@@ -736,7 +735,7 @@
 
   EXPECT_EQ(kPrinterId, print_job->printer_id);
   EXPECT_EQ(title, print_job->job_title);
-  EXPECT_EQ(*base::JSONReader::Read(kEmptyPrintTicket), print_job->ticket);
+  EXPECT_EQ(base::test::ParseJson(kEmptyPrintTicket), print_job->ticket);
   EXPECT_EQ(kContentTypePDF, print_job->content_type);
   ASSERT_TRUE(print_job->document_bytes);
   EXPECT_EQ(RefCountedMemoryToString(print_data),
@@ -759,7 +758,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title, std::move(base::JSONReader::Read(kPdfSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kPdfSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
@@ -785,7 +784,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title, std::move(base::JSONReader::Read(kAllTypesSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kAllTypesSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
@@ -800,7 +799,7 @@
 
   EXPECT_EQ(kPrinterId, print_job->printer_id);
   EXPECT_EQ(title, print_job->job_title);
-  EXPECT_EQ(*base::JSONReader::Read(kEmptyPrintTicket), print_job->ticket);
+  EXPECT_EQ(base::test::ParseJson(kEmptyPrintTicket), print_job->ticket);
   EXPECT_EQ(kContentTypePDF, print_job->content_type);
   ASSERT_TRUE(print_job->document_bytes);
   EXPECT_EQ(RefCountedMemoryToString(print_data),
@@ -823,8 +822,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title,
-      std::move(base::JSONReader::Read(kSimpleRasterSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kSimpleRasterSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
@@ -855,7 +853,7 @@
 
   EXPECT_EQ(kPrinterId, print_job->printer_id);
   EXPECT_EQ(title, print_job->job_title);
-  EXPECT_EQ(*base::JSONReader::Read(kEmptyPrintTicket), print_job->ticket);
+  EXPECT_EQ(base::test::ParseJson(kEmptyPrintTicket), print_job->ticket);
   EXPECT_EQ(kContentTypePWG, print_job->content_type);
   ASSERT_TRUE(print_job->document_bytes);
   EXPECT_EQ(RefCountedMemoryToString(print_data),
@@ -878,7 +876,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title, std::move(base::JSONReader::Read(kDuplexSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kDuplexSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
@@ -909,7 +907,7 @@
 
   EXPECT_EQ(kPrinterId, print_job->printer_id);
   EXPECT_EQ(title, print_job->job_title);
-  EXPECT_EQ(*base::JSONReader::Read(kPrintTicketWithDuplex), print_job->ticket);
+  EXPECT_EQ(base::test::ParseJson(kPrintTicketWithDuplex), print_job->ticket);
   EXPECT_EQ(kContentTypePWG, print_job->content_type);
   ASSERT_TRUE(print_job->document_bytes);
   EXPECT_EQ(RefCountedMemoryToString(print_data),
@@ -932,8 +930,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title,
-      std::move(base::JSONReader::Read(kSimpleRasterSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kSimpleRasterSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
@@ -962,7 +959,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title, std::move(base::JSONReader::Read(kInvalidSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kInvalidSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
@@ -984,8 +981,7 @@
   std::u16string title = u"Title";
 
   extension_printer_handler_->StartPrint(
-      title,
-      std::move(base::JSONReader::Read(kSimpleRasterSettings)->GetDict()),
+      title, std::move(base::test::ParseJson(kSimpleRasterSettings).GetDict()),
       print_data,
       base::BindOnce(&RecordPrintResult, &call_count, &success, &status));
 
diff --git a/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc b/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
index 2a2a48a..9ab1b069e 100644
--- a/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
@@ -12,10 +12,10 @@
 #include <vector>
 
 #include "base/bind.h"
-#include "base/json/json_reader.h"
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_piece.h"
 #include "base/test/bind.h"
+#include "base/test/values_test_util.h"
 #include "base/values.h"
 #include "chromeos/crosapi/mojom/local_printer.mojom.h"
 #include "content/public/test/browser_task_environment.h"
@@ -134,7 +134,7 @@
 TEST(LocalPrinterHandlerChromeos, PrinterToValue) {
   crosapi::mojom::LocalDestinationInfo input("device_name", "printer_name",
                                              "printer_description", false);
-  const base::Value kExpectedValue = *base::JSONReader::Read(R"({
+  const base::Value kExpectedValue = base::test::ParseJson(R"({
    "cupsEnterprisePrinter": false,
    "deviceName": "device_name",
    "printerDescription": "printer_description",
@@ -146,7 +146,7 @@
 TEST(LocalPrinterHandlerChromeos, PrinterToValue_ConfiguredViaPolicy) {
   crosapi::mojom::LocalDestinationInfo printer("device_name", "printer_name",
                                                "printer_description", true);
-  const base::Value kExpectedValue = *base::JSONReader::Read(R"({
+  const base::Value kExpectedValue = base::test::ParseJson(R"({
    "cupsEnterprisePrinter": true,
    "deviceName": "device_name",
    "printerDescription": "printer_description",
@@ -161,7 +161,7 @@
   caps->basic_info = crosapi::mojom::LocalDestinationInfo::New(
       "device_name", "printer_name", "printer_description", false);
 
-  const base::Value kExpectedValue = *base::JSONReader::Read(R"({
+  const base::Value kExpectedValue = base::test::ParseJson(R"({
    "printer": {
       "cupsEnterprisePrinter": false,
       "deviceName": "device_name",
@@ -179,7 +179,7 @@
   caps->basic_info = crosapi::mojom::LocalDestinationInfo::New(
       "device_name", "printer_name", "printer_description", true);
 
-  const base::Value kExpectedValue = *base::JSONReader::Read(R"({
+  const base::Value kExpectedValue = base::test::ParseJson(R"({
    "printer": {
       "cupsEnterprisePrinter": true,
       "deviceName": "device_name",
@@ -204,7 +204,7 @@
   status.status_reasons.push_back(crosapi::mojom::StatusReason::New(
       crosapi::mojom::StatusReason::Reason::kOutOfInk,
       crosapi::mojom::StatusReason::Severity::kWarning));
-  const base::Value kExpectedValue = *base::JSONReader::Read(R"({
+  const base::Value kExpectedValue = base::test::ParseJson(R"({
    "printerId": "printer_id",
    "statusReasons": [ {
       "reason": 6,
diff --git a/chrome/browser/ui/webui/print_preview/pdf_printer_handler_unittest.cc b/chrome/browser/ui/webui/print_preview/pdf_printer_handler_unittest.cc
index df2eaf0..0749238 100644
--- a/chrome/browser/ui/webui/print_preview/pdf_printer_handler_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/pdf_printer_handler_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "chrome/browser/ui/webui/print_preview/pdf_printer_handler.h"
 
-#include "base/json/json_reader.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/values_test_util.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
@@ -262,12 +262,10 @@
 }
 
 TEST_F(PdfPrinterHandlerGetCapabilityTest, GetCapability) {
-  absl::optional<base::Value> expected_capability =
-      base::JSONReader::Read(kPdfPrinterCapability);
-  ASSERT_TRUE(expected_capability.has_value());
-
+  base::Value expected_capability =
+      base::test::ParseJson(kPdfPrinterCapability);
   base::Value capability = StartGetCapabilityAndWaitForResults();
-  EXPECT_EQ(expected_capability.value(), capability);
+  EXPECT_EQ(expected_capability, capability);
 }
 
 #if BUILDFLAG(IS_MAC)
@@ -281,13 +279,12 @@
       {"printer4", "", gfx::Size(101600, 50800)},
   };
 
-  absl::optional<base::Value> expected_capability =
-      base::JSONReader::Read(kPdfPrinterCapability);
-  ASSERT_TRUE(expected_capability.has_value());
-  ASSERT_TRUE(expected_capability.value().is_dict());
+  base::Value expected_capability =
+      base::test::ParseJson(kPdfPrinterCapability);
+  ASSERT_TRUE(expected_capability.is_dict());
 
   base::Value* expected_paper_options =
-      expected_capability.value().FindListPath(kPaperOptionPath);
+      expected_capability.FindListPath(kPaperOptionPath);
   ASSERT_TRUE(expected_paper_options);
 
   for (const PrinterSemanticCapsAndDefaults::Paper& paper : kTestPapers) {
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos_unittest.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos_unittest.cc
index 2d94e74..2d1436d 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos_unittest.cc
@@ -6,9 +6,9 @@
 
 #include <vector>
 
-#include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/run_loop.h"
+#include "base/test/values_test_util.h"
 #include "base/values.h"
 #include "chrome/browser/ash/crosapi/test_crosapi_dependency_registry.h"
 #include "chrome/browser/ui/webui/print_preview/print_preview_handler.h"
@@ -247,7 +247,7 @@
   args.Append("callback_id");
   web_ui()->HandleReceivedMessage("getPrintServersConfig",
                                   &base::Value::AsListValue(args));
-  const base::Value kExpectedConfig = *base::JSONReader::Read(R"({
+  const base::Value kExpectedConfig = base::test::ParseJson(R"({
     "isSingleServerFetchingMode": false,
     "printServers": [ {
       "id": "selected-print-server-id",
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
index 1f7ef94..95688ec 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
@@ -11,7 +11,6 @@
 
 #include "base/containers/flat_set.h"
 #include "base/i18n/number_formatting.h"
-#include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted_memory.h"
@@ -20,6 +19,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/icu_test_util.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/values_test_util.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -905,39 +905,45 @@
 }
 
 TEST_F(PrintPreviewHandlerTest, InitialSettingsDefaultPaperSizeName) {
-  const char kPrintingPaperSizeDefaultName[] = R"(
-    {
-      "name": "iso_a5_148x210mm"
-    })";
   const char kExpectedInitialSettingsPolicy[] = R"(
     {
       "width": 148000,
       "height": 210000
     })";
 
-  absl::optional<base::Value> default_paper_size =
-      base::JSONReader::Read(kPrintingPaperSizeDefaultName);
-  ASSERT_TRUE(default_paper_size.has_value());
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   crosapi::mojom::Policies policies;
   policies.paper_size_default = gfx::Size(148000, 210000);
   SetPolicies(policies);
 #else
   // Set a pref that should take priority over StickySettings.
-  prefs()->Set(prefs::kPrintingPaperSizeDefault, default_paper_size.value());
+  const char kPrintingPaperSizeDefaultName[] = R"(
+    {
+      "name": "iso_a5_148x210mm"
+    })";
+  prefs()->Set(prefs::kPrintingPaperSizeDefault,
+               base::test::ParseJson(kPrintingPaperSizeDefaultName));
 #endif
   Initialize();
 
-  absl::optional<base::Value> expected_initial_settings_policy =
-      base::JSONReader::Read(kExpectedInitialSettingsPolicy);
-  ASSERT_TRUE(expected_initial_settings_policy.has_value());
-
   ValidateInitialSettingsAllowedDefaultModePolicy(
       *web_ui()->call_data().back(), "mediaSize", absl::nullopt,
-      std::move(expected_initial_settings_policy));
+      base::test::ParseJson(kExpectedInitialSettingsPolicy));
 }
 
 TEST_F(PrintPreviewHandlerTest, InitialSettingsDefaultPaperSizeCustomSize) {
+  const char kExpectedInitialSettingsPolicy[] = R"(
+    {
+      "width": 148000,
+      "height": 210000
+    })";
+
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+  crosapi::mojom::Policies policies;
+  policies.paper_size_default = gfx::Size(148000, 210000);
+  SetPolicies(policies);
+#else
+  // Set a pref that should take priority over StickySettings.
   const char kPrintingPaperSizeDefaultCustomSize[] = R"(
     {
       "name": "custom",
@@ -946,32 +952,14 @@
         "height": 210000
       }
     })";
-  const char kExpectedInitialSettingsPolicy[] = R"(
-    {
-      "width": 148000,
-      "height": 210000
-    })";
-
-  absl::optional<base::Value> default_paper_size =
-      base::JSONReader::Read(kPrintingPaperSizeDefaultCustomSize);
-  ASSERT_TRUE(default_paper_size.has_value());
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  crosapi::mojom::Policies policies;
-  policies.paper_size_default = gfx::Size(148000, 210000);
-  SetPolicies(policies);
-#else
-  // Set a pref that should take priority over StickySettings.
-  prefs()->Set(prefs::kPrintingPaperSizeDefault, default_paper_size.value());
+  prefs()->Set(prefs::kPrintingPaperSizeDefault,
+               base::test::ParseJson(kPrintingPaperSizeDefaultCustomSize));
 #endif
   Initialize();
 
-  absl::optional<base::Value> expected_initial_settings_policy =
-      base::JSONReader::Read(kExpectedInitialSettingsPolicy);
-  ASSERT_TRUE(expected_initial_settings_policy.has_value());
-
   ValidateInitialSettingsAllowedDefaultModePolicy(
       *web_ui()->call_data().back(), "mediaSize", absl::nullopt,
-      std::move(expected_initial_settings_policy));
+      base::test::ParseJson(kExpectedInitialSettingsPolicy));
 }
 
 #if BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/profile_internals/profile_internals_handler.cc b/chrome/browser/ui/webui/profile_internals/profile_internals_handler.cc
index beb953d..41bb697 100644
--- a/chrome/browser/ui/webui/profile_internals/profile_internals_handler.cc
+++ b/chrome/browser/ui/webui/profile_internals/profile_internals_handler.cc
@@ -6,10 +6,12 @@
 
 #include "base/bind.h"
 #include "base/containers/flat_set.h"
+#include "base/files/file_path.h"
 #include "base/json/values_util.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/keep_alive/profile_keep_alive_types.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
@@ -18,7 +20,9 @@
 
 namespace {
 
-base::Value CreateProfileEntry(const ProfileAttributesEntry* entry) {
+base::Value CreateProfileEntry(
+    const ProfileAttributesEntry* entry,
+    const base::flat_set<base::FilePath>& loaded_profile_paths) {
   base::Value profile_entry(base::Value::Type::DICTIONARY);
   profile_entry.SetKey("profilePath", base::FilePathToValue(entry->GetPath()));
   profile_entry.SetStringKey("localProfileName", entry->GetLocalProfileName());
@@ -69,7 +73,8 @@
     signedAccounts.Append(gaiaId);
   }
   profile_entry.SetKey("signedAccounts", std::move(signedAccounts));
-
+  profile_entry.SetBoolKey("isLoaded",
+                           loaded_profile_paths.contains(entry->GetPath()));
   return profile_entry;
 }
 
@@ -104,8 +109,13 @@
       g_browser_process->profile_manager()
           ->GetProfileAttributesStorage()
           .GetAllProfilesAttributesSortedByLocalProfileName();
+  std::vector<Profile*> loaded_profiles =
+      g_browser_process->profile_manager()->GetLoadedProfiles();
+  base::flat_set<base::FilePath> loaded_profile_paths =
+      base::MakeFlatSet<base::FilePath>(
+          loaded_profiles, {}, [](const auto& it) { return it->GetPath(); });
   for (const ProfileAttributesEntry* entry : entries) {
-    profiles_list.Append(CreateProfileEntry(entry));
+    profiles_list.Append(CreateProfileEntry(entry, loaded_profile_paths));
   }
   return profiles_list;
 }
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc
index 57a5deb..3725c0d 100644
--- a/chrome/browser/ui/webui/settings/site_settings_helper.cc
+++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc
@@ -170,6 +170,7 @@
     {ContentSettingsType::AUTO_DARK_WEB_CONTENT, nullptr},
     {ContentSettingsType::REQUEST_DESKTOP_SITE, nullptr},
     {ContentSettingsType::GET_DISPLAY_MEDIA_SET_SELECT_ALL_SCREENS, nullptr},
+    {ContentSettingsType::NOTIFICATION_INTERACTIONS, nullptr},
 };
 
 static_assert(std::size(kContentSettingsTypeGroupNames) ==
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc
index 106a21e..a2c6059 100644
--- a/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc
+++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc
@@ -240,12 +240,19 @@
           .GetProfileAttributesWithPath(browser_->profile()->GetPath());
   browser_->signin_view_controller()->ShowModalEnterpriseConfirmationDialog(
       account_info, /*profile_creation_required_by_policy=*/false,
-      /*show_link_data_option*/ false, GenerateNewProfileColor(entry).color,
+      /*show_link_data_option=*/false, GenerateNewProfileColor(entry).color,
       base::BindOnce(
           [](signin::SigninChoiceCallback callback, Browser* browser,
              signin::SigninChoice choice) {
             browser->signin_view_controller()->CloseModalSignin();
-            std::move(callback).Run(choice);
+            // When `show_link_data_option` is false,
+            // `ShowModalEnterpriseConfirmationDialog()` calls back with either
+            // `SIGNIN_CHOICE_CANCEL` or `SIGNIN_CHOICE_NEW_PROFILE`.
+            // The profile is clean here, no need to create a new one.
+            std::move(callback).Run(
+                choice == signin::SigninChoice::SIGNIN_CHOICE_CANCEL
+                    ? signin::SigninChoice::SIGNIN_CHOICE_CANCEL
+                    : signin::SigninChoice::SIGNIN_CHOICE_CONTINUE);
           },
           std::move(callback), browser_.get()));
 }
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
index b470112..ac92cb4 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
@@ -128,6 +128,14 @@
   embedder_ = embedder;
 }
 
+void TabStripUI::Deinitialize() {
+  page_handler_.reset();
+  DCHECK(browser_);
+  DCHECK(embedder_);
+  browser_ = nullptr;
+  embedder_ = nullptr;
+}
+
 void TabStripUI::LayoutChanged() {
   if (page_handler_)
     page_handler_->NotifyLayoutChanged();
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
index 70dea1dc..d28ce8e7 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
@@ -39,10 +39,12 @@
   void BindInterface(
       mojo::PendingReceiver<tab_strip::mojom::PageHandlerFactory> receiver);
 
-  // Initialize TabStripUI with its embedder and the Browser it's
-  // running in. Must be called exactly once. The WebUI won't work until
-  // this is called.
+  // Initialize TabStripUI with its embedder and the Browser it's running in.
+  // Must be called exactly once. The WebUI won't work until this is called.
+  // |Deinitialize| is called during |embedder|'s destructor. It release the
+  // references taken previously and release the objects depending on them.
   void Initialize(Browser* browser, TabStripUIEmbedder* embedder);
+  void Deinitialize();
 
   // The embedder should call this whenever the result of
   // Embedder::GetLayout() changes.
diff --git a/chrome/browser/url_param_filter/url_param_classifications_loader.cc b/chrome/browser/url_param_filter/url_param_classifications_loader.cc
index 63b35a78..f6de6cd 100644
--- a/chrome/browser/url_param_filter/url_param_classifications_loader.cc
+++ b/chrome/browser/url_param_filter/url_param_classifications_loader.cc
@@ -20,6 +20,20 @@
 
 namespace {
 
+void ProcessClassification(ClassificationMap& map,
+                           const FilterClassification& classification) {
+  if (classification.use_cases_size() > 0) {
+    for (int use_case : classification.use_cases()) {
+      map[classification.site()]
+         [static_cast<FilterClassification::UseCase>(use_case)] =
+             classification;
+    }
+  } else {
+    map[classification.site()][FilterClassification::USE_CASE_UNKNOWN] =
+        classification;
+  }
+}
+
 ClassificationMap GetClassificationsFromFeature(
     const std::string& feature_classifications,
     FilterClassification_SiteRole role) {
@@ -32,7 +46,7 @@
     if (classifications.ParseFromString(uncompressed)) {
       for (auto i : classifications.classifications()) {
         if (i.site_role() == role) {
-          map[i.site()] = i;
+          ProcessClassification(map, i);
         }
       }
     }
@@ -42,13 +56,13 @@
 
 // If this is called before `ReadClassifications` has read classifications from
 // the component, returns an empty map.
-ClassificationMap GetClassificationsFromFile(
+ClassificationMap GetClassificationMap(
     const absl::optional<std::vector<FilterClassification>>& classifications) {
   if (!classifications.has_value())
     return ClassificationMap();
   ClassificationMap map;
   for (const FilterClassification& classification : classifications.value()) {
-    map[classification.site()] = classification;
+    ProcessClassification(map, classification);
   }
   return map;
 }
@@ -124,10 +138,10 @@
   // classifications.
   switch (role) {
     case FilterClassification_SiteRole::FilterClassification_SiteRole_SOURCE:
-      return GetClassificationsFromFile(component_source_classifications_);
+      return GetClassificationMap(component_source_classifications_);
     case FilterClassification_SiteRole::
         FilterClassification_SiteRole_DESTINATION:
-      return GetClassificationsFromFile(component_destination_classifications_);
+      return GetClassificationMap(component_destination_classifications_);
     case FilterClassification_SiteRole_SITE_ROLE_UNKNOWN:
       return ClassificationMap();
   }
diff --git a/chrome/browser/url_param_filter/url_param_classifications_loader.h b/chrome/browser/url_param_filter/url_param_classifications_loader.h
index 5a84745..5a95d25 100644
--- a/chrome/browser/url_param_filter/url_param_classifications_loader.h
+++ b/chrome/browser/url_param_filter/url_param_classifications_loader.h
@@ -14,8 +14,13 @@
 
 namespace url_param_filter {
 
+// `unordered_map` is used for the outer map of domains, which is likely to have
+// hundreds. `map` is used for the inner map of `UseCase`, which will have a
+// single digit number of keys.
 using ClassificationMap =
-    std::unordered_map<std::string, url_param_filter::FilterClassification>;
+    std::unordered_map<std::string,
+                       std::map<FilterClassification::UseCase,
+                                url_param_filter::FilterClassification>>;
 
 class ClassificationsLoader {
  public:
diff --git a/chrome/browser/url_param_filter/url_param_classifications_loader_browsertest.cc b/chrome/browser/url_param_filter/url_param_classifications_loader_browsertest.cc
index 859b8886..4ca454b 100644
--- a/chrome/browser/url_param_filter/url_param_classifications_loader_browsertest.cc
+++ b/chrome/browser/url_param_filter/url_param_classifications_loader_browsertest.cc
@@ -167,12 +167,16 @@
   FilterClassification expected_dest = MakeFilterClassification(
       "dest.test", FilterClassification_SiteRole_DESTINATION,
       {"plzblock_dest"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair("source.test", EqualsProto(expected_source))));
-  EXPECT_THAT(
-      loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair("dest.test", EqualsProto(expected_dest))));
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  "source.test", UnorderedElementsAre(Pair(
+                                     FilterClassification::USE_CASE_UNKNOWN,
+                                     EqualsProto(expected_source))))));
+  EXPECT_THAT(loader()->GetDestinationClassifications(),
+              UnorderedElementsAre(
+                  Pair("dest.test", UnorderedElementsAre(Pair(
+                                        FilterClassification::USE_CASE_UNKNOWN,
+                                        EqualsProto(expected_dest))))));
 }
 
 // Feature enabled with just "should_filter"= unset/true/false, and the
@@ -240,12 +244,17 @@
   FilterClassification expected_dest = MakeFilterClassification(
       "dest.test", FilterClassification_SiteRole_DESTINATION,
       {"plzblock_dest"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair("source.test", EqualsProto(expected_source))));
-  EXPECT_THAT(
-      loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair("dest.test", EqualsProto(expected_dest))));
+  ClassificationMap s = loader()->GetSourceClassifications();
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  "source.test", UnorderedElementsAre(Pair(
+                                     FilterClassification::USE_CASE_UNKNOWN,
+                                     EqualsProto(expected_source))))));
+  EXPECT_THAT(loader()->GetDestinationClassifications(),
+              UnorderedElementsAre(
+                  Pair("dest.test", UnorderedElementsAre(Pair(
+                                        FilterClassification::USE_CASE_UNKNOWN,
+                                        EqualsProto(expected_dest))))));
 }
 
 INSTANTIATE_TEST_CASE_P(
@@ -281,12 +290,18 @@
   FilterClassification expected_dest = MakeFilterClassification(
       "feature-dst.test", FilterClassification_SiteRole_DESTINATION,
       {"plzblock2"});
-  EXPECT_THAT(loader()->GetSourceClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-src.test", EqualsProto(expected_source))));
-  EXPECT_THAT(loader()->GetDestinationClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-dst.test", EqualsProto(expected_dest))));
+  EXPECT_THAT(
+      loader()->GetSourceClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-src.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_source))))));
+  EXPECT_THAT(
+      loader()->GetDestinationClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-dst.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_dest))))));
 }
 
 // Feature enabled with just "classifications" param, and the component is
@@ -326,12 +341,18 @@
   FilterClassification expected_dest = MakeFilterClassification(
       "feature-dst.test", FilterClassification_SiteRole_DESTINATION,
       {"plzblock2"});
-  EXPECT_THAT(loader()->GetSourceClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-src.test", EqualsProto(expected_source))));
-  EXPECT_THAT(loader()->GetDestinationClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-dst.test", EqualsProto(expected_dest))));
+  EXPECT_THAT(
+      loader()->GetSourceClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-src.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_source))))));
+  EXPECT_THAT(
+      loader()->GetDestinationClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-dst.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_dest))))));
 }
 
 // Feature enabled with "should_filter"= unset/true/false and a classifications
@@ -362,12 +383,18 @@
   FilterClassification expected_dest = MakeFilterClassification(
       "feature-dst.test", FilterClassification_SiteRole_DESTINATION,
       {"plzblock2"});
-  EXPECT_THAT(loader()->GetSourceClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-src.test", EqualsProto(expected_source))));
-  EXPECT_THAT(loader()->GetDestinationClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-dst.test", EqualsProto(expected_dest))));
+  EXPECT_THAT(
+      loader()->GetSourceClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-src.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_source))))));
+  EXPECT_THAT(
+      loader()->GetDestinationClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-dst.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_dest))))));
 }
 
 INSTANTIATE_TEST_CASE_P(
@@ -415,12 +442,18 @@
   FilterClassification expected_dest = MakeFilterClassification(
       "feature-dst.test", FilterClassification_SiteRole_DESTINATION,
       {"plzblock2"});
-  EXPECT_THAT(loader()->GetSourceClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-src.test", EqualsProto(expected_source))));
-  EXPECT_THAT(loader()->GetDestinationClassifications(),
-              UnorderedElementsAre(
-                  Pair("feature-dst.test", EqualsProto(expected_dest))));
+  EXPECT_THAT(
+      loader()->GetSourceClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-src.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_source))))));
+  EXPECT_THAT(
+      loader()->GetDestinationClassifications(),
+      UnorderedElementsAre(
+          Pair("feature-dst.test",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_dest))))));
 }
 
 INSTANTIATE_TEST_CASE_P(
diff --git a/chrome/browser/url_param_filter/url_param_classifications_loader_unittest.cc b/chrome/browser/url_param_filter/url_param_classifications_loader_unittest.cc
index 701d706..4d59b69 100644
--- a/chrome/browser/url_param_filter/url_param_classifications_loader_unittest.cc
+++ b/chrome/browser/url_param_filter/url_param_classifications_loader_unittest.cc
@@ -114,10 +114,15 @@
       MakeFilterClassification("source1.xyz", kSourceSiteRole, {"plzblock1"});
   FilterClassification expected_source_2 =
       MakeFilterClassification("source2.xyz", kSourceSiteRole, {"plzblock2"});
-  EXPECT_THAT(loader()->GetSourceClassifications(),
-              UnorderedElementsAre(
-                  Pair("source1.xyz", EqualsProto(expected_source_1)),
-                  Pair("source2.xyz", EqualsProto(expected_source_2))));
+  EXPECT_THAT(
+      loader()->GetSourceClassifications(),
+      UnorderedElementsAre(
+          Pair("source1.xyz",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_source_1)))),
+          Pair("source2.xyz",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_source_2))))));
   EXPECT_THAT(loader()->GetDestinationClassifications(), IsEmpty());
 }
 
@@ -138,8 +143,12 @@
   EXPECT_THAT(
       loader()->GetDestinationClassifications(),
       UnorderedElementsAre(
-          Pair("destination1.xyz", EqualsProto(expected_destination_1)),
-          Pair("destination2.xyz", EqualsProto(expected_destination_2))));
+          Pair("destination1.xyz",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_destination_1)))),
+          Pair("destination2.xyz", UnorderedElementsAre(Pair(
+                                       FilterClassification::USE_CASE_UNKNOWN,
+                                       EqualsProto(expected_destination_2))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -154,12 +163,17 @@
       MakeFilterClassification("source1.xyz", kSourceSiteRole, {"plzblock1"});
   FilterClassification expected_destination = MakeFilterClassification(
       "destination2.xyz", kDestinationSiteRole, {"plzblock2"});
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  "source1.xyz", UnorderedElementsAre(Pair(
+                                     FilterClassification::USE_CASE_UNKNOWN,
+                                     EqualsProto(expected_source))))));
   EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair("source1.xyz", EqualsProto(expected_source))));
-  EXPECT_THAT(loader()->GetDestinationClassifications(),
-              UnorderedElementsAre(
-                  Pair("destination2.xyz", EqualsProto(expected_destination))));
+      loader()->GetDestinationClassifications(),
+      UnorderedElementsAre(
+          Pair("destination2.xyz",
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected_destination))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -176,10 +190,11 @@
   EXPECT_THAT(loader()->GetSourceClassifications(), IsEmpty());
 
   // Provide classifications from the feature.
+  std::map<std::string, std::vector<std::string>> source_params;
   SetFeatureParams(
       {{"classifications",
         CreateBase64EncodedFilterParamClassificationForTesting(
-            {}, {{kDestinationSite, {"plzblock3", "plzblock4"}}})}});
+            source_params, {{kDestinationSite, {"plzblock3", "plzblock4"}}})}});
 
   // No source classifications were loaded.
   EXPECT_THAT(loader()->GetSourceClassifications(), IsEmpty());
@@ -208,23 +223,29 @@
 
   FilterClassification expected = MakeFilterClassification(
       kSourceSite, kSourceSiteRole, {"plzblock1", "plzblock2"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair(Eq(kSourceSite), EqualsProto(expected))));
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kSourceSite), UnorderedElementsAre(Pair(
+                                       FilterClassification::USE_CASE_UNKNOWN,
+                                       EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
        GetSourceClassifications_FeatureOnly) {
   // Provide classifications using the feature flag.
-  SetFeatureParams({{"classifications",
-                     CreateBase64EncodedFilterParamClassificationForTesting(
-                         {{kSourceSite, {"plzblock1", "plzblock2"}}}, {})}});
+  std::map<std::string, std::vector<std::string>> dest_params;
+  SetFeatureParams(
+      {{"classifications",
+        CreateBase64EncodedFilterParamClassificationForTesting(
+            {{kSourceSite, {"plzblock1", "plzblock2"}}}, dest_params)}});
 
   FilterClassification expected = MakeFilterClassification(
       kSourceSite, kSourceSiteRole, {"plzblock1", "plzblock2"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair(Eq(kSourceSite), EqualsProto(expected))));
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kSourceSite), UnorderedElementsAre(Pair(
+                                       FilterClassification::USE_CASE_UNKNOWN,
+                                       EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -239,15 +260,19 @@
   loader()->ReadClassifications(test_file_contents());
 
   // Provide classifications using the feature flag.
-  SetFeatureParams({{"classifications",
-                     CreateBase64EncodedFilterParamClassificationForTesting(
-                         {{kSourceSite, {"plzblockA", "plzblockB"}}}, {})}});
+  std::map<std::string, std::vector<std::string>> dest_params;
+  SetFeatureParams(
+      {{"classifications",
+        CreateBase64EncodedFilterParamClassificationForTesting(
+            {{kSourceSite, {"plzblockA", "plzblockB"}}}, dest_params)}});
 
   FilterClassification expected = MakeFilterClassification(
       kSourceSite, kSourceSiteRole, {"plzblockA", "plzblockB"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair(Eq(kSourceSite), EqualsProto(expected))));
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kSourceSite), UnorderedElementsAre(Pair(
+                                       FilterClassification::USE_CASE_UNKNOWN,
+                                       EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -258,9 +283,11 @@
       {{kDestinationSite, {"plzblock3", "plzblock4"}}});
 
   // Provide classifications using the feature flag.
-  SetFeatureParams({{"classifications",
-                     CreateBase64EncodedFilterParamClassificationForTesting(
-                         {{kSourceSite, {"plzblockA", "plzblockB"}}}, {})}});
+  std::map<std::string, std::vector<std::string>> dest_params;
+  SetFeatureParams(
+      {{"classifications",
+        CreateBase64EncodedFilterParamClassificationForTesting(
+            {{kSourceSite, {"plzblockA", "plzblockB"}}}, dest_params)}});
 
   // Provide classifications from the Component.
   SetComponentFileContents(classifications.SerializeAsString());
@@ -268,9 +295,11 @@
 
   FilterClassification expected = MakeFilterClassification(
       kSourceSite, kSourceSiteRole, {"plzblockA", "plzblockB"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair(Eq(kSourceSite), EqualsProto(expected))));
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kSourceSite), UnorderedElementsAre(Pair(
+                                       FilterClassification::USE_CASE_UNKNOWN,
+                                       EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -291,9 +320,11 @@
   // classifications were provided.
   FilterClassification expected = MakeFilterClassification(
       kSourceSite, kSourceSiteRole, {"plzblock1", "plzblock2"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair(Eq(kSourceSite), EqualsProto(expected))));
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kSourceSite), UnorderedElementsAre(Pair(
+                                       FilterClassification::USE_CASE_UNKNOWN,
+                                       EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -314,9 +345,11 @@
   // classifications were provided.
   FilterClassification expected = MakeFilterClassification(
       kSourceSite, kSourceSiteRole, {"plzblock1", "plzblock2"});
-  EXPECT_THAT(
-      loader()->GetSourceClassifications(),
-      UnorderedElementsAre(Pair(Eq(kSourceSite), EqualsProto(expected))));
+  EXPECT_THAT(loader()->GetSourceClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kSourceSite), UnorderedElementsAre(Pair(
+                                       FilterClassification::USE_CASE_UNKNOWN,
+                                       EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -333,9 +366,11 @@
   EXPECT_THAT(loader()->GetDestinationClassifications(), IsEmpty());
 
   // Provide classifications from the feature.
-  SetFeatureParams({{"classifications",
-                     CreateBase64EncodedFilterParamClassificationForTesting(
-                         {{kSourceSite, {"plzblock1", "plzblock2"}}}, {})}});
+  std::map<std::string, std::vector<std::string>> destination_params;
+  SetFeatureParams(
+      {{"classifications",
+        CreateBase64EncodedFilterParamClassificationForTesting(
+            {{kSourceSite, {"plzblock1", "plzblock2"}}}, destination_params)}});
 
   // No destination classifications were loaded.
   EXPECT_THAT(loader()->GetDestinationClassifications(), IsEmpty());
@@ -366,22 +401,99 @@
       kDestinationSite, kDestinationSiteRole, {"plzblock3", "plzblock4"});
   EXPECT_THAT(
       loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair(Eq(kDestinationSite), EqualsProto(expected))));
+      UnorderedElementsAre(
+          Pair(Eq(kDestinationSite),
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected))))));
+}
+
+TEST_F(UrlParamClassificationsLoaderTest,
+       GetDestinationClassifications_ComponentOnlyWithUseCases) {
+  // Create proto with both Source + Destination Classifications
+  FilterClassifications classifications =
+      MakeClassificationsProtoFromMapWithUseCases(
+          {{kSourceSite,
+            {{FilterClassification::CROSS_SITE_NO_3PC,
+              {"plzblock1", "plzblock2"}}}}},
+          {{kDestinationSite,
+            {{FilterClassification::CROSS_OTR, {"plzblock3", "plzblock4"}}}}});
+
+  // Provide classifications from the Component.
+  SetComponentFileContents(classifications.SerializeAsString());
+  loader()->ReadClassifications(test_file_contents());
+
+  FilterClassification expected_source_classification =
+      MakeFilterClassification(kSourceSite, kSourceSiteRole,
+                               {"plzblock1", "plzblock2"},
+                               {FilterClassification::CROSS_SITE_NO_3PC});
+  FilterClassification expected_destination_classification =
+      MakeFilterClassification(kDestinationSite, kDestinationSiteRole,
+                               {"plzblock3", "plzblock4"},
+                               {FilterClassification::CROSS_OTR});
+  EXPECT_THAT(
+      loader()->GetSourceClassifications(),
+      UnorderedElementsAre(Pair(
+          Eq(kSourceSite), UnorderedElementsAre(Pair(
+                               FilterClassification::CROSS_SITE_NO_3PC,
+                               EqualsProto(expected_source_classification))))));
+  EXPECT_THAT(loader()->GetDestinationClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kDestinationSite),
+                  UnorderedElementsAre(Pair(
+                      FilterClassification::CROSS_OTR,
+                      EqualsProto(expected_destination_classification))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
        GetDestinationClassifications_FeatureOnly) {
   // Provide classifications using the feature flag.
+  std::map<std::string, std::vector<std::string>> source_params;
   SetFeatureParams(
       {{"classifications",
         CreateBase64EncodedFilterParamClassificationForTesting(
-            {}, {{kDestinationSite, {"plzblock3", "plzblock4"}}})}});
+            source_params, {{kDestinationSite, {"plzblock3", "plzblock4"}}})}});
 
   FilterClassification expected = MakeFilterClassification(
       kDestinationSite, kDestinationSiteRole, {"plzblock3", "plzblock4"});
   EXPECT_THAT(
       loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair(Eq(kDestinationSite), EqualsProto(expected))));
+      UnorderedElementsAre(
+          Pair(Eq(kDestinationSite),
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected))))));
+}
+
+TEST_F(UrlParamClassificationsLoaderTest,
+       GetDestinationClassifications_FeatureOnlyWithUseCases) {
+  // Provide classifications using the feature flag.
+  SetFeatureParams(
+      {{"classifications",
+        CreateBase64EncodedFilterParamClassificationForTesting(
+            {{kSourceSite,
+              {{FilterClassification::CROSS_SITE_NO_3PC, {"plzblock"}}}}},
+            {{kDestinationSite,
+              {{FilterClassification::CROSS_OTR,
+                {"plzblock3", "plzblock4"}}}}})}});
+
+  FilterClassification expected_destination_classification =
+      MakeFilterClassification(kDestinationSite, kDestinationSiteRole,
+                               {"plzblock3", "plzblock4"},
+                               {FilterClassification::CROSS_OTR});
+  FilterClassification expected_source_classification =
+      MakeFilterClassification(kSourceSite, kSourceSiteRole, {"plzblock"},
+                               {FilterClassification::CROSS_SITE_NO_3PC});
+  EXPECT_THAT(loader()->GetDestinationClassifications(),
+              UnorderedElementsAre(Pair(
+                  Eq(kDestinationSite),
+                  UnorderedElementsAre(Pair(
+                      FilterClassification::CROSS_OTR,
+                      EqualsProto(expected_destination_classification))))));
+  EXPECT_THAT(
+      loader()->GetSourceClassifications(),
+      UnorderedElementsAre(Pair(
+          Eq(kSourceSite), UnorderedElementsAre(Pair(
+                               FilterClassification::CROSS_SITE_NO_3PC,
+                               EqualsProto(expected_source_classification))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -396,16 +508,20 @@
   loader()->ReadClassifications(test_file_contents());
 
   // Provide classifications using the feature flag.
+  std::map<std::string, std::vector<std::string>> source_params;
   SetFeatureParams(
       {{"classifications",
         CreateBase64EncodedFilterParamClassificationForTesting(
-            {}, {{kDestinationSite, {"plzblockA", "plzblockB"}}})}});
+            source_params, {{kDestinationSite, {"plzblockA", "plzblockB"}}})}});
 
   FilterClassification expected = MakeFilterClassification(
       kDestinationSite, kDestinationSiteRole, {"plzblockA", "plzblockB"});
   EXPECT_THAT(
       loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair(Eq(kDestinationSite), EqualsProto(expected))));
+      UnorderedElementsAre(
+          Pair(Eq(kDestinationSite),
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -416,10 +532,11 @@
       {{kDestinationSite, {"plzblock3", "plzblock4"}}});
 
   // Provide classifications using the feature flag.
+  std::map<std::string, std::vector<std::string>> source_params;
   SetFeatureParams(
       {{"classifications",
         CreateBase64EncodedFilterParamClassificationForTesting(
-            {}, {{kDestinationSite, {"plzblockA", "plzblockB"}}})}});
+            source_params, {{kDestinationSite, {"plzblockA", "plzblockB"}}})}});
 
   // Provide classifications from the Component.
   SetComponentFileContents(classifications.SerializeAsString());
@@ -429,7 +546,10 @@
       kDestinationSite, kDestinationSiteRole, {"plzblockA", "plzblockB"});
   EXPECT_THAT(
       loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair(Eq(kDestinationSite), EqualsProto(expected))));
+      UnorderedElementsAre(
+          Pair(Eq(kDestinationSite),
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected))))));
 }
 
 TEST_F(UrlParamClassificationsLoaderTest,
@@ -452,7 +572,10 @@
       kDestinationSite, kDestinationSiteRole, {"plzblock3", "plzblock4"});
   EXPECT_THAT(
       loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair(Eq(kDestinationSite), EqualsProto(expected))));
+      UnorderedElementsAre(
+          Pair(Eq(kDestinationSite),
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected))))));
 }
 
 TEST_F(
@@ -476,7 +599,10 @@
       kDestinationSite, kDestinationSiteRole, {"plzblock3", "plzblock4"});
   EXPECT_THAT(
       loader()->GetDestinationClassifications(),
-      UnorderedElementsAre(Pair(Eq(kDestinationSite), EqualsProto(expected))));
+      UnorderedElementsAre(
+          Pair(Eq(kDestinationSite),
+               UnorderedElementsAre(Pair(FilterClassification::USE_CASE_UNKNOWN,
+                                         EqualsProto(expected))))));
 }
 
 }  // namespace
diff --git a/chrome/browser/url_param_filter/url_param_filter_classification.proto b/chrome/browser/url_param_filter/url_param_filter_classification.proto
index 4dbfbd1..a1da65b0 100644
--- a/chrome/browser/url_param_filter/url_param_filter_classification.proto
+++ b/chrome/browser/url_param_filter/url_param_filter_classification.proto
@@ -21,6 +21,7 @@
   enum UseCase {
     USE_CASE_UNKNOWN = 0;
     CROSS_OTR = 1;
+    CROSS_SITE_NO_3PC = 2;
   }
   optional string site = 1;         // eTLD+1, required
   optional SiteRole site_role = 2;  // required
diff --git a/chrome/browser/url_param_filter/url_param_filter_test_helper.cc b/chrome/browser/url_param_filter/url_param_filter_test_helper.cc
index 161b426..80e0131 100644
--- a/chrome/browser/url_param_filter/url_param_filter_test_helper.cc
+++ b/chrome/browser/url_param_filter/url_param_filter_test_helper.cc
@@ -10,39 +10,102 @@
 
 namespace url_param_filter {
 
-url_param_filter::ClassificationMap CreateClassificationMapForTesting(
-    const std::map<std::string, std::vector<std::string>>& source,
-    url_param_filter::FilterClassification_SiteRole role) {
+namespace {
+std::map<std::string,
+         std::map<FilterClassification::UseCase, std::vector<std::string>>>
+ConvertToDefaultUseCases(
+    const std::map<std::string, std::vector<std::string>>& source) {
+  std::map<std::string,
+           std::map<FilterClassification::UseCase, std::vector<std::string>>>
+      source_with_use_cases;
+  for (auto i : source) {
+    source_with_use_cases[i.first][FilterClassification::USE_CASE_UNKNOWN] =
+        i.second;
+  }
+  return source_with_use_cases;
+}
+}  // namespace
+
+ClassificationMap CreateClassificationMapForTesting(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source,
+    FilterClassification_SiteRole role) {
   url_param_filter::ClassificationMap result;
   for (auto i : source) {
-    url_param_filter::FilterClassification classification;
-    classification.set_site(i.first);
-    classification.set_site_role(role);
     for (auto j : i.second) {
-      url_param_filter::FilterParameter* parameter =
-          classification.add_parameters();
-      parameter->set_name(j);
+      url_param_filter::FilterClassification classification;
+      classification.set_site(i.first);
+      classification.set_site_role(role);
+      if (j.first != FilterClassification::USE_CASE_UNKNOWN) {
+        classification.add_use_cases(j.first);
+      }
+      for (auto k : j.second) {
+        url_param_filter::FilterParameter* parameter =
+            classification.add_parameters();
+        parameter->set_name(k);
+      }
+      result[i.first][j.first] = classification;
     }
-    result[i.first] = classification;
   }
   return result;
 }
 
+ClassificationMap CreateClassificationMapForTesting(
+    const std::map<std::string, std::vector<std::string>>& source,
+    url_param_filter::FilterClassification_SiteRole role) {
+  return CreateClassificationMapForTesting(ConvertToDefaultUseCases(source),
+                                           role);
+}
+
+std::string CreateSerializedUrlParamFilterClassificationForTesting(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source_params,
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& destination_params) {
+  url_param_filter::FilterClassifications classifications;
+  for (auto i : CreateClassificationMapForTesting(
+           source_params, url_param_filter::FilterClassification_SiteRole::
+                              FilterClassification_SiteRole_SOURCE)) {
+    for (auto j : i.second) {
+      *classifications.add_classifications() = std::move(j.second);
+    }
+  }
+  for (auto i : CreateClassificationMapForTesting(
+           destination_params, url_param_filter::FilterClassification_SiteRole::
+                                   FilterClassification_SiteRole_DESTINATION)) {
+    for (auto j : i.second) {
+      *classifications.add_classifications() = std::move(j.second);
+    }
+  }
+  return classifications.SerializeAsString();
+}
+
 std::string CreateSerializedUrlParamFilterClassificationForTesting(
     const std::map<std::string, std::vector<std::string>>& source_params,
     const std::map<std::string, std::vector<std::string>>& destination_params) {
-  url_param_filter::FilterClassifications classifications;
-  for (auto i : CreateClassificationMapForTesting(
-           source_params, url_param_filter::FilterClassification_SiteRole::
-                              FilterClassification_SiteRole_SOURCE)) {
-    *classifications.add_classifications() = std::move(i.second);
-  }
-  for (auto i : CreateClassificationMapForTesting(
-           destination_params, url_param_filter::FilterClassification_SiteRole::
-                                   FilterClassification_SiteRole_DESTINATION)) {
-    *classifications.add_classifications() = std::move(i.second);
-  }
-  return classifications.SerializeAsString();
+  return CreateSerializedUrlParamFilterClassificationForTesting(
+      ConvertToDefaultUseCases(source_params),
+      ConvertToDefaultUseCases(destination_params));
+}
+
+std::string CreateBase64EncodedFilterParamClassificationForTesting(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source_params,
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& destination_params) {
+  std::string compressed;
+  compression::GzipCompress(
+      CreateSerializedUrlParamFilterClassificationForTesting(
+          source_params, destination_params),
+      &compressed);
+  std::string out;
+  base::Base64Encode(compressed, &out);
+  return out;
 }
 
 std::string CreateBase64EncodedFilterParamClassificationForTesting(
@@ -58,17 +121,44 @@
   return out;
 }
 
+FilterClassifications MakeClassificationsProtoFromMapWithUseCases(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source_map,
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& dest_map) {
+  url_param_filter::FilterClassifications classifications;
+  for (const auto& [site, params] : source_map) {
+    for (const auto& [use_case, params] : params) {
+      AddClassification(classifications.add_classifications(), site,
+                        FilterClassification_SiteRole_SOURCE, params,
+                        {use_case});
+    }
+  }
+  for (const auto& [site, params] : dest_map) {
+    for (const auto& [use_case, params] : params) {
+      AddClassification(classifications.add_classifications(), site,
+                        FilterClassification_SiteRole_DESTINATION, params,
+                        {use_case});
+    }
+  }
+  return classifications;
+}
+
 FilterClassifications MakeClassificationsProtoFromMap(
     const std::map<std::string, std::vector<std::string>>& source_map,
     const std::map<std::string, std::vector<std::string>>& dest_map) {
   url_param_filter::FilterClassifications classifications;
+  std::vector<FilterClassification::UseCase> use_cases;
   for (const auto& [site, params] : source_map) {
     AddClassification(classifications.add_classifications(), site,
-                      FilterClassification_SiteRole_SOURCE, params);
+                      FilterClassification_SiteRole_SOURCE, params, use_cases);
   }
   for (const auto& [site, params] : dest_map) {
     AddClassification(classifications.add_classifications(), site,
-                      FilterClassification_SiteRole_DESTINATION, params);
+                      FilterClassification_SiteRole_DESTINATION, params,
+                      use_cases);
   }
   return classifications;
 }
@@ -77,17 +167,33 @@
     const std::string& site,
     FilterClassification_SiteRole role,
     const std::vector<std::string>& params) {
+  std::vector<FilterClassification::UseCase> use_cases;
   FilterClassification fc;
-  AddClassification(&fc, site, role, params);
+  AddClassification(&fc, site, role, params, use_cases);
   return fc;
 }
 
-void AddClassification(FilterClassification* classification,
-                       const std::string& site,
-                       FilterClassification_SiteRole role,
-                       const std::vector<std::string>& params) {
+FilterClassification MakeFilterClassification(
+    const std::string& site,
+    FilterClassification_SiteRole role,
+    const std::vector<std::string>& params,
+    const std::vector<FilterClassification::UseCase>& use_cases) {
+  FilterClassification fc;
+  AddClassification(&fc, site, role, params, use_cases);
+  return fc;
+}
+
+void AddClassification(
+    FilterClassification* classification,
+    const std::string& site,
+    FilterClassification_SiteRole role,
+    const std::vector<std::string>& params,
+    const std::vector<FilterClassification::UseCase>& use_cases) {
   classification->set_site(site);
   classification->set_site_role(role);
+  for (const FilterClassification::UseCase& use_case : use_cases) {
+    classification->add_use_cases(use_case);
+  }
   for (const std::string& param : params) {
     FilterParameter* parameters = classification->add_parameters();
     parameters->set_name(param);
diff --git a/chrome/browser/url_param_filter/url_param_filter_test_helper.h b/chrome/browser/url_param_filter/url_param_filter_test_helper.h
index 45347ea..3347af8 100644
--- a/chrome/browser/url_param_filter/url_param_filter_test_helper.h
+++ b/chrome/browser/url_param_filter/url_param_filter_test_helper.h
@@ -23,24 +23,62 @@
 // observed as the source (aka referer) of a navigation, block params
 // "plzblock" and "plzblock1".
 url_param_filter::ClassificationMap CreateClassificationMapForTesting(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source,
+    url_param_filter::FilterClassification_SiteRole role);
+
+// Equivalent to the other overload, but uses the default (unknown) use case for
+// all parameters.
+url_param_filter::ClassificationMap CreateClassificationMapForTesting(
     const std::map<std::string, std::vector<std::string>>& source,
     url_param_filter::FilterClassification_SiteRole role);
 
 // Creates and serializes the URL param filter classifications proto.
 // Used for simulating reading the classifications file from Component Updater.
 std::string CreateSerializedUrlParamFilterClassificationForTesting(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source_params,
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& destination_params);
+
+// Equivalent to the other overload, but uses empty use case lists for all
+// parameters.
+std::string CreateSerializedUrlParamFilterClassificationForTesting(
     const std::map<std::string, std::vector<std::string>>& source_params,
     const std::map<std::string, std::vector<std::string>>& destination_params);
 
 // Create a base64 representation of the URL param filter classifications
 // proto. Used for initialization of the feature params in tests.
 std::string CreateBase64EncodedFilterParamClassificationForTesting(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source_params,
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& destination_params);
+
+// Equivalent to the other overload, but uses empty use case lists for all
+// parameters.
+std::string CreateBase64EncodedFilterParamClassificationForTesting(
     const std::map<std::string, std::vector<std::string>>& source_params,
     const std::map<std::string, std::vector<std::string>>& destination_params);
 
 // Make a FilterClassifications proto using two maps, for source and destination
 // classifications. Each map takes the form "site"->["p1", "p2", ...] where
 // each "pi" in the list is a param that should be filtered from that site.
+FilterClassifications MakeClassificationsProtoFromMapWithUseCases(
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& source_map,
+    const std::map<std::string,
+                   std::map<FilterClassification::UseCase,
+                            std::vector<std::string>>>& dest_map);
+
+// Equivalent to the other overload, but uses empty use case lists for all
+// parameters.
 FilterClassifications MakeClassificationsProtoFromMap(
     const std::map<std::string, std::vector<std::string>>& source_map,
     const std::map<std::string, std::vector<std::string>>& dest_map);
@@ -49,12 +87,21 @@
 FilterClassification MakeFilterClassification(
     const std::string& site,
     FilterClassification_SiteRole role,
+    const std::vector<std::string>& params,
+    const std::vector<FilterClassification::UseCase>& use_cases);
+
+// Equivalent to the other overload, but uses an empty list of use cases.
+FilterClassification MakeFilterClassification(
+    const std::string& site,
+    FilterClassification_SiteRole role,
     const std::vector<std::string>& params);
 
 // Helper method for adding repeated classifications on a FilterClassification.
-void AddClassification(FilterClassification* classification,
-                       const std::string& site,
-                       FilterClassification_SiteRole role,
-                       const std::vector<std::string>& params);
+void AddClassification(
+    FilterClassification* classification,
+    const std::string& site,
+    FilterClassification_SiteRole role,
+    const std::vector<std::string>& params,
+    const std::vector<FilterClassification::UseCase>& use_cases);
 }  // namespace url_param_filter
 #endif  // CHROME_BROWSER_URL_PARAM_FILTER_URL_PARAM_FILTER_TEST_HELPER_H_
diff --git a/chrome/browser/url_param_filter/url_param_filterer.cc b/chrome/browser/url_param_filter/url_param_filterer.cc
index b181ed8..9c4e096 100644
--- a/chrome/browser/url_param_filter/url_param_filterer.cc
+++ b/chrome/browser/url_param_filter/url_param_filterer.cc
@@ -38,7 +38,7 @@
 // Add the params classified as requiring filtering into the given parameter
 // set.
 void AddParams(std::set<std::string>& parameter_set,
-               url_param_filter::FilterClassification classification) {
+               FilterClassification classification) {
   for (auto i : classification.parameters()) {
     parameter_set.insert(i.name());
   }
@@ -50,7 +50,8 @@
                        const GURL& destination_url,
                        const ClassificationMap& source_classification_map,
                        const ClassificationMap& destination_classification_map,
-                       bool check_nested) {
+                       const bool check_nested,
+                       const FilterClassification::UseCase use_case) {
   GURL result = GURL{destination_url};
   int filtered_params_count = 0;
 
@@ -69,13 +70,25 @@
   auto source_classification_result =
       source_classification_map.find(source_classified_site);
   if (source_classification_result != source_classification_map.end()) {
-    AddParams(blocked_parameters, source_classification_result->second);
+    auto source_classification_with_use_case =
+        source_classification_result->second.find(use_case);
+    if (source_classification_with_use_case !=
+        source_classification_result->second.end()) {
+      AddParams(blocked_parameters,
+                source_classification_with_use_case->second);
+    }
   }
   auto destination_classification_result =
       destination_classification_map.find(destination_classified_site);
   if (destination_classification_result !=
       destination_classification_map.end()) {
-    AddParams(blocked_parameters, destination_classification_result->second);
+    auto destination_classification_with_use_case =
+        destination_classification_result->second.find(use_case);
+    if (destination_classification_with_use_case !=
+        destination_classification_result->second.end()) {
+      AddParams(blocked_parameters,
+                destination_classification_with_use_case->second);
+    }
   }
   // Return quickly if there are no parameters we care about.
   if (blocked_parameters.size() == 0) {
@@ -95,7 +108,7 @@
         if (nested.is_valid()) {
           FilterResult nested_result =
               FilterUrl(destination_url, nested, source_classification_map,
-                        destination_classification_map, false);
+                        destination_classification_map, false, use_case);
           // If a nested URL contains a param we must filter, do so now.
           if (nested != nested_result.filtered_url) {
             value = base::EscapeQueryParamValue(
@@ -126,24 +139,37 @@
 }
 }  // anonymous namespace
 
-FilterResult FilterUrl(
-    const GURL& source_url,
-    const GURL& destination_url,
-    const ClassificationMap& source_classification_map,
-    const ClassificationMap& destination_classification_map) {
+FilterResult FilterUrl(const GURL& source_url,
+                       const GURL& destination_url,
+                       const ClassificationMap& source_classification_map,
+                       const ClassificationMap& destination_classification_map,
+                       const FilterClassification::UseCase use_case) {
   return FilterUrl(source_url, destination_url, source_classification_map,
-                   destination_classification_map, true);
+                   destination_classification_map, true, use_case);
 }
 
 FilterResult FilterUrl(const GURL& source_url, const GURL& destination_url) {
   if (!base::FeatureList::IsEnabled(features::kIncognitoParamFilterEnabled)) {
     return FilterResult{destination_url, 0};
   }
-
   return FilterUrl(
       source_url, destination_url,
       ClassificationsLoader::GetInstance()->GetSourceClassifications(),
-      ClassificationsLoader::GetInstance()->GetDestinationClassifications());
+      ClassificationsLoader::GetInstance()->GetDestinationClassifications(),
+      FilterClassification::USE_CASE_UNKNOWN);
+}
+
+FilterResult FilterUrl(const GURL& source_url,
+                       const GURL& destination_url,
+                       const FilterClassification::UseCase use_case) {
+  if (!base::FeatureList::IsEnabled(features::kIncognitoParamFilterEnabled)) {
+    return FilterResult{destination_url, 0};
+  }
+  return FilterUrl(
+      source_url, destination_url,
+      ClassificationsLoader::GetInstance()->GetSourceClassifications(),
+      ClassificationsLoader::GetInstance()->GetDestinationClassifications(),
+      use_case);
 }
 
 }  // namespace url_param_filter
diff --git a/chrome/browser/url_param_filter/url_param_filterer.h b/chrome/browser/url_param_filter/url_param_filterer.h
index e98c20d..186cd02 100644
--- a/chrome/browser/url_param_filter/url_param_filterer.h
+++ b/chrome/browser/url_param_filter/url_param_filterer.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_URL_PARAM_FILTER_URL_PARAM_FILTERER_H_
 
 #include "chrome/browser/url_param_filter/url_param_classifications_loader.h"
+#include "chrome/browser/url_param_filter/url_param_filter_classification.pb.h"
 #include "url/gurl.h"
 
 // Used to filter URL parameters based on backend classification rules. Note
@@ -27,12 +28,23 @@
 FilterResult FilterUrl(const GURL& source_url,
                        const GURL& destination_url,
                        const ClassificationMap& source_classification_map,
-                       const ClassificationMap& destination_classification_map);
+                       const ClassificationMap& destination_classification_map,
+                       const FilterClassification::UseCase use_case);
 
 // Filter the destination URL according to the default parameter classifications
-// for the source and destination URLs.
+// for the source and destination URLs. Equivalent to calling the three-arg
+// version with a `use_case` of `UNKNOWN`. This overload is included for
+// backward compatibility and will be removed.
 // Currently experimental; not intended for broad consumption.
 FilterResult FilterUrl(const GURL& source_url, const GURL& destination_url);
 
+// Filter the destination URL according to the default parameter classifications
+// for the source and destination URLs, only if the classifications include the
+// passed-in `UseCase`.
+// Currently experimental; not intended for broad consumption.
+FilterResult FilterUrl(const GURL& source_url,
+                       const GURL& destination_url,
+                       const FilterClassification::UseCase use_case);
+
 }  // namespace url_param_filter
 #endif  // CHROME_BROWSER_URL_PARAM_FILTER_URL_PARAM_FILTERER_H_
diff --git a/chrome/browser/url_param_filter/url_param_filterer_unittest.cc b/chrome/browser/url_param_filter/url_param_filterer_unittest.cc
index 09418b5..b8687d4 100644
--- a/chrome/browser/url_param_filter/url_param_filterer_unittest.cc
+++ b/chrome/browser/url_param_filter/url_param_filterer_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "chrome/browser/url_param_filter/url_param_filter_classification.pb.h"
 #include "chrome/browser/url_param_filter/url_param_filter_test_helper.h"
 #include "chrome/common/chrome_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -23,7 +22,8 @@
   GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
   // If no classifications are passed in, don't modify the destination URL.
   FilterResult result =
-      FilterUrl(source, expected, ClassificationMap(), ClassificationMap());
+      FilterUrl(source, expected, ClassificationMap(), ClassificationMap(),
+                FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 0);
 }
@@ -44,7 +44,8 @@
   // If classifications are passed in, but the destination URL doesn't contain
   // any blocked params, don't modify it.
   FilterResult result = FilterUrl(source, expected, source_classification_map,
-                                  destination_classification_map);
+                                  destination_classification_map,
+                                  FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 0);
 }
@@ -60,8 +61,9 @@
   // Navigations from source.xyz with a param called plzblock should have that
   // param removed, regardless of destination.
   GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
-  FilterResult result = FilterUrl(
-      source, destination, source_classification_map, ClassificationMap());
+  FilterResult result =
+      FilterUrl(source, destination, source_classification_map,
+                ClassificationMap(), FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 1);
 }
@@ -77,8 +79,9 @@
   // Navigations from source.xyz with a param called plzblock should have that
   // param removed, regardless of missing a value.
   GURL expected = GURL{"https://destination.xyz?nochange"};
-  FilterResult result = FilterUrl(
-      source, destination, source_classification_map, ClassificationMap());
+  FilterResult result =
+      FilterUrl(source, destination, source_classification_map,
+                ClassificationMap(), FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 1);
 }
@@ -87,16 +90,19 @@
   GURL source = GURL{"https://source.xyz"};
   GURL destination =
       GURL{"https://destination.xyz?plzblock=123&plzblock1=321&nochange=asdf"};
+  std::map<std::string, std::vector<std::string>> classifications = {
+      {"source.xyz", {"plzblock", "plzblock1"}}};
   ClassificationMap source_classification_map =
       CreateClassificationMapForTesting(
-          {{"source.xyz", {"plzblock", "plzblock1"}}},
+          classifications,
           FilterClassification_SiteRole::FilterClassification_SiteRole_SOURCE);
 
   // Navigations from source.xyz with a param called plzblock or plzblock1
   // should have those params removed, regardless of destination.
   GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
-  FilterResult result = FilterUrl(
-      source, destination, source_classification_map, ClassificationMap());
+  FilterResult result =
+      FilterUrl(source, destination, source_classification_map,
+                ClassificationMap(), FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -114,7 +120,8 @@
   // that param removed, regardless of source.
   GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
   FilterResult result = FilterUrl(source, destination, ClassificationMap(),
-                                  destination_classification_map);
+                                  destination_classification_map,
+                                  FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 1);
 }
@@ -123,17 +130,19 @@
   GURL source = GURL{"https://source.xyz"};
   GURL destination =
       GURL{"https://destination.xyz?plzblock=123&plzblock1=321&nochange=asdf"};
+  std::map<std::string, std::vector<std::string>> classifications = {
+      {"destination.xyz", {"plzblock", "plzblock1"}}};
   ClassificationMap destination_classification_map =
       CreateClassificationMapForTesting(
-          {{"destination.xyz", {"plzblock", "plzblock1"}}},
-          FilterClassification_SiteRole::
-              FilterClassification_SiteRole_DESTINATION);
+          classifications, FilterClassification_SiteRole::
+                               FilterClassification_SiteRole_DESTINATION);
 
   // Navigations to destination.xyz with a param called plzblock and/or
   // plzblock1 should have those param removed, regardless of source.
   GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
   FilterResult result = FilterUrl(source, destination, ClassificationMap(),
-                                  destination_classification_map);
+                                  destination_classification_map,
+                                  FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -155,9 +164,9 @@
   // Both source and destination have associated URL param filtering rules. Only
   // nochange should remain.
   GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -179,9 +188,9 @@
   // Both source and destination have associated URL param filtering rules. Only
   // nochange should remain.
   GURL expected = GURL{"https://123.0.0.1?nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -204,9 +213,9 @@
   // Both source and destination have associated URL param filtering rules. Only
   // nochange should remain.
   GURL expected = GURL{"https://[2001:db8:ac10:fe01::]?nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -230,9 +239,9 @@
   // Both source and destination have associated URL param filtering rules. Only
   // nochange should remain.
   GURL expected = GURL{"https://[2001:db8:ac10:fe01::]?nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -258,9 +267,9 @@
   // nochange should remain.
   GURL expected =
       GURL{"https://destination.xyz?nochange=asdf&laternochange=fdsa"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -281,9 +290,9 @@
               FilterClassification_SiteRole_DESTINATION);
 
   GURL expected = GURL{"https://subdomain.destination.xyz?nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -304,9 +313,9 @@
 
   // The disallowed params PlZbLoCk and PLZBLOCK1 should be removed.
   GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -335,9 +344,9 @@
       "subdomain.source.xyz?destination=https%3A%2F%2Fdestination.xyz%2F%"
       "3Fnochange%"
       "3Dasdf&nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 2);
 }
@@ -365,9 +374,9 @@
       "subdomain.source.xyz?destination=https%3A%2F%2Fdestination.xyz%2F%"
       "3Fnochange%"
       "3Dasdf&nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 1);
 }
@@ -396,9 +405,9 @@
       "subdomain.source.xyz?destination=https%3A%2F%2Fdestination.xyz%2F%"
       "3Fnochange%"
       "3Dasdf&nochange=asdf"};
-  FilterResult result =
-      FilterUrl(source, destination, source_classification_map,
-                destination_classification_map);
+  FilterResult result = FilterUrl(
+      source, destination, source_classification_map,
+      destination_classification_map, FilterClassification::USE_CASE_UNKNOWN);
   ASSERT_EQ(result.filtered_url, expected);
   ASSERT_EQ(result.filtered_param_count, 4);
 }
@@ -413,6 +422,18 @@
   ASSERT_EQ(result, expected);
 }
 
+TEST_F(UrlParamFiltererTest, FeatureDeactivatedUseCaseVariant) {
+  GURL source = GURL{"http://source.xyz"};
+  GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
+  // When the feature is not explicitly activated, the 3-parameter version of
+  // the function should be inert.
+  FilterResult result =
+      FilterUrl(source, expected, FilterClassification::CROSS_OTR);
+
+  ASSERT_EQ(result.filtered_url, expected);
+  ASSERT_EQ(result.filtered_param_count, 0);
+}
+
 TEST_F(UrlParamFiltererTest, FeatureActivatedNoQueryString) {
   GURL source = GURL{"http://source.xyz"};
   GURL destination = GURL{"https://destination.xyz"};
@@ -478,5 +499,115 @@
   ASSERT_EQ(result.filtered_param_count, 2);
 }
 
+TEST_F(UrlParamFiltererTest, CrossOtrUseCase) {
+  GURL source = GURL{"http://source.xyz"};
+  GURL destination =
+      GURL{"https://destination.xyz?plzblock=1&plzblock1=2&nochange=asdf"};
+
+  std::string encoded_classification =
+      CreateBase64EncodedFilterParamClassificationForTesting(
+          {{"source.xyz", {{FilterClassification::CROSS_OTR, {"plzblock"}}}}},
+          {{"destination.xyz",
+            {{FilterClassification::CROSS_OTR, {"plzblock1"}}}}});
+
+  base::test::ScopedFeatureList scoped_feature_list;
+  // With the flag set, the URL should be filtered.
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kIncognitoParamFilterEnabled,
+      {{"classifications", encoded_classification}});
+
+  GURL expected = GURL{"https://destination.xyz?nochange=asdf"};
+  FilterResult result =
+      FilterUrl(source, destination, FilterClassification::CROSS_OTR);
+
+  ASSERT_EQ(result.filtered_url, expected);
+  ASSERT_EQ(result.filtered_param_count, 2);
+}
+
+TEST_F(UrlParamFiltererTest, MismatchedUseCases) {
+  GURL source = GURL{"http://source.xyz"};
+  GURL destination =
+      GURL{"https://destination.xyz?plzblock=1&plzblock1=2&nochange=asdf"};
+
+  std::string encoded_classification =
+      CreateBase64EncodedFilterParamClassificationForTesting(
+          {{"source.xyz", {{FilterClassification::CROSS_OTR, {"plzblock"}}}}},
+          {{"destination.xyz",
+            {{FilterClassification::CROSS_OTR, {"plzblock1"}}}}});
+
+  base::test::ScopedFeatureList scoped_feature_list;
+  // With the flag set, the URL could be filtered.
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kIncognitoParamFilterEnabled,
+      {{"classifications", encoded_classification}});
+
+  FilterResult result =
+      FilterUrl(source, destination, FilterClassification::CROSS_SITE_NO_3PC);
+
+  // There are no rules for CROSS_SITE_NO_3PC, so the URL should not change.
+  ASSERT_EQ(result.filtered_url, destination);
+  ASSERT_EQ(result.filtered_param_count, 0);
+}
+
+TEST_F(UrlParamFiltererTest, MixedUseCases) {
+  GURL source = GURL{"http://source.xyz"};
+  GURL destination =
+      GURL{"https://destination.xyz?plzblock=1&plzblock1=2&nochange=asdf"};
+
+  std::string encoded_classification =
+      CreateBase64EncodedFilterParamClassificationForTesting(
+          {{"source.xyz",
+            {{FilterClassification::CROSS_SITE_NO_3PC, {"plzblock"}}}}},
+          {{"destination.xyz",
+            {{FilterClassification::CROSS_OTR, {"plzblock1"}}}}});
+
+  base::test::ScopedFeatureList scoped_feature_list;
+  // With the flag set, the URL could be filtered.
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kIncognitoParamFilterEnabled,
+      {{"classifications", encoded_classification}});
+
+  GURL expected = GURL{"https://destination.xyz?plzblock1=2&nochange=asdf"};
+  FilterResult result =
+      FilterUrl(source, destination, FilterClassification::CROSS_SITE_NO_3PC);
+
+  // The only rule for CROSS_SITE_NO_3PC is to remove `plzblock` from
+  // source.xyz.
+  ASSERT_EQ(result.filtered_url, expected);
+  ASSERT_EQ(result.filtered_param_count, 1);
+}
+
+TEST_F(UrlParamFiltererTest, MultipleUseCases) {
+  GURL source = GURL{"http://source.xyz"};
+  GURL destination = GURL{
+      "https://"
+      "destination.xyz?blockotrsource=1&blockno3pcdest=1&plzblock=1&plzblock1="
+      "2&nochange=asdf"};
+
+  std::string encoded_classification =
+      CreateBase64EncodedFilterParamClassificationForTesting(
+          {{"source.xyz",
+            {{FilterClassification::CROSS_OTR, {"blockotrsource"}},
+             {FilterClassification::CROSS_SITE_NO_3PC, {"plzblock"}}}}},
+          {{"destination.xyz",
+            {{FilterClassification::CROSS_SITE_NO_3PC, {"blockno3pcdest"}},
+             {FilterClassification::CROSS_OTR, {"plzblock1"}}}}});
+
+  base::test::ScopedFeatureList scoped_feature_list;
+  // With the flag set, the URL could be filtered.
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kIncognitoParamFilterEnabled,
+      {{"classifications", encoded_classification}});
+
+  GURL expected = GURL{
+      "https://destination.xyz?blockotrsource=1&plzblock1=2&nochange=asdf"};
+  FilterResult result =
+      FilterUrl(source, destination, FilterClassification::CROSS_SITE_NO_3PC);
+
+  // `blockotrsource` should be left alone, but `blockno3pcdest` should not.
+  ASSERT_EQ(result.filtered_url, expected);
+  ASSERT_EQ(result.filtered_param_count, 2);
+}
+
 }  // namespace
 }  // namespace url_param_filter
diff --git a/chrome/browser/web_applications/app_service/lacros_web_apps_controller.cc b/chrome/browser/web_applications/app_service/lacros_web_apps_controller.cc
index dd58cd0..4c18781 100644
--- a/chrome/browser/web_applications/app_service/lacros_web_apps_controller.cc
+++ b/chrome/browser/web_applications/app_service/lacros_web_apps_controller.cc
@@ -20,7 +20,7 @@
 #include "chrome/browser/apps/app_service/launch_utils.h"
 #include "chrome/browser/apps/app_service/menu_item_constants.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/startup/first_run_lacros.h"
+#include "chrome/browser/ui/startup/lacros_first_run_service.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
@@ -215,13 +215,15 @@
       base::BindOnce(&LacrosWebAppsController::ReturnLaunchResults,
                      weak_ptr_factory_.GetWeakPtr(), std::move(mojo_callback));
 
-  if (!ShouldOpenPrimaryProfileFirstRun(profile_)) {
+  auto* fre_service =
+      LacrosFirstRunServiceFactory::GetForBrowserContext(profile_);
+  if (!fre_service || !fre_service->ShouldOpenFirstRun()) {
     ExecuteContextMenuCommandInternal(app_id, id,
                                       std::move(execution_finished_callback));
     return;
   }
 
-  OpenPrimaryProfileFirstRunIfNeeded(base::BindOnce(
+  fre_service->OpenFirstRunIfNeeded(base::BindOnce(
       &OnOpenPrimaryProfileFirstRunExited,
       std::move(execution_finished_callback),
       base::BindOnce(
@@ -265,13 +267,16 @@
       base::BindOnce(&LacrosWebAppsController::ReturnLaunchResults,
                      weak_ptr_factory_.GetWeakPtr(), std::move(mojo_callback));
   auto params = apps::ConvertCrosapiToLaunchParams(launch_params, profile_);
-  if (!ShouldOpenPrimaryProfileFirstRun(profile_)) {
+  auto* fre_service =
+      LacrosFirstRunServiceFactory::GetForBrowserContext(profile_);
+
+  if (!fre_service || !fre_service->ShouldOpenFirstRun()) {
     LaunchInternal(launch_params->app_id, std::move(params),
                    std::move(launch_finished_callback));
     return;
   }
 
-  OpenPrimaryProfileFirstRunIfNeeded(base::BindOnce(
+  fre_service->OpenFirstRunIfNeeded(base::BindOnce(
       &OnOpenPrimaryProfileFirstRunExited, std::move(launch_finished_callback),
       base::BindOnce(&LacrosWebAppsController::LaunchInternal,
                      weak_ptr_factory_.GetWeakPtr(), launch_params->app_id,
diff --git a/chrome/browser/win/browser_util.cc b/chrome/browser/win/browser_util.cc
index 3a3ae86..68b2288 100644
--- a/chrome/browser/win/browser_util.cc
+++ b/chrome/browser/win/browser_util.cc
@@ -9,6 +9,7 @@
 #include <algorithm>
 #include <string>
 
+#include "base/files/file_path.h"
 #include "base/logging.h"
 
 namespace browser_util {
@@ -57,14 +58,15 @@
     // probably broken already if QueryFullProcessImageNameW is failing.
     return false;
   }
-
-  std::replace(nt_path_name.begin(), nt_path_name.end(), '\\', '!');
-  std::transform(nt_path_name.begin(), nt_path_name.end(), nt_path_name.begin(),
+  std::wstring nt_dir_name(
+      base::FilePath(nt_path_name).DirName().value().c_str());
+  std::replace(nt_dir_name.begin(), nt_dir_name.end(), '\\', '!');
+  std::transform(nt_dir_name.begin(), nt_dir_name.end(), nt_dir_name.begin(),
                  tolower);
-  nt_path_name = L"Global\\" + nt_path_name;
+  nt_dir_name = L"Global\\" + nt_dir_name;
   if (handle != NULL)
     ::CloseHandle(handle);
-  handle = ::CreateEventW(NULL, TRUE, TRUE, nt_path_name.c_str());
+  handle = ::CreateEventW(NULL, TRUE, TRUE, nt_dir_name.c_str());
   int error = ::GetLastError();
   return (error == ERROR_ALREADY_EXISTS || error == ERROR_ACCESS_DENIED);
 }
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index a34ee64..12ec31b4 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1652442381-24b53463056b9c62acfd963fff7582e92c0a4988.profdata
+chrome-mac-arm-main-1652464682-5ecdd110e879d229eee247e64d4213b40e74c27d.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 4aff2b1..95250de 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1652442381-bde0e3db1067da0048cf10d92aabe7569dda52e3.profdata
+chrome-win32-main-1652453684-a7059ff1eda7587d6c49a6b3e4ccedcbe7f14ba0.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index f9d6801..352d237 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1652442381-9225b0f1d9056ea150a247e385db4bc8b15a6f77.profdata
+chrome-win64-main-1652453684-1eea911d70ef4a430156b279252fff352ef296cc.profdata
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
index 8d0f607..85f63e86 100644
--- a/chrome/common/BUILD.gn
+++ b/chrome/common/BUILD.gn
@@ -268,8 +268,6 @@
 
   if (enable_extensions) {
     sources += [
-      "extensions/api/commands/commands_handler.cc",
-      "extensions/api/commands/commands_handler.h",
       "extensions/api/file_browser_handlers/file_browser_handler.cc",
       "extensions/api/file_browser_handlers/file_browser_handler.h",
       "extensions/api/notifications/notification_style.cc",
diff --git a/chrome/common/DEPS b/chrome/common/DEPS
index 9de12d4..392de93 100644
--- a/chrome/common/DEPS
+++ b/chrome/common/DEPS
@@ -75,7 +75,10 @@
 ]
 
 specific_include_rules = {
-  "logging_chrome.cc": [
+  "logging_chrome\.cc": [
     "+ash/constants/ash_switches.h",
-  ]
+  ],
+  "pdf_util_unittest\.cc": [
+    "+pdf/content_restriction.h",
+  ],
 }
diff --git a/chrome/common/extensions/chrome_manifest_handlers.cc b/chrome/common/extensions/chrome_manifest_handlers.cc
index 41cfd7d..bdec9c8 100644
--- a/chrome/common/extensions/chrome_manifest_handlers.cc
+++ b/chrome/common/extensions/chrome_manifest_handlers.cc
@@ -8,7 +8,6 @@
 
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
-#include "chrome/common/extensions/api/commands/commands_handler.h"
 #include "chrome/common/extensions/api/omnibox/omnibox_handler.h"
 #include "chrome/common/extensions/api/speech/tts_engine_manifest_handler.h"
 #include "chrome/common/extensions/api/storage/storage_schema_manifest_handler.h"
@@ -45,7 +44,6 @@
   registry->RegisterHandler(std::make_unique<AboutPageHandler>());
   registry->RegisterHandler(std::make_unique<AppIsolationHandler>());
   registry->RegisterHandler(std::make_unique<AppLaunchManifestHandler>());
-  registry->RegisterHandler(std::make_unique<CommandsHandler>());
   registry->RegisterHandler(std::make_unique<DevToolsPageHandler>());
   registry->RegisterHandler(std::make_unique<HomepageURLHandler>());
   registry->RegisterHandler(std::make_unique<LinkedAppIconsHandler>());
diff --git a/chrome/common/pdf_util_unittest.cc b/chrome/common/pdf_util_unittest.cc
new file mode 100644
index 0000000..0e836ac
--- /dev/null
+++ b/chrome/common/pdf_util_unittest.cc
@@ -0,0 +1,39 @@
+// Copyright 2022 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/common/pdf_util.h"
+
+#include "chrome/common/content_restriction.h"
+#include "extensions/buildflags/buildflags.h"
+#include "pdf/content_restriction.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+static_assert(static_cast<int>(CONTENT_RESTRICTION_COPY) ==
+              static_cast<int>(chrome_pdf::kContentRestrictionCopy));
+static_assert(static_cast<int>(CONTENT_RESTRICTION_CUT) ==
+              static_cast<int>(chrome_pdf::kContentRestrictionCut));
+static_assert(static_cast<int>(CONTENT_RESTRICTION_PASTE) ==
+              static_cast<int>(chrome_pdf::kContentRestrictionPaste));
+static_assert(static_cast<int>(CONTENT_RESTRICTION_PRINT) ==
+              static_cast<int>(chrome_pdf::kContentRestrictionPrint));
+static_assert(static_cast<int>(CONTENT_RESTRICTION_SAVE) ==
+              static_cast<int>(chrome_pdf::kContentRestrictionSave));
+
+TEST(PdfUtil, IsPdfExtensionOrigin) {
+  EXPECT_FALSE(
+      IsPdfExtensionOrigin(url::Origin::Create(GURL("https://example.com/"))));
+  EXPECT_FALSE(IsPdfExtensionOrigin(
+      url::Origin::Create(GURL("https://mhjfbmdgcfjbbpaeojofohoefgiehjai/"))));
+  EXPECT_FALSE(IsPdfExtensionOrigin(
+      url::Origin::Create(GURL("chrome-extension://foo/"))));
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+  EXPECT_TRUE(IsPdfExtensionOrigin(url::Origin::Create(
+      GURL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/"))));
+#else
+  EXPECT_FALSE(IsPdfExtensionOrigin(url::Origin::Create(
+      GURL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/"))));
+#endif
+}
diff --git a/chrome/installer/mac/OWNERS b/chrome/installer/mac/OWNERS
index 74d1d5f..163563f9 100644
--- a/chrome/installer/mac/OWNERS
+++ b/chrome/installer/mac/OWNERS
@@ -1,3 +1,2 @@
 mark@chromium.org
-kerrnel@chromium.org
 rsesek@chromium.org
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index ebb40d6..25b8b1da 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -5150,6 +5150,7 @@
     "../browser/permissions/contextual_notification_permission_ui_selector_unittest.cc",
     "../browser/permissions/crowd_deny_preload_data_unittest.cc",
     "../browser/permissions/crowd_deny_safe_browsing_request_unittest.cc",
+    "../browser/permissions/notifications_engagement_service_unittest.cc",
     "../browser/permissions/permission_context_base_permissions_policy_unittest.cc",
     "../browser/permissions/prediction_based_permission_ui_selector_unittest.cc",
     "../browser/permissions/pref_notification_permission_ui_selector_unittest.cc",
@@ -7643,7 +7644,6 @@
       "../browser/sync_file_system/syncable_file_system_util_unittest.cc",
       "../browser/ui/webui/extensions/extensions_internals_unittest.cc",
       "../common/apps/platform_apps/media_galleries_permission_unittest.cc",
-      "../common/extensions/api/commands/commands_manifest_unittest.cc",
       "../common/extensions/api/common_extension_api_unittest.cc",
       "../common/extensions/api/extension_action/browser_action_manifest_unittest.cc",
       "../common/extensions/api/extension_action/page_action_manifest_unittest.cc",
@@ -8094,6 +8094,11 @@
     ]
   }
 
+  if (enable_pdf) {
+    sources += [ "../common/pdf_util_unittest.cc" ]
+    deps += [ "//pdf:content_restriction" ]
+  }
+
   if (enable_plugins) {
     sources += [
       "../browser/plugins/chrome_plugin_service_filter_unittest.cc",
diff --git a/chrome/test/data/preload/iframe.html b/chrome/test/data/preload/iframe.html
index febe396..4793781 100644
--- a/chrome/test/data/preload/iframe.html
+++ b/chrome/test/data/preload/iframe.html
@@ -2,6 +2,8 @@
     <head>
     </head>
     <body>
-        <a id="iframe_anchor" href="https://www.fakesearch.com/"></a>
-    </body>
-</html>
\ No newline at end of file
+        <a id="iframe_anchor" href="https://www.fakesearch.com/">
+            <div style='padding: 0px; width: 400px; height: 400px;'></div>
+        </a>
+        </body>
+</html>
diff --git a/chrome/test/data/preload/iframe_anchor.html b/chrome/test/data/preload/iframe_anchor.html
index 1de28d5..c471646 100644
--- a/chrome/test/data/preload/iframe_anchor.html
+++ b/chrome/test/data/preload/iframe_anchor.html
@@ -2,6 +2,6 @@
     <head>
     </head>
     <body>
-        <iframe id="iframe1" src="iframe.html"></iframe>
+        <iframe id="iframe1" height="400" width="400" src="iframe.html"></iframe>
     </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/chrome/test/data/webui/cr_elements/cr_fingerprint_progress_arc_tests.ts b/chrome/test/data/webui/cr_elements/cr_fingerprint_progress_arc_tests.ts
index 0157e6a..a68304e 100644
--- a/chrome/test/data/webui/cr_elements/cr_fingerprint_progress_arc_tests.ts
+++ b/chrome/test/data/webui/cr_elements/cr_fingerprint_progress_arc_tests.ts
@@ -4,7 +4,7 @@
 
 import 'chrome://resources/cr_elements/cr_lottie/cr_lottie.m.js';
 
-import {CrFingerprintProgressArcElement, FINGERPRINT_SCANNED_ICON_DARK, FINGERPRINT_SCANNED_ICON_LIGHT, FINGERPRINT_TICK_DARK_URL, FINGERPRINT_TICK_LIGHT_URL, PROGRESS_CIRCLE_BACKGROUND_COLOR_DARK, PROGRESS_CIRCLE_BACKGROUND_COLOR_LIGHT, PROGRESS_CIRCLE_FILL_COLOR_DARK, PROGRESS_CIRCLE_FILL_COLOR_LIGHT} from 'chrome://resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.m.js';
+import {CrFingerprintProgressArcElement, FINGERPRINT_CHECK_DARK_URL, FINGERPRINT_CHECK_LIGHT_URL, FINGERPRINT_SCANNED_ICON_DARK, FINGERPRINT_SCANNED_ICON_LIGHT, PROGRESS_CIRCLE_BACKGROUND_COLOR_DARK, PROGRESS_CIRCLE_BACKGROUND_COLOR_LIGHT, PROGRESS_CIRCLE_FILL_COLOR_DARK, PROGRESS_CIRCLE_FILL_COLOR_LIGHT} from 'chrome://resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals} from 'chrome://webui-test/chai_assert.js';
 import {MockController} from 'chrome://webui-test/mock_controller.js';
@@ -254,10 +254,10 @@
 
     progressArc.setProgress(0, 1, true);
     assertEquals(FINGERPRINT_SCANNED_ICON_LIGHT, fingerprintScanned.icon);
-    assertEquals(FINGERPRINT_TICK_LIGHT_URL, scanningAnimation.animationUrl);
+    assertEquals(FINGERPRINT_CHECK_LIGHT_URL, scanningAnimation.animationUrl);
 
     fakeMediaQueryList.matches = true;
     assertEquals(FINGERPRINT_SCANNED_ICON_DARK, fingerprintScanned.icon);
-    assertEquals(FINGERPRINT_TICK_DARK_URL, scanningAnimation.animationUrl);
+    assertEquals(FINGERPRINT_CHECK_DARK_URL, scanningAnimation.animationUrl);
   });
 });
diff --git a/chromeos/services/assistant/public/cpp/assistant_browser_delegate.h b/chromeos/services/assistant/public/cpp/assistant_browser_delegate.h
index fe2fdbe..3e59657 100644
--- a/chromeos/services/assistant/public/cpp/assistant_browser_delegate.h
+++ b/chromeos/services/assistant/public/cpp/assistant_browser_delegate.h
@@ -81,6 +81,10 @@
       mojo::PendingReceiver<chromeos::network_config::mojom::CrosNetworkConfig>
           receiver) = 0;
 
+  // Opens the specified `url` in a new browser tab. Special handling is applied
+  // to OS Settings url which may cause deviation from this behavior.
+  virtual void OpenUrl(GURL url) = 0;
+
 #if BUILDFLAG(ENABLE_CROS_LIBASSISTANT)
   // Requests a connection to Libassistant service interface via the browser.
   virtual void RequestLibassistantService(
diff --git a/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.cc b/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.cc
index 85e4dc9f..16713d8 100644
--- a/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.cc
+++ b/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.cc
@@ -4,6 +4,8 @@
 
 #include "chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.h"
 
+#include "ash/public/cpp/new_window_delegate.h"
+
 namespace chromeos {
 namespace assistant {
 
@@ -33,5 +35,10 @@
   }
 }
 
+void ScopedAssistantBrowserDelegate::OpenUrl(GURL url) {
+  ash::NewWindowDelegate::GetPrimary()->OpenUrl(
+      url, ash::NewWindowDelegate::OpenUrlFrom::kUserInteraction);
+}
+
 }  // namespace assistant
 }  // namespace chromeos
diff --git a/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.h b/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.h
index 204c507..689756f 100644
--- a/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.h
+++ b/chromeos/services/assistant/test_support/scoped_assistant_browser_delegate.h
@@ -54,6 +54,7 @@
   void RequestNetworkConfig(
       mojo::PendingReceiver<network_config::mojom::CrosNetworkConfig> receiver)
       override {}
+  void OpenUrl(GURL url) override;
 #if BUILDFLAG(ENABLE_CROS_LIBASSISTANT)
   void RequestLibassistantService(
       mojo::PendingReceiver<chromeos::libassistant::mojom::LibassistantService>
diff --git a/chromeos/services/network_config/cros_network_config.cc b/chromeos/services/network_config/cros_network_config.cc
index 8005cba..d8f472f9 100644
--- a/chromeos/services/network_config/cros_network_config.cc
+++ b/chromeos/services/network_config/cros_network_config.cc
@@ -398,9 +398,11 @@
 
       const DeviceState* cellular_device =
           network_state_handler->GetDeviceState(network->device_path());
-      cellular->sim_locked = cellular_device &&
-                             IsSimPrimary(network->iccid(), cellular_device) &&
-                             cellular_device->IsSimLocked();
+      bool sim_is_primary =
+          cellular_device && IsSimPrimary(network->iccid(), cellular_device);
+      cellular->sim_lock_enabled =
+          sim_is_primary && cellular_device->sim_lock_enabled();
+      cellular->sim_locked = sim_is_primary && cellular_device->IsSimLocked();
       result->type_state =
           mojom::NetworkTypeStateProperties::NewCellular(std::move(cellular));
       break;
diff --git a/chromeos/services/network_config/cros_network_config_unittest.cc b/chromeos/services/network_config/cros_network_config_unittest.cc
index 18fa59a5..de58f49 100644
--- a/chromeos/services/network_config/cros_network_config_unittest.cc
+++ b/chromeos/services/network_config/cros_network_config_unittest.cc
@@ -842,6 +842,7 @@
   EXPECT_EQ(kCellularTestIccid, cellular->iccid);
   EXPECT_EQ(mojom::OncSource::kDevice, network->source);
   EXPECT_TRUE(cellular->sim_locked);
+  EXPECT_TRUE(cellular->sim_lock_enabled);
 
   network = GetNetworkState("vpn_l2tp_guid");
   ASSERT_TRUE(network);
diff --git a/chromeos/services/network_config/public/mojom/cros_network_config.mojom b/chromeos/services/network_config/public/mojom/cros_network_config.mojom
index db08a7d..5ab2e54 100644
--- a/chromeos/services/network_config/public/mojom/cros_network_config.mojom
+++ b/chromeos/services/network_config/public/mojom/cros_network_config.mojom
@@ -191,6 +191,8 @@
   bool roaming = false;
   // The signal strength of the cellular connection.
   int32 signal_strength;
+  // True when a SIM is present and has locking enabled.
+  bool sim_lock_enabled = false;
   // True when a SIM is present and locked.
   bool sim_locked = false;
 };
diff --git a/components/android_autofill/browser/android_autofill_manager.cc b/components/android_autofill/browser/android_autofill_manager.cc
index f081cb4..aba3742c 100644
--- a/components/android_autofill/browser/android_autofill_manager.cc
+++ b/components/android_autofill/browser/android_autofill_manager.cc
@@ -147,7 +147,6 @@
 }
 
 void AndroidAutofillManager::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
     const std::vector<FormStructure*>& forms) {
   has_server_prediction_ = true;
   if (auto* provider = GetAutofillProvider())
diff --git a/components/android_autofill/browser/android_autofill_manager.h b/components/android_autofill/browser/android_autofill_manager.h
index b3bbf22..d99d684 100644
--- a/components/android_autofill/browser/android_autofill_manager.h
+++ b/components/android_autofill/browser/android_autofill_manager.h
@@ -124,7 +124,6 @@
       const DenseSet<FormType>& form_types) override {}
 
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
       const std::vector<FormStructure*>& forms) override;
 
   void OnServerRequestError(FormSignature form_signature,
diff --git a/components/android_autofill/browser/autofill_provider_unittest.cc b/components/android_autofill/browser/autofill_provider_unittest.cc
index 572a8b60..f4ae486 100644
--- a/components/android_autofill/browser/autofill_provider_unittest.cc
+++ b/components/android_autofill/browser/autofill_provider_unittest.cc
@@ -20,7 +20,7 @@
   }
 
   void SimulatePropagateAutofillPredictions() {
-    PropagateAutofillPredictions(nullptr, std::vector<FormStructure*>());
+    PropagateAutofillPredictions({});
   }
 
   void SimulateOnAskForValuesToFillImpl() {
diff --git a/components/autofill/OWNERS b/components/autofill/OWNERS
index 437fe539..e256481a 100644
--- a/components/autofill/OWNERS
+++ b/components/autofill/OWNERS
@@ -1,11 +1,5 @@
 battre@chromium.org
 cfroussios@chromium.org
-dvadym@chromium.org
-estade@chromium.org
-ftirelo@chromium.org
 koerber@google.com
 schwering@google.com
 kolos@chromium.org
-mahmadi@chromium.org
-sebsg@chromium.org
-mamir@chromium.org
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc
index 9dfd361..7e13122 100644
--- a/components/autofill/content/browser/content_autofill_driver.cc
+++ b/components/autofill/content/browser/content_autofill_driver.cc
@@ -167,11 +167,6 @@
   GetAutofillAgent()->FillOrPreviewForm(query_id, data, action);
 }
 
-void ContentAutofillDriver::PropagateAutofillPredictions(
-    const std::vector<FormStructure*>& forms) {
-  autofill_manager_->PropagateAutofillPredictions(render_frame_host_, forms);
-}
-
 void ContentAutofillDriver::HandleParsedForms(
     const std::vector<const FormData*>& forms) {
   // No op.
diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h
index bd0c63e..03159d93 100644
--- a/components/autofill/content/browser/content_autofill_driver.h
+++ b/components/autofill/content/browser/content_autofill_driver.h
@@ -141,8 +141,6 @@
   bool RendererIsAvailable() override;
   webauthn::InternalAuthenticator* GetOrCreateCreditCardInternalAuthenticator()
       override;
-  void PropagateAutofillPredictions(
-      const std::vector<FormStructure*>& forms) override;
   void HandleParsedForms(const std::vector<const FormData*>& forms) override;
   void PopupHidden() override;
   net::IsolationInfo IsolationInfo() override;
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index d26d532..58dbf44 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -1805,53 +1805,28 @@
 bool IsSomeControlElementVisible(
     blink::WebLocalFrame* frame,
     const std::set<FieldRendererId>& control_elements) {
-  SCOPED_UMA_HISTOGRAM_TIMER_MICROS(
-      "Autofill.IsSomeControlElementVisibleDuration");
-
   WebDocument doc = frame->GetDocument();
   if (doc.IsNull())
     return false;
 
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillUseUnassociatedListedElements)) {
-    // Returns true iff at least one element from |fields| is visible and there
-    // exists an element in |control_elements| with the same field renderer id.
-    // The average case time complexity is O(N log M), where N is the number of
-    // elements in |fields| and M is the number of elements in
-    // |control_elements|.
-    auto ContainsVisibleField =
-        [&](const WebVector<WebFormControlElement>& fields) {
-          return base::ranges::any_of(
-              fields, [&](const WebFormControlElement& field) {
-                return IsWebElementVisible(field) &&
-                       base::Contains(control_elements,
-                                      GetFieldRendererId(field));
-              });
-        };
+  // Returns true iff at least one element from |fields| is visible and there
+  // exists an element in |control_elements| with the same field renderer id.
+  // The average case time complexity is O(N log M), where N is the number of
+  // elements in |fields| and M is the number of elements in
+  // |control_elements|.
+  auto ContainsVisibleField =
+      [&](const WebVector<WebFormControlElement>& fields) {
+        return base::ranges::any_of(
+            fields, [&](const WebFormControlElement& field) {
+              return IsWebElementVisible(field) &&
+                     base::Contains(control_elements,
+                                    GetFieldRendererId(field));
+            });
+      };
 
-    return base::ranges::any_of(doc.Forms(), ContainsVisibleField,
-                                &WebFormElement::GetFormControlElements) ||
-           ContainsVisibleField(doc.UnassociatedFormControls());
-  } else {
-    // This is basically a set intersection of |control_elements| and the form
-    // controls on the website.
-    // Iterating over all form controls on the website and checking their
-    // existence in control_elements makes this O(|DOM| + N log M), where N is
-    // the number of form controls on the website and M the number of elements
-    // in |control_elements|.
-    WebElementCollection elements = doc.All();
-
-    for (WebElement element = elements.FirstItem(); !element.IsNull();
-         element = elements.NextItem()) {
-      if (!element.IsFormControlElement() || !IsWebElementVisible(element))
-        continue;
-      WebFormControlElement control = element.To<WebFormControlElement>();
-      FieldRendererId field_renderer_id(control.UniqueRendererFormControlId());
-      if (control_elements.find(field_renderer_id) != control_elements.end())
-        return true;
-    }
-    return false;
-  }
+  return base::ranges::any_of(doc.Forms(), ContainsVisibleField,
+                              &WebFormElement::GetFormControlElements) ||
+         ContainsVisibleField(doc.UnassociatedFormControls());
 }
 
 GURL GetCanonicalActionForForm(const WebFormElement& form) {
@@ -2174,8 +2149,7 @@
       extract_mask, form, field);
 }
 
-std::vector<WebFormControlElement>
-GetUnownedFormFieldElementsWithListedElements(
+std::vector<WebFormControlElement> GetUnownedFormFieldElements(
     const WebDocument& document,
     std::vector<WebElement>* fieldsets) {
   std::vector<WebFormControlElement> unowned_form_field_elements =
@@ -2192,33 +2166,6 @@
   return unowned_form_field_elements;
 }
 
-std::vector<WebFormControlElement> GetUnownedFormFieldElements(
-    const WebDocument& document,
-    std::vector<WebElement>* fieldsets) {
-  SCOPED_UMA_HISTOGRAM_TIMER_MICROS("Autofill.GetUnownedFormFieldsDuration");
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillUseUnassociatedListedElements)) {
-    return GetUnownedFormFieldElementsWithListedElements(document, fieldsets);
-  }
-  std::vector<WebFormControlElement> unowned_fieldset_children;
-  const WebElementCollection& elements = document.All();
-  for (WebElement element = elements.FirstItem(); !element.IsNull();
-       element = elements.NextItem()) {
-    if (element.IsFormControlElement()) {
-      WebFormControlElement control = element.To<WebFormControlElement>();
-      if (control.Form().IsNull())
-        unowned_fieldset_children.push_back(control);
-    }
-
-    if (fieldsets && element.HasHTMLTagName("fieldset") &&
-        !IsElementInsideFormOrFieldSet(element,
-                                       /*consider_fieldset_tags=*/true)) {
-      fieldsets->push_back(element);
-    }
-  }
-  return unowned_fieldset_children;
-}
-
 std::vector<WebFormControlElement> GetUnownedAutofillableFormFieldElements(
     const WebDocument& document,
     std::vector<WebElement>* fieldsets) {
@@ -2505,95 +2452,57 @@
     const WebDocument& doc,
     FieldRendererId queried_form_control,
     absl::optional<FormRendererId> form_to_be_searched /*= absl::nullopt*/) {
-  SCOPED_UMA_HISTOGRAM_TIMER_MICROS(
-      "Autofill.FindFormControlElementByUniqueRendererIdDuration");
+  auto FindField = [&](const WebVector<WebFormControlElement>& fields) {
+    auto it =
+        base::ranges::find(fields, queried_form_control, GetFieldRendererId);
+    return it != fields.end() ? *it : WebFormControlElement();
+  };
 
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillUseUnassociatedListedElements)) {
-    auto FindField = [&](const WebVector<WebFormControlElement>& fields) {
-      auto it =
-          base::ranges::find(fields, queried_form_control, GetFieldRendererId);
-      return it != fields.end() ? *it : WebFormControlElement();
-    };
+  auto IsCandidate =
+      [&form_to_be_searched](const FormRendererId& expected_form_renderer_id) {
+        return !form_to_be_searched.has_value() ||
+               form_to_be_searched.value() == expected_form_renderer_id;
+      };
 
-    auto IsCandidate = [&form_to_be_searched](
-                           const FormRendererId& expected_form_renderer_id) {
-      return !form_to_be_searched.has_value() ||
-             form_to_be_searched.value() == expected_form_renderer_id;
-    };
-
-    if (IsCandidate(FormRendererId())) {
-      // Search the unowned form.
-      WebFormControlElement e = FindField(doc.UnassociatedFormControls());
-      if (form_to_be_searched == FormRendererId() || !e.IsNull())
-        return e;
-    }
-    for (const WebFormElement& form : doc.Forms()) {
-      // If the |form_to_be_searched| is specified, skip this form if it is not
-      // the right one.
-      if (!IsCandidate(GetFormRendererId(form))) {
-        continue;
-      }
-      WebFormControlElement e = FindField(form.GetFormControlElements());
-      if (form_to_be_searched == GetFormRendererId(form) || !e.IsNull())
-        return e;
-    }
-    return WebFormControlElement();
-  } else {
-    WebElementCollection elements = doc.All();
-
-    for (WebElement element = elements.FirstItem(); !element.IsNull();
-         element = elements.NextItem()) {
-      if (!element.IsFormControlElement())
-        continue;
-      WebFormControlElement control = element.To<WebFormControlElement>();
-      if (queried_form_control == GetFieldRendererId(control))
-        return control;
-    }
-    return WebFormControlElement();
+  if (IsCandidate(FormRendererId())) {
+    // Search the unowned form.
+    WebFormControlElement e = FindField(doc.UnassociatedFormControls());
+    if (form_to_be_searched == FormRendererId() || !e.IsNull())
+      return e;
   }
+  for (const WebFormElement& form : doc.Forms()) {
+    // If the |form_to_be_searched| is specified, skip this form if it is not
+    // the right one.
+    if (!IsCandidate(GetFormRendererId(form))) {
+      continue;
+    }
+    WebFormControlElement e = FindField(form.GetFormControlElements());
+    if (form_to_be_searched == GetFormRendererId(form) || !e.IsNull())
+      return e;
+  }
+  return WebFormControlElement();
 }
 
 std::vector<WebFormControlElement> FindFormControlElementsByUniqueRendererId(
     const WebDocument& doc,
     const std::vector<FieldRendererId>& queried_form_controls) {
-  SCOPED_UMA_HISTOGRAM_TIMER_MICROS(
-      "Autofill.FindFormControlElementsByUniqueRendererIdDuration");
-
   std::vector<WebFormControlElement> result(queried_form_controls.size());
   auto renderer_id_to_index_map = BuildRendererIdToIndex(queried_form_controls);
 
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillUseUnassociatedListedElements)) {
-    auto AddToResultIfQueried = [&](const WebFormControlElement& field) {
-      auto it = renderer_id_to_index_map.find(GetFieldRendererId(field));
-      if (it != renderer_id_to_index_map.end())
-        result[it->second] = field;
-    };
+  auto AddToResultIfQueried = [&](const WebFormControlElement& field) {
+    auto it = renderer_id_to_index_map.find(GetFieldRendererId(field));
+    if (it != renderer_id_to_index_map.end())
+      result[it->second] = field;
+  };
 
-    for (const auto& form : doc.Forms()) {
-      for (const auto& field : form.GetFormControlElements())
-        AddToResultIfQueried(field);
-    }
-    for (const auto& field : doc.UnassociatedFormControls()) {
+  for (const auto& form : doc.Forms()) {
+    for (const auto& field : form.GetFormControlElements())
       AddToResultIfQueried(field);
-    }
-    return result;
-  } else {
-    WebElementCollection elements = doc.All();
-
-    for (WebElement element = elements.FirstItem(); !element.IsNull();
-         element = elements.NextItem()) {
-      if (!element.IsFormControlElement())
-        continue;
-      WebFormControlElement control = element.To<WebFormControlElement>();
-      auto it = renderer_id_to_index_map.find(GetFieldRendererId(control));
-      if (it == renderer_id_to_index_map.end())
-        continue;
-      result[it->second] = control;
-    }
-    return result;
   }
+  for (const auto& field : doc.UnassociatedFormControls()) {
+    AddToResultIfQueried(field);
+  }
+  return result;
 }
 
 std::vector<WebFormControlElement> FindFormControlElementsByUniqueRendererId(
diff --git a/components/autofill/content/renderer/form_autofill_util_browsertest.cc b/components/autofill/content/renderer/form_autofill_util_browsertest.cc
index 74543ad1a..0b51352 100644
--- a/components/autofill/content/renderer/form_autofill_util_browsertest.cc
+++ b/components/autofill/content/renderer/form_autofill_util_browsertest.cc
@@ -549,26 +549,6 @@
   EXPECT_TRUE(FindFormByUniqueRendererId(doc, non_existing_id).IsNull());
 }
 
-// Tests FindFormControlElementByUniqueRendererId().
-// TODO(crbug/1201875): Delete once
-// `features::kAutofillUseUnassociatedListedElements` is enabled.
-TEST_F(FormAutofillUtilsTest,
-       FindFormControlElementByUniqueRendererId_WithoutFeature) {
-  LoadHTML(
-      "<body><form id='form1'><input id='i1'></form><input id='i2'></body>");
-  WebDocument doc = GetMainFrame()->GetDocument();
-  auto input1 = GetFormControlElementById(doc, "i1");
-  auto input2 = GetFormControlElementById(doc, "i2");
-  FieldRendererId non_existing_id(input2.UniqueRendererFormControlId() + 1000);
-
-  EXPECT_EQ(input1, FindFormControlElementByUniqueRendererId(
-                        doc, GetFieldRendererId(input1)));
-  EXPECT_EQ(input2, FindFormControlElementByUniqueRendererId(
-                        doc, GetFieldRendererId(input2)));
-  EXPECT_TRUE(
-      FindFormControlElementByUniqueRendererId(doc, non_existing_id).IsNull());
-}
-
 // Used in ParameterizedFindFormControlByRendererIdTest.
 struct FindFormControlTestParam {
   std::string queried_field;
@@ -576,20 +556,10 @@
   bool expectation;
 };
 
-// Tests FindFormControlElementByUniqueRendererId() with
-// `features::kAutofillUseUnassociatedListedElements` enabled.
+// Tests FindFormControlElementByUniqueRendererId().
 class ParameterizedFindFormControlByRendererIdTest
     : public FormAutofillUtilsTest,
-      public testing::WithParamInterface<FindFormControlTestParam> {
- public:
-  ParameterizedFindFormControlByRendererIdTest() {
-    scoped_features_.InitAndEnableFeature(
-        features::kAutofillUseUnassociatedListedElements);
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_features_;
-};
+      public testing::WithParamInterface<FindFormControlTestParam> {};
 
 TEST_P(ParameterizedFindFormControlByRendererIdTest,
        FindFormControlElementByUniqueRendererId) {
@@ -1215,29 +1185,10 @@
   ~FieldFramesTest() override = default;
 };
 
-// Test getting the unowned form control elements from the WebDocument with the
-// old or the new version of GetUnownedFormFieldElements().
-// TODO(crbug.com/1201875): Remove when the
-// kAutofillUseUnassociatedListedElements feature is deleted.
-class FormAutofillUtilsTestUnownedFormFields
-    : public FormAutofillUtilsTest,
-      public testing::WithParamInterface<bool> {
- public:
-  FormAutofillUtilsTestUnownedFormFields() {
-    bool use_new_get_unowned_form_field_elements = GetParam();
-    scoped_features_.InitWithFeatureState(
-        features::kAutofillUseUnassociatedListedElements,
-        use_new_get_unowned_form_field_elements);
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_features_;
-};
-
 // Check if the unowned form control elements are properly extracted.
 // Form control elements are button, fieldset, input, textarea, output and
 // select elements.
-TEST_P(FormAutofillUtilsTestUnownedFormFields, GetUnownedFormFieldElements) {
+TEST_F(FormAutofillUtilsTest, GetUnownedFormFieldElements) {
   LoadHTML(R"(
     <button id='unowned_button'>Unowned button</button>
     <fieldset id='unowned_fieldset'>
@@ -1284,10 +1235,6 @@
               ElementsAre(GetFormControlElementById(doc, "unowned_fieldset")));
 }
 
-INSTANTIATE_TEST_SUITE_P(FormAutofillUtilsTest,
-                         FormAutofillUtilsTestUnownedFormFields,
-                         testing::Bool());
-
 // Tests that FormData::fields and FormData::child_frames are extracted fully
 // and in the correct relative order.
 TEST_P(FieldFramesTest, ExtractFieldsAndFrames) {
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index a8535c03..111e1a23 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -304,36 +304,17 @@
 // Instead, we can iterate through the fields of the forms and the unowned
 // fields, both of which are cached in the Document.
 bool HasPasswordField(const WebLocalFrame& frame) {
-  SCOPED_UMA_HISTOGRAM_TIMER_MICROS("Autofill.HasPasswordFieldDuration");
+  static base::NoDestructor<WebString> kPassword("password");
 
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillUseUnassociatedListedElements)) {
-    static base::NoDestructor<WebString> kPassword("password");
+  auto ContainsPasswordField = [&](const auto& fields) {
+    return base::Contains(fields, *kPassword,
+                          &WebFormControlElement::FormControlTypeForAutofill);
+  };
 
-    auto ContainsPasswordField = [&](const auto& fields) {
-      return base::Contains(fields, *kPassword,
-                            &WebFormControlElement::FormControlTypeForAutofill);
-    };
-
-    WebDocument doc = frame.GetDocument();
-    return base::ranges::any_of(doc.Forms(), ContainsPasswordField,
-                                &WebFormElement::GetFormControlElements) ||
-           ContainsPasswordField(doc.UnassociatedFormControls());
-  } else {
-    static base::NoDestructor<WebString> kPassword("password");
-
-    const WebElementCollection elements = frame.GetDocument().All();
-    for (WebElement element = elements.FirstItem(); !element.IsNull();
-         element = elements.NextItem()) {
-      if (element.IsFormControlElement()) {
-        const WebFormControlElement& control =
-            element.To<WebFormControlElement>();
-        if (control.FormControlTypeForAutofill() == *kPassword)
-          return true;
-      }
-    }
-    return false;
-  }
+  WebDocument doc = frame.GetDocument();
+  return base::ranges::any_of(doc.Forms(), ContainsPasswordField,
+                              &WebFormElement::GetFormControlElements) ||
+         ContainsPasswordField(doc.UnassociatedFormControls());
 }
 
 // Returns the closest visible autocompletable non-password text element
diff --git a/components/autofill/core/browser/autofill_client.h b/components/autofill/core/browser/autofill_client.h
index d0c918d..b71fed7 100644
--- a/components/autofill/core/browser/autofill_client.h
+++ b/components/autofill/core/browser/autofill_client.h
@@ -59,6 +59,7 @@
 
 class AddressNormalizer;
 class AutofillAblationStudy;
+class AutofillDriver;
 struct AutofillOfferData;
 class AutofillProfile;
 class AutocompleteHistoryManager;
@@ -654,7 +655,7 @@
   // Pass the form structures to the password manager to choose correct username
   // and to the password generation manager to detect account creation forms.
   virtual void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
+      AutofillDriver* driver,
       const std::vector<FormStructure*>& forms) = 0;
 
   // Inform the client that the field has been filled.
diff --git a/components/autofill/core/browser/autofill_driver.h b/components/autofill/core/browser/autofill_driver.h
index 16fa559..59815c1 100644
--- a/components/autofill/core/browser/autofill_driver.h
+++ b/components/autofill/core/browser/autofill_driver.h
@@ -29,12 +29,36 @@
 
 class FormStructure;
 
-// Interface that allows Autofill core code to interact with its driver (i.e.,
-// obtain information from it and give information to it). A concrete
-// implementation must be provided by the driver.
+// AutofillDriver is Autofill's lowest-level abstraction of a frame that is
+// shared among all platforms.
+//
+// Most notably, it is a gateway for all communication from the browser code to
+// the DOM, or more precisely, to the AutofillAgent (which are different classes
+// of the same name in non-iOS vs iOS).
+//
+// The reverse communication, from the AutofillAgent to the browser code, goes
+// through mojom::AutofillDriver on non-iOS, and directly to AutofillManager on
+// iOS.
+//
+// An AutofillDriver corresponds to a frame, rather than a document, in the
+// sense that it may survive navigations.
+//
+// AutofillDriver has two implementations:
+// - AutofillDriverIOS for iOS,
+// - ContentAutofillDriver for all other platforms.
+//
+// An AutofillDriver's lifetime should be contained by the associated frame.
+//
+// AutofillDriverIOS is co-owned by AutofillDriverIOSWebFrame, which itself is
+// owned by the WebFrame, and the iOS-specific AutofillAgent, which extends the
+// driver's lifetime beyond the WebFrame's (crbug.com/892612).
+//
+// ContentAutofillDriver is owned by ContentAutofillDriverFactory, which ensures
+// that the associated RenderFrameHost's lifetime contains the driver's
+// lifetime.
 class AutofillDriver {
  public:
-  virtual ~AutofillDriver() {}
+  virtual ~AutofillDriver() = default;
 
   // Returns whether the user is currently operating in an incognito context.
   virtual bool IsIncognito() const = 0;
@@ -92,11 +116,6 @@
       const url::Origin& triggered_origin,
       const base::flat_map<FieldGlobalId, ServerFieldType>& field_type_map) = 0;
 
-  // Pass the form structures to the password manager to choose correct username
-  // and to the password generation manager to detect account creation forms.
-  virtual void PropagateAutofillPredictions(
-      const std::vector<FormStructure*>& forms) = 0;
-
   // Forwards parsed |forms| to the embedder.
   virtual void HandleParsedForms(const std::vector<const FormData*>& forms) = 0;
 
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 74d9c2ac..ae8a55d4 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -491,7 +491,7 @@
 
   // Forward form structures to the password generation manager to detect
   // account creation forms.
-  driver()->PropagateAutofillPredictions(queried_forms);
+  PropagateAutofillPredictions(queried_forms);
 }
 
 void AutofillManager::OnServerRequestError(
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h
index e38d548a..539ec5e 100644
--- a/components/autofill/core/browser/autofill_manager.h
+++ b/components/autofill/core/browser/autofill_manager.h
@@ -44,6 +44,12 @@
 
 // This class defines the interface should be implemented by autofill
 // implementation in browser side to interact with AutofillDriver.
+//
+// AutofillManager has two implementations:
+// - AndroidAutofillManager for WebView and WebLayer,
+// - BrowserAutofillManager for Chrome.
+//
+// It is owned by the AutofillDriver.
 class AutofillManager
     : public AutofillDownloadManager::Observer,
       public translate::TranslateDriver::LanguageDetectionObserver {
@@ -175,7 +181,6 @@
   // Invoked when the field type predictions are downloaded from the autofill
   // server.
   virtual void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
       const std::vector<FormStructure*>& forms) = 0;
 
   virtual void ReportAutofillWebOTPMetrics(bool used_web_otp) = 0;
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index 553cd406..79e5f72 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -91,8 +91,7 @@
               (override));
   MOCK_METHOD(void,
               PropagateAutofillPredictions,
-              (content::RenderFrameHost * rfh,
-               const std::vector<FormStructure*>& forms),
+              (const std::vector<FormStructure*>& forms),
               (override));
   MOCK_METHOD(void,
               OnFormSubmittedImpl,
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc
index fe27d71..d08a5ab 100644
--- a/components/autofill/core/browser/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -1475,9 +1475,8 @@
 }
 
 void BrowserAutofillManager::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
     const std::vector<FormStructure*>& forms) {
-  client()->PropagateAutofillPredictions(rfh, forms);
+  client()->PropagateAutofillPredictions(driver(), forms);
 }
 
 void BrowserAutofillManager::OnCreditCardFetched(CreditCardFetchResult result,
diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h
index 0019c7e..13ecc92 100644
--- a/components/autofill/core/browser/browser_autofill_manager.h
+++ b/components/autofill/core/browser/browser_autofill_manager.h
@@ -248,7 +248,6 @@
   void OnHidePopup() override;
   void SelectFieldOptionsDidChange(const FormData& form) override;
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
       const std::vector<FormStructure*>& forms) override;
   void Reset() override;
 
diff --git a/components/autofill/core/browser/test_autofill_client.cc b/components/autofill/core/browser/test_autofill_client.cc
index 45299b6e..93ffece 100644
--- a/components/autofill/core/browser/test_autofill_client.cc
+++ b/components/autofill/core/browser/test_autofill_client.cc
@@ -287,7 +287,7 @@
 }
 
 void TestAutofillClient::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
+    AutofillDriver* driver,
     const std::vector<FormStructure*>& forms) {}
 
 void TestAutofillClient::DidFillOrPreviewField(
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h
index c8c125e5..277c90f8 100644
--- a/components/autofill/core/browser/test_autofill_client.h
+++ b/components/autofill/core/browser/test_autofill_client.h
@@ -156,7 +156,7 @@
   bool IsAutocompleteEnabled() override;
   bool IsPasswordManagerEnabled() override;
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
+      AutofillDriver* driver,
       const std::vector<FormStructure*>& forms) override;
   void DidFillOrPreviewField(const std::u16string& autofilled_value,
                              const std::u16string& profile_full_name) override;
diff --git a/components/autofill/core/browser/test_autofill_driver.cc b/components/autofill/core/browser/test_autofill_driver.cc
index a9b8f38..80b5a85c 100644
--- a/components/autofill/core/browser/test_autofill_driver.cc
+++ b/components/autofill/core/browser/test_autofill_driver.cc
@@ -80,10 +80,6 @@
   return result;
 }
 
-void TestAutofillDriver::PropagateAutofillPredictions(
-    const std::vector<FormStructure*>& forms) {
-}
-
 void TestAutofillDriver::HandleParsedForms(
     const std::vector<const FormData*>& forms) {}
 
diff --git a/components/autofill/core/browser/test_autofill_driver.h b/components/autofill/core/browser/test_autofill_driver.h
index e2bf277..e69366b 100644
--- a/components/autofill/core/browser/test_autofill_driver.h
+++ b/components/autofill/core/browser/test_autofill_driver.h
@@ -63,8 +63,6 @@
       const url::Origin& triggered_origin,
       const base::flat_map<FieldGlobalId, ServerFieldType>& field_type_map)
       override;
-  void PropagateAutofillPredictions(
-      const std::vector<FormStructure*>& forms) override;
   void HandleParsedForms(const std::vector<const FormData*>& forms) override;
   void SendAutofillTypePredictionsToRenderer(
       const std::vector<FormStructure*>& forms) override;
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
index d0a1d46..cb8d176 100644
--- a/components/autofill/core/common/autofill_features.cc
+++ b/components/autofill/core/common/autofill_features.cc
@@ -502,13 +502,6 @@
 const base::Feature kAutofillUseNewSectioningMethod{
     "AutofillUseNewSectioningMethod", base::FEATURE_DISABLED_BY_DEFAULT};
 
-// When enabled, to get the unowned control elements we call
-// Document::UnassociatedListedElements(). This way we can reduce the number of
-// DOM traversals.
-// TODO(crbug/1201875): Remove once experiment is finished.
-const base::Feature kAutofillUseUnassociatedListedElements{
-    "AutofillUseUnassociatedListedElements", base::FEATURE_ENABLED_BY_DEFAULT};
-
 // Introduces various visual improvements of the Autofill suggestion UI that is
 // also used for the password manager.
 const base::Feature kAutofillVisualImprovementsForSuggestionUi{
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h
index aba2774..53a30ee 100644
--- a/components/autofill/core/common/autofill_features.h
+++ b/components/autofill/core/common/autofill_features.h
@@ -182,8 +182,6 @@
 COMPONENT_EXPORT(AUTOFILL)
 extern const base::Feature kAutofillUseConsistentPopupSettingsIcons;
 COMPONENT_EXPORT(AUTOFILL)
-extern const base::Feature kAutofillUseUnassociatedListedElements;
-COMPONENT_EXPORT(AUTOFILL)
 extern const base::Feature kAutofillVisualImprovementsForSuggestionUi;
 
 COMPONENT_EXPORT(AUTOFILL)
diff --git a/components/autofill/ios/OWNERS b/components/autofill/ios/OWNERS
index 3ebff38d..1f00f79 100644
--- a/components/autofill/ios/OWNERS
+++ b/components/autofill/ios/OWNERS
@@ -1 +1,2 @@
 olivierrobin@chromium.org
+sebsg@chromium.org
diff --git a/components/autofill/ios/browser/autofill_driver_ios.h b/components/autofill/ios/browser/autofill_driver_ios.h
index 90fb7812..1b183a7 100644
--- a/components/autofill/ios/browser/autofill_driver_ios.h
+++ b/components/autofill/ios/browser/autofill_driver_ios.h
@@ -54,8 +54,6 @@
       const url::Origin& triggered_origin,
       const base::flat_map<FieldGlobalId, ServerFieldType>& field_type_map)
       override;
-  void PropagateAutofillPredictions(
-      const std::vector<autofill::FormStructure*>& forms) override;
   void HandleParsedForms(const std::vector<const FormData*>& forms) override;
   void SendAutofillTypePredictionsToRenderer(
       const std::vector<FormStructure*>& forms) override;
diff --git a/components/autofill/ios/browser/autofill_driver_ios.mm b/components/autofill/ios/browser/autofill_driver_ios.mm
index 0a7ed36..853cc79f 100644
--- a/components/autofill/ios/browser/autofill_driver_ios.mm
+++ b/components/autofill/ios/browser/autofill_driver_ios.mm
@@ -111,12 +111,6 @@
   return safe_fields;
 }
 
-void AutofillDriverIOS::PropagateAutofillPredictions(
-    const std::vector<autofill::FormStructure*>& forms) {
-  browser_autofill_manager_.client()->PropagateAutofillPredictions(nullptr,
-                                                                   forms);
-}
-
 void AutofillDriverIOS::HandleParsedForms(
     const std::vector<const FormData*>& forms) {
   const std::map<FormGlobalId, std::unique_ptr<FormStructure>>& map =
diff --git a/components/browser_ui/styles/android/BUILD.gn b/components/browser_ui/styles/android/BUILD.gn
index 4c0f6bb..00e1552 100644
--- a/components/browser_ui/styles/android/BUILD.gn
+++ b/components/browser_ui/styles/android/BUILD.gn
@@ -43,7 +43,7 @@
     "java/res/color/default_text_color_on_accent1_list.xml",
     "java/res/color/default_text_color_secondary_list.xml",
     "java/res/color/filled_button_bg_dynamic_list.xml",
-    "java/res/color/icon_animated_faded_color.xml",
+    "java/res/color/icon_animated_faded_color_list.xml",
     "java/res/color/new_tab_button_pressed_tint.xml",
     "java/res/color/new_tab_button_tint.xml",
     "java/res/color/progress_bar_bg_color.xml",
diff --git a/components/browser_ui/styles/android/java/res/color/icon_animated_faded_color.xml b/components/browser_ui/styles/android/java/res/color/icon_animated_faded_color_list.xml
similarity index 100%
rename from components/browser_ui/styles/android/java/res/color/icon_animated_faded_color.xml
rename to components/browser_ui/styles/android/java/res/color/icon_animated_faded_color_list.xml
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index ef3da3a..9eb3ea9 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "9.10",
-  "log_list_timestamp": "2022-05-12T12:56:00Z",
+  "version": "9.11",
+  "log_list_timestamp": "2022-05-13T12:55:36Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/content_settings/core/browser/website_settings_registry.cc b/components/content_settings/core/browser/website_settings_registry.cc
index 0c29eed..0b9a5d9 100644
--- a/components/content_settings/core/browser/website_settings_registry.cc
+++ b/components/content_settings/core/browser/website_settings_registry.cc
@@ -250,6 +250,12 @@
            WebsiteSettingsInfo::UNSYNCABLE, WebsiteSettingsInfo::NOT_LOSSY,
            WebsiteSettingsInfo::SINGLE_ORIGIN_ONLY_SCOPE, ALL_PLATFORMS,
            WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO);
+  Register(ContentSettingsType::NOTIFICATION_INTERACTIONS,
+           "notification-interactions", base::Value(),
+           WebsiteSettingsInfo::UNSYNCABLE, WebsiteSettingsInfo::LOSSY,
+           WebsiteSettingsInfo::SINGLE_ORIGIN_ONLY_SCOPE,
+           DESKTOP | PLATFORM_ANDROID,
+           WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO);
 }
 
 }  // namespace content_settings
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
index d8f8cfd5..b86195075 100644
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -103,6 +103,7 @@
     {ContentSettingsType::AUTO_DARK_WEB_CONTENT, 83},
     {ContentSettingsType::REQUEST_DESKTOP_SITE, 84},
     {ContentSettingsType::FEDERATED_IDENTITY_API, 85},
+    {ContentSettingsType::NOTIFICATION_INTERACTIONS, 86},
 };
 
 void FilterRulesForType(ContentSettingsForOneType& settings,
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h
index ffa4d1c..9c6728a 100644
--- a/components/content_settings/core/common/content_settings_types.h
+++ b/components/content_settings/core/common/content_settings_types.h
@@ -281,6 +281,12 @@
   // the browser FedCM API.
   FEDERATED_IDENTITY_API,
 
+  // Stores notification interactions per origin for the past 90 days.
+  // Interactions per origin are pre-aggregated over seven-day windows: A
+  // notification interaction or display is assigned to the last Monday midnight
+  // in local time.
+  NOTIFICATION_INTERACTIONS,
+
   NUM_TYPES,
 };
 
diff --git a/components/history_clusters/core/config.cc b/components/history_clusters/core/config.cc
index a1e2d5b..9027ed8 100644
--- a/components/history_clusters/core/config.cc
+++ b/components/history_clusters/core/config.cc
@@ -77,6 +77,25 @@
       internal::kOmniboxAction, "omnibox_action_on_noisy_urls",
       omnibox_action_on_noisy_urls);
 
+  keyword_filter_on_entity_aliases = base::GetFieldTrialParamByFeatureAsBool(
+      history_clusters::features::kOnDeviceClusteringKeywordFiltering,
+      "keyword_filter_on_entity_aliases", keyword_filter_on_entity_aliases);
+
+  max_entity_aliases_in_keywords = base::GetFieldTrialParamByFeatureAsInt(
+      history_clusters::features::kOnDeviceClusteringKeywordFiltering,
+      "max_entity_aliases_in_keywords", max_entity_aliases_in_keywords);
+  if (max_entity_aliases_in_keywords <= 0) {
+    max_entity_aliases_in_keywords = SIZE_MAX;
+  }
+
+  keyword_filter_on_categories = GetFieldTrialParamByFeatureAsBool(
+      history_clusters::features::kOnDeviceClusteringKeywordFiltering,
+      "keyword_filter_on_categories", keyword_filter_on_categories);
+
+  keyword_filter_on_noisy_visits = GetFieldTrialParamByFeatureAsBool(
+      history_clusters::features::kOnDeviceClusteringKeywordFiltering,
+      "keyword_filter_on_noisy_visits", keyword_filter_on_noisy_visits);
+
   non_user_visible_debug =
       base::FeatureList::IsEnabled(internal::kNonUserVisibleDebug);
 
@@ -193,18 +212,6 @@
       "content_clustering_intersection_threshold",
       cluster_interaction_threshold);
 
-  should_include_categories_in_keywords = GetFieldTrialParamByFeatureAsBool(
-      features::kOnDeviceClustering, "include_categories_in_keywords",
-      should_include_categories_in_keywords);
-
-  should_exclude_keywords_from_noisy_visits = GetFieldTrialParamByFeatureAsBool(
-      features::kOnDeviceClustering, "exclude_keywords_from_noisy_visits",
-      should_exclude_keywords_from_noisy_visits);
-
-  clustering_tasks_batch_size = GetFieldTrialParamByFeatureAsInt(
-      features::kSplitClusteringTasksToSmallerBatches,
-      "clustering_task_batch_size", clustering_tasks_batch_size);
-
   split_clusters_at_search_visits = GetFieldTrialParamByFeatureAsBool(
       features::kOnDeviceClustering, "split_clusters_at_search_visits",
       split_clusters_at_search_visits);
diff --git a/components/history_clusters/core/config.h b/components/history_clusters/core/config.h
index e95f323c..748812f 100644
--- a/components/history_clusters/core/config.h
+++ b/components/history_clusters/core/config.h
@@ -87,6 +87,22 @@
   // visits. This does nothing if `omnibox_action_on_urls` is false.
   bool omnibox_action_on_noisy_urls = true;
 
+  // If enabled, adds the keywords of aliases for detected entity names to a
+  // cluster.
+  bool keyword_filter_on_entity_aliases = false;
+
+  // If greater than 0, the max number of aliases to include in keywords. If <=
+  // 0, all aliases will be included.
+  size_t max_entity_aliases_in_keywords = 0;
+
+  // If enabled, adds the keywords of categories for detected entities to a
+  // cluster.
+  bool keyword_filter_on_categories = true;
+
+  // If enabled, adds the keywords of detected entities from noisy visits to a
+  // cluster.
+  bool keyword_filter_on_noisy_visits = true;
+
   // Enables debug info in non-user-visible surfaces, like Chrome Inspector.
   // Does nothing if `kJourneys` is disabled.
   bool non_user_visible_debug = false;
@@ -187,13 +203,6 @@
   // use when clustering based on intersection score.
   int cluster_interaction_threshold = 2;
 
-  // Whether to include category names in the keywords for a cluster.
-  bool should_include_categories_in_keywords = true;
-
-  // Whether to exclude keywords from visits that may be considered "noisy" to
-  // the user (i.e. highly engaged, non-SRP).
-  bool should_exclude_keywords_from_noisy_visits = false;
-
   // Returns the default batch size for annotating visits when clustering.
   size_t clustering_tasks_batch_size = 250;
 
diff --git a/components/history_clusters/core/keyword_cluster_finalizer.cc b/components/history_clusters/core/keyword_cluster_finalizer.cc
index 2dbcca8..c119814 100644
--- a/components/history_clusters/core/keyword_cluster_finalizer.cc
+++ b/components/history_clusters/core/keyword_cluster_finalizer.cc
@@ -10,17 +10,20 @@
 #include "components/history_clusters/core/config.h"
 #include "components/history_clusters/core/on_device_clustering_features.h"
 #include "components/history_clusters/core/on_device_clustering_util.h"
+#include "components/optimization_guide/core/entity_metadata.h"
 
 namespace history_clusters {
 
-KeywordClusterFinalizer::KeywordClusterFinalizer() = default;
+KeywordClusterFinalizer::KeywordClusterFinalizer(
+    const base::flat_map<std::string, optimization_guide::EntityMetadata>&
+        entity_metadata_map)
+    : entity_metadata_map_(entity_metadata_map) {}
 KeywordClusterFinalizer::~KeywordClusterFinalizer() = default;
 
 void KeywordClusterFinalizer::FinalizeCluster(history::Cluster& cluster) {
   base::flat_set<std::u16string> keywords_set;
   for (const auto& visit : cluster.visits) {
-    if (GetConfig().should_exclude_keywords_from_noisy_visits &&
-        IsNoisyVisit(visit)) {
+    if (!GetConfig().keyword_filter_on_noisy_visits && IsNoisyVisit(visit)) {
       // Do not put keywords if user visits the page a lot and it's not a
       // search-like visit.
       continue;
@@ -29,8 +32,20 @@
     for (const auto& entity :
          visit.annotated_visit.content_annotations.model_annotations.entities) {
       keywords_set.insert(base::UTF8ToUTF16(entity.id));
+
+      if (GetConfig().keyword_filter_on_entity_aliases) {
+        auto it = entity_metadata_map_.find(entity.id);
+        if (it != entity_metadata_map_.end()) {
+          for (size_t i = 0; i < it->second.human_readable_aliases.size() &&
+                             i < GetConfig().max_entity_aliases_in_keywords;
+               i++) {
+            keywords_set.insert(
+                base::UTF8ToUTF16(it->second.human_readable_aliases[i]));
+          }
+        }
+      }
     }
-    if (GetConfig().should_include_categories_in_keywords) {
+    if (GetConfig().keyword_filter_on_categories) {
       for (const auto& category : visit.annotated_visit.content_annotations
                                       .model_annotations.categories) {
         keywords_set.insert(base::UTF8ToUTF16(category.id));
diff --git a/components/history_clusters/core/keyword_cluster_finalizer.h b/components/history_clusters/core/keyword_cluster_finalizer.h
index 9781abf..9fcd941 100644
--- a/components/history_clusters/core/keyword_cluster_finalizer.h
+++ b/components/history_clusters/core/keyword_cluster_finalizer.h
@@ -5,18 +5,33 @@
 #ifndef COMPONENTS_HISTORY_CLUSTERS_CORE_KEYWORD_CLUSTER_FINALIZER_H_
 #define COMPONENTS_HISTORY_CLUSTERS_CORE_KEYWORD_CLUSTER_FINALIZER_H_
 
+#include <string>
+
+#include "base/containers/flat_set.h"
 #include "components/history_clusters/core/cluster_finalizer.h"
 
+namespace optimization_guide {
+struct EntityMetadata;
+}  // namespace optimization_guide
+
 namespace history_clusters {
 
 // A cluster finalizer that determines the set of keywords for a given cluster.
 class KeywordClusterFinalizer : public ClusterFinalizer {
  public:
-  KeywordClusterFinalizer();
+  explicit KeywordClusterFinalizer(
+      const base::flat_map<std::string, optimization_guide::EntityMetadata>&
+          entity_metadata_map);
   ~KeywordClusterFinalizer() override;
 
   // ClusterFinalizer:
   void FinalizeCluster(history::Cluster& cluster) override;
+
+ private:
+  // A map from human readable entity name to the metadata associated with that
+  // entity name.
+  const base::flat_map<std::string, optimization_guide::EntityMetadata>
+      entity_metadata_map_;
 };
 
 }  // namespace history_clusters
diff --git a/components/history_clusters/core/keyword_cluster_finalizer_unittest.cc b/components/history_clusters/core/keyword_cluster_finalizer_unittest.cc
index 51779ab..27d1376 100644
--- a/components/history_clusters/core/keyword_cluster_finalizer_unittest.cc
+++ b/components/history_clusters/core/keyword_cluster_finalizer_unittest.cc
@@ -9,6 +9,7 @@
 #include "components/history_clusters/core/clustering_test_utils.h"
 #include "components/history_clusters/core/config.h"
 #include "components/history_clusters/core/on_device_clustering_features.h"
+#include "components/optimization_guide/core/entity_metadata.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -20,10 +21,17 @@
 class KeywordClusterFinalizerTest : public ::testing::Test {
  public:
   void SetUp() override {
-    cluster_finalizer_ = std::make_unique<KeywordClusterFinalizer>();
+    optimization_guide::EntityMetadata github_md;
+    github_md.human_readable_aliases = {"git hub", "github llc"};
+    base::flat_map<std::string, optimization_guide::EntityMetadata>
+        entity_metadata_map;
+    entity_metadata_map["github"] = github_md;
+    cluster_finalizer_ =
+        std::make_unique<KeywordClusterFinalizer>(entity_metadata_map);
 
-    config_.should_exclude_keywords_from_noisy_visits = true;
-    config_.should_include_categories_in_keywords = false;
+    config_.keyword_filter_on_noisy_visits = false;
+    config_.keyword_filter_on_categories = false;
+    config_.keyword_filter_on_entity_aliases = false;
     SetConfigForTesting(config_);
   }
 
@@ -73,26 +81,21 @@
               UnorderedElementsAre(u"github", u"otherentity"));
 }
 
-class KeywordClusterFinalizerIncludeAllTest : public ::testing::Test {
+class KeywordClusterFinalizerIncludeAllTest
+    : public KeywordClusterFinalizerTest {
  public:
   void SetUp() override {
-    cluster_finalizer_ = std::make_unique<KeywordClusterFinalizer>();
+    KeywordClusterFinalizerTest::SetUp();
 
-    config_.should_exclude_keywords_from_noisy_visits = false;
-    config_.should_include_categories_in_keywords = true;
+    config_.keyword_filter_on_noisy_visits = true;
+    config_.keyword_filter_on_categories = true;
+    config_.keyword_filter_on_entity_aliases = true;
+    config_.max_entity_aliases_in_keywords = 1;
     SetConfigForTesting(config_);
   }
 
-  void TearDown() override { cluster_finalizer_.reset(); }
-
-  void FinalizeCluster(history::Cluster& cluster) {
-    cluster_finalizer_->FinalizeCluster(cluster);
-  }
-
  private:
   Config config_;
-  std::unique_ptr<KeywordClusterFinalizer> cluster_finalizer_;
-  base::test::TaskEnvironment task_environment_;
 };
 
 TEST_F(KeywordClusterFinalizerIncludeAllTest,
@@ -128,7 +131,7 @@
   FinalizeCluster(cluster);
   EXPECT_THAT(cluster.keywords,
               UnorderedElementsAre(u"github", u"category", u"onlyinnoisyvisit",
-                                   u"otherentity"));
+                                   u"otherentity", u"git hub"));
 }
 
 }  // namespace
diff --git a/components/history_clusters/core/on_device_clustering_backend.cc b/components/history_clusters/core/on_device_clustering_backend.cc
index ea0a49c..4720136 100644
--- a/components/history_clusters/core/on_device_clustering_backend.cc
+++ b/components/history_clusters/core/on_device_clustering_backend.cc
@@ -188,18 +188,14 @@
   std::vector<history::ClusterVisit> cluster_visits;
   cluster_visits.reserve(annotated_visits.size());
 
-  ProcessBatchOfVisits(clustering_request_source,
-                       /*num_batches_processed_so_far=*/0,
-                       /*index_to_process=*/0, std::move(cluster_visits),
-                       completed_task, std::move(annotated_visits),
-                       entity_metadata_start, std::move(callback),
-                       entity_metadata_map);
+  ProcessVisits(clustering_request_source, std::move(cluster_visits),
+                completed_task, std::move(annotated_visits),
+                entity_metadata_start, std::move(callback),
+                entity_metadata_map);
 }
 
-void OnDeviceClusteringBackend::ProcessBatchOfVisits(
+void OnDeviceClusteringBackend::ProcessVisits(
     ClusteringRequestSource clustering_request_source,
-    size_t num_batches_processed_so_far,
-    size_t index_to_process,
     std::vector<history::ClusterVisit> cluster_visits,
     optimization_guide::BatchEntityMetadataTask* completed_task,
     std::vector<history::AnnotatedVisit> annotated_visits,
@@ -211,31 +207,9 @@
 
   base::ElapsedThreadTimer process_batch_timer;
 
-  // Entries in |annotated_visits| that have index greater than or equal to
-  // |index_stop_batch_processing| should not be processed in this task loop.
-  size_t index_stop_batch_processing =
-      index_to_process + GetConfig().clustering_tasks_batch_size;
-
-  // Process all entries in one go in certain cases. e.g., if
-  // |clustering_request_source| is user blocking.
-  if (!base::FeatureList::IsEnabled(
-          features::kSplitClusteringTasksToSmallerBatches) ||
-      clustering_request_source == ClusteringRequestSource::kJourneysPage ||
-      annotated_visits.size() <= 1) {
-    index_stop_batch_processing = annotated_visits.size();
-  }
-
-  // Avoid overflows.
-  index_stop_batch_processing =
-      std::min(index_stop_batch_processing, annotated_visits.size());
-
-  base::UmaHistogramCounts1000(
-      "History.Clusters.Backend.ProcessBatchOfVisits.BatchSize",
-      index_stop_batch_processing - index_to_process);
-
-  while (index_to_process < index_stop_batch_processing) {
-    const auto& visit = annotated_visits[index_to_process];
-    ++index_to_process;
+  base::flat_map<std::string, optimization_guide::EntityMetadata>
+      human_readable_entity_name_to_metadata_map;
+  for (const auto& visit : annotated_visits) {
     history::ClusterVisit cluster_visit;
     cluster_visit.annotated_visit = visit;
     const std::string& visit_host = visit.url_row.url().host();
@@ -302,6 +276,8 @@
         rewritten_entity.id = entity_metadata_it->second.human_readable_name;
         cluster_visit.annotated_visit.content_annotations.model_annotations
             .entities.push_back(rewritten_entity);
+        human_readable_entity_name_to_metadata_map[rewritten_entity.id] =
+            entity_metadata_it->second;
 
         for (const auto& category :
              entity_metadata_it->second.human_readable_categories) {
@@ -329,42 +305,29 @@
     cluster_visits.push_back(cluster_visit);
   }
 
-  if (index_to_process >= annotated_visits.size()) {
-    RecordBatchUpdateProcessingTime(process_batch_timer.Elapsed());
-    OnAllVisitsFinishedProcessing(
-        clustering_request_source, num_batches_processed_so_far + 1,
-        completed_task, std::move(cluster_visits), std::move(callback));
-    return;
-  }
-
   RecordBatchUpdateProcessingTime(process_batch_timer.Elapsed());
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE,
-      base::BindOnce(&OnDeviceClusteringBackend::ProcessBatchOfVisits,
-                     weak_ptr_factory_.GetWeakPtr(), clustering_request_source,
-                     num_batches_processed_so_far + 1, index_to_process,
-                     std::move(cluster_visits), completed_task,
-                     std::move(annotated_visits), entity_metadata_start,
-                     std::move(callback), entity_metadata_map));
+  OnAllVisitsFinishedProcessing(
+      clustering_request_source, completed_task, std::move(cluster_visits),
+      std::move(human_readable_entity_name_to_metadata_map),
+      std::move(callback));
 }
 
 void OnDeviceClusteringBackend::OnAllVisitsFinishedProcessing(
     ClusteringRequestSource clustering_request_source,
-    size_t num_batches_processed,
     optimization_guide::BatchEntityMetadataTask* completed_task,
     std::vector<history::ClusterVisit> cluster_visits,
+    base::flat_map<std::string, optimization_guide::EntityMetadata>
+        human_readable_entity_name_to_entity_metadata_map,
     ClustersCallback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  base::UmaHistogramCounts100(
-      "History.Clusters.Backend.NumBatchesProcessedForVisits",
-      num_batches_processed);
-
-  // Mark the task as completed, which will destruct |entity_metadata_map|.
+  // Mark the task as completed, as we are done with it and have moved
+  // everything adequately at this point.
   if (completed_task) {
     auto it = in_flight_batch_entity_metadata_tasks_.find(completed_task);
-    if (it != in_flight_batch_entity_metadata_tasks_.end())
+    if (it != in_flight_batch_entity_metadata_tasks_.end()) {
       in_flight_batch_entity_metadata_tasks_.erase(it);
+    }
   }
 
   // Post the actual clustering work onto the thread pool, then reply on the
@@ -377,7 +340,8 @@
         FROM_HERE,
         base::BindOnce(
             &OnDeviceClusteringBackend::ClusterVisitsOnBackgroundThread,
-            engagement_score_provider_ != nullptr, std::move(cluster_visits)),
+            engagement_score_provider_ != nullptr, std::move(cluster_visits),
+            std::move(human_readable_entity_name_to_entity_metadata_map)),
         std::move(callback));
     return;
   }
@@ -390,7 +354,8 @@
       FROM_HERE,
       base::BindOnce(
           &OnDeviceClusteringBackend::ClusterVisitsOnBackgroundThread,
-          engagement_score_provider_ != nullptr, std::move(cluster_visits)),
+          engagement_score_provider_ != nullptr, std::move(cluster_visits),
+          std::move(human_readable_entity_name_to_entity_metadata_map)),
       std::move(callback));
 }
 
@@ -398,7 +363,9 @@
 std::vector<history::Cluster>
 OnDeviceClusteringBackend::ClusterVisitsOnBackgroundThread(
     bool engagement_score_provider_is_valid,
-    std::vector<history::ClusterVisit> visits) {
+    std::vector<history::ClusterVisit> visits,
+    base::flat_map<std::string, optimization_guide::EntityMetadata>
+        human_readable_entity_name_to_entity_metadata_map) {
   base::ElapsedThreadTimer cluster_visits_timer;
 
   // TODO(crbug.com/1260145): All of these objects are "stateless" between
@@ -432,7 +399,8 @@
       GetConfig().should_filter_noisy_clusters) {
     cluster_finalizers.push_back(std::make_unique<NoisyClusterFinalizer>());
   }
-  cluster_finalizers.push_back(std::make_unique<KeywordClusterFinalizer>());
+  cluster_finalizers.push_back(std::make_unique<KeywordClusterFinalizer>(
+      human_readable_entity_name_to_entity_metadata_map));
   if (GetConfig().should_label_clusters) {
     cluster_finalizers.push_back(std::make_unique<LabelClusterFinalizer>());
   }
diff --git a/components/history_clusters/core/on_device_clustering_backend.h b/components/history_clusters/core/on_device_clustering_backend.h
index 73ada3c..499ea41 100644
--- a/components/history_clusters/core/on_device_clustering_backend.h
+++ b/components/history_clusters/core/on_device_clustering_backend.h
@@ -61,11 +61,9 @@
       const base::flat_map<std::string, optimization_guide::EntityMetadata>&
           entity_metadata_map);
 
-  // ProcessBatchOfVisits is called repeatedly to process the visits in batches.
-  void ProcessBatchOfVisits(
+  // ProcessVisits is called process the visits.
+  void ProcessVisits(
       ClusteringRequestSource clustering_request_source,
-      size_t num_batches_processed_so_far,
-      size_t index_to_process,
       std::vector<history::ClusterVisit> cluster_visits,
       optimization_guide::BatchEntityMetadataTask* completed_task,
       std::vector<history::AnnotatedVisit> annotated_visits,
@@ -77,15 +75,18 @@
   // Called when all visits have been processed.
   void OnAllVisitsFinishedProcessing(
       ClusteringRequestSource clustering_request_source,
-      size_t num_batches_processed,
       optimization_guide::BatchEntityMetadataTask* completed_task,
       std::vector<history::ClusterVisit> cluster_visits,
+      base::flat_map<std::string, optimization_guide::EntityMetadata>
+          human_readable_entity_name_to_entity_metadata_map,
       ClustersCallback callback);
 
   // Clusters |visits| on background thread.
   static std::vector<history::Cluster> ClusterVisitsOnBackgroundThread(
       bool engagement_score_provider_is_valid,
-      std::vector<history::ClusterVisit> visits);
+      std::vector<history::ClusterVisit> visits,
+      base::flat_map<std::string, optimization_guide::EntityMetadata>
+          human_readable_entity_name_to_entity_metadata_map);
 
   // The object to fetch entity metadata from. Not owned. Must outlive |this|.
   optimization_guide::EntityMetadataProvider* entity_metadata_provider_ =
diff --git a/components/history_clusters/core/on_device_clustering_backend_unittest.cc b/components/history_clusters/core/on_device_clustering_backend_unittest.cc
index e0a2200..d5471af6 100644
--- a/components/history_clusters/core/on_device_clustering_backend_unittest.cc
+++ b/components/history_clusters/core/on_device_clustering_backend_unittest.cc
@@ -72,6 +72,7 @@
                   {"category-" + entity_id, 0.5});
               metadata.human_readable_categories.insert(
                   {"toolow-" + entity_id, 0.01});
+              metadata.human_readable_aliases.push_back("alias-" + entity_id);
               std::move(callback).Run(entity_id == "nometadata"
                                           ? absl::nullopt
                                           : absl::make_optional(metadata));
@@ -120,8 +121,10 @@
  public:
   OnDeviceClusteringWithoutContentBackendTest() {
     config_.content_clustering_enabled = false;
-    config_.should_include_categories_in_keywords = true;
-    config_.should_exclude_keywords_from_noisy_visits = false;
+    config_.keyword_filter_on_categories = true;
+    config_.keyword_filter_on_noisy_visits = true;
+    config_.keyword_filter_on_entity_aliases = true;
+    config_.max_entity_aliases_in_keywords = 100;
     config_.split_clusters_at_search_visits = false;
     config_.should_label_clusters = false;
     config_.entity_relevance_threshold = 60;
@@ -430,8 +433,9 @@
  public:
   OnDeviceClusteringWithContentBackendTest() {
     config_.content_clustering_enabled = true;
-    config_.should_include_categories_in_keywords = true;
-    config_.should_exclude_keywords_from_noisy_visits = false;
+    config_.keyword_filter_on_categories = true;
+    config_.keyword_filter_on_noisy_visits = true;
+    config_.keyword_filter_on_entity_aliases = true;
     config_.should_check_hosts_to_skip_clustering_for = false;
     SetConfigForTesting(config_);
   }
@@ -654,6 +658,10 @@
                   .annotated_visit.content_annotations.model_annotations
                   .visibility_score,
               FloatEq(0.5));
+  // Cluster should have 3 keywords.
+  EXPECT_THAT(
+      cluster.keywords,
+      UnorderedElementsAre(u"rewritten-foo", u"category-foo", u"alias-foo"));
 
   history::Cluster cluster2 = result_clusters.at(1);
   ASSERT_EQ(cluster2.visits.size(), 1u);
@@ -666,6 +674,7 @@
                   .model_annotations.entities.empty());
   EXPECT_TRUE(third_result_visit.annotated_visit.content_annotations
                   .model_annotations.categories.empty());
+  EXPECT_TRUE(cluster2.keywords.empty());
 
   histogram_tester.ExpectUniqueSample(
       "History.Clusters.Backend.ClusterSize.Min", 1, 1);
@@ -674,7 +683,7 @@
   histogram_tester.ExpectUniqueSample(
       "History.Clusters.Backend.NumKeywordsPerCluster.Min", 0, 1);
   histogram_tester.ExpectUniqueSample(
-      "History.Clusters.Backend.NumKeywordsPerCluster.Max", 2, 1);
+      "History.Clusters.Backend.NumKeywordsPerCluster.Max", 3, 1);
   histogram_tester.ExpectTotalCount(
       "History.Clusters.Backend.BatchEntityLookupLatency2", 1);
   histogram_tester.ExpectUniqueSample(
@@ -687,8 +696,9 @@
  public:
   EngagementCacheOnDeviceClusteringWithoutContentBackendTest() {
     config_.content_clustering_enabled = false;
-    config_.should_include_categories_in_keywords = true;
-    config_.should_exclude_keywords_from_noisy_visits = false;
+    config_.keyword_filter_on_categories = true;
+    config_.keyword_filter_on_noisy_visits = true;
+    config_.keyword_filter_on_entity_aliases = false;
     SetConfigForTesting(config_);
 
     if (GetParam()) {
@@ -750,94 +760,5 @@
     EngagementCacheOnDeviceClusteringWithoutContentBackendTest,
     ::testing::Bool());
 
-class BatchedClusteringTaskOnDeviceClusteringWithoutContentBackendTest
-    : public OnDeviceClusteringWithoutContentBackendTest,
-      public ::testing::WithParamInterface<
-          std::tuple<bool, ClusteringRequestSource>> {
- public:
-  BatchedClusteringTaskOnDeviceClusteringWithoutContentBackendTest() {
-    config_.content_clustering_enabled = false;
-    config_.should_include_categories_in_keywords = true;
-    config_.should_exclude_keywords_from_noisy_visits = false;
-    config_.clustering_tasks_batch_size = 1;
-    SetConfigForTesting(config_);
-
-    // expected_size_of_batches is 1.
-    const base::FieldTrialParams batched_clustering_feature_parameters = {
-        {"clustering_task_batch_size", "1"}};
-    base::test::ScopedFeatureList::FeatureAndParams batched_clustering(
-        features::kSplitClusteringTasksToSmallerBatches,
-        batched_clustering_feature_parameters);
-
-    if (IsBatchingEnabled()) {
-      scoped_feature_list_.InitWithFeaturesAndParameters({{batched_clustering}},
-                                                         {});
-    } else {
-      scoped_feature_list_.InitAndDisableFeature(
-          features::kSplitClusteringTasksToSmallerBatches);
-    }
-  }
-
-  bool IsBatchingEnabled() const { return std::get<0>(GetParam()); }
-
-  ClusteringRequestSource GetClusteringRequestSource() const {
-    return std::get<1>(GetParam());
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-  Config config_;
-};
-
-TEST_P(BatchedClusteringTaskOnDeviceClusteringWithoutContentBackendTest,
-       Baseline) {
-  base::HistogramTester histogram_tester;
-  std::vector<history::AnnotatedVisit> visits;
-
-  // Add 1000 visits to |visits|.
-  for (int i = 0; i < 1000; ++i) {
-    visits.push_back(testing::CreateDefaultAnnotatedVisit(
-        i + 1, GURL("https://github.com/")));
-  }
-
-  std::vector<history::Cluster> result_clusters_1 =
-      ClusterVisits(GetClusteringRequestSource(), visits);
-
-  if (base::FeatureList::IsEnabled(features::kUseEngagementScoreCache)) {
-    EXPECT_EQ(1u, GetSiteEngagementGetScoreInvocationCount());
-  } else {
-    EXPECT_EQ(1000u, GetSiteEngagementGetScoreInvocationCount());
-  }
-
-  size_t expected_number_of_batches = 1;
-  size_t expected_size_of_batches = 1000;
-  if (IsBatchingEnabled() &&
-      GetClusteringRequestSource() ==
-          ClusteringRequestSource::kKeywordCacheGeneration) {
-    expected_number_of_batches = 1000;
-    expected_size_of_batches = 1;
-  }
-
-  histogram_tester.ExpectTotalCount(
-      "History.Clusters.Backend.ProcessBatchOfVisits.BatchSize",
-      expected_number_of_batches);
-  histogram_tester.ExpectUniqueSample(
-      "History.Clusters.Backend.ProcessBatchOfVisits.BatchSize",
-      expected_size_of_batches, expected_number_of_batches);
-  histogram_tester.ExpectUniqueSample(
-      "History.Clusters.Backend.NumBatchesProcessedForVisits",
-      expected_number_of_batches, 1);
-}
-
-const bool kDirectExecutorEnabled[]{true, false};
-
-INSTANTIATE_TEST_SUITE_P(
-    BatchedClusteringTaskOnDeviceClusteringWithoutContentBackendTest,
-    BatchedClusteringTaskOnDeviceClusteringWithoutContentBackendTest,
-    ::testing::Combine(
-        ::testing::ValuesIn(kDirectExecutorEnabled),
-        ::testing::Values(ClusteringRequestSource::kJourneysPage,
-                          ClusteringRequestSource::kKeywordCacheGeneration)));
-
 }  // namespace
 }  // namespace history_clusters
diff --git a/components/history_clusters/core/on_device_clustering_features.cc b/components/history_clusters/core/on_device_clustering_features.cc
index 063cf15b..6895176d 100644
--- a/components/history_clusters/core/on_device_clustering_features.cc
+++ b/components/history_clusters/core/on_device_clustering_features.cc
@@ -27,5 +27,8 @@
 const base::Feature kOnDeviceClusteringBlocklists{
     "JourneysOnDeviceClusteringBlocklist", base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kOnDeviceClusteringKeywordFiltering{
+    "JourneysKeywordFiltering", base::FEATURE_DISABLED_BY_DEFAULT};
+
 }  // namespace features
 }  // namespace history_clusters
diff --git a/components/history_clusters/core/on_device_clustering_features.h b/components/history_clusters/core/on_device_clustering_features.h
index 3d86994..8f9f516 100644
--- a/components/history_clusters/core/on_device_clustering_features.h
+++ b/components/history_clusters/core/on_device_clustering_features.h
@@ -26,6 +26,9 @@
 // Specifies various blocklists for on-device clustering backend.
 extern const base::Feature kOnDeviceClusteringBlocklists;
 
+// Specifies how keywords get filtered and added to a cluster.
+extern const base::Feature kOnDeviceClusteringKeywordFiltering;
+
 }  // namespace features
 }  // namespace history_clusters
 
diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc
index ea9c9695d..105082e 100644
--- a/components/omnibox/browser/autocomplete_result.cc
+++ b/components/omnibox/browser/autocomplete_result.cc
@@ -239,7 +239,9 @@
   for (auto& match : matches_)
     match.ComputeStrippedDestinationURL(input, template_url_service);
 
+#if !BUILDFLAG(IS_IOS)
   DemoteOnDeviceSearchSuggestions();
+#endif  // !BUILDFLAG(IS_IOS)
 
   CompareWithDemoteByType<AutocompleteMatch> comparing_object(
       input.current_page_classification());
@@ -413,10 +415,6 @@
 }
 
 void AutocompleteResult::DemoteOnDeviceSearchSuggestions() {
-  const std::string mode = OmniboxFieldTrial::OnDeviceHeadSuggestDemoteMode();
-  if (mode != "decrease-relevances" && mode != "remove-suggestions")
-    return;
-
   std::vector<AutocompleteMatch*> on_device_search_suggestions;
   int search_provider_search_suggestion_min_relevance = -1,
       on_device_search_suggestion_max_relevance = -1;
@@ -436,36 +434,27 @@
     // triggering condition once keyword search is launched at Android & iOS.
     if (m.IsSearchProviderSearchSuggestion() && !m.IsTrivialAutocompletion()) {
       search_provider_search_suggestion_exists = true;
-      if (mode == "decrease-relevances") {
-        search_provider_search_suggestion_min_relevance =
-            search_provider_search_suggestion_min_relevance < 0
-                ? m.relevance
-                : std::min(search_provider_search_suggestion_min_relevance,
-                           m.relevance);
-      }
+      search_provider_search_suggestion_min_relevance =
+          search_provider_search_suggestion_min_relevance < 0
+              ? m.relevance
+              : std::min(search_provider_search_suggestion_min_relevance,
+                         m.relevance);
     } else if (m.IsOnDeviceSearchSuggestion()) {
       on_device_search_suggestions.push_back(&m);
-      if (mode == "decrease-relevances") {
-        on_device_search_suggestion_max_relevance =
-            std::max(on_device_search_suggestion_max_relevance, m.relevance);
-      }
+      on_device_search_suggestion_max_relevance =
+          std::max(on_device_search_suggestion_max_relevance, m.relevance);
     }
   }
 
-  // If SearchProvider search suggestions present, adjust the relevances for
-  // OnDeviceProvider search suggestions, determined by mode:
-  // 1. decrease-relevances: if any OnDeviceProvider search suggestion has a
-  //    higher relevance than any SearchProvider one, subtract the difference
-  //    b/w the maximum OnDeviceProvider search suggestion relevance and the
-  //    minimum SearchProvider search suggestion relevance from the relevances
-  //    for all OnDeviceProvider ones.
-  // 2. remove-suggestions: set the relevances to 0 for all OnDeviceProvider
-  //    search suggestions.
+  // If any OnDeviceProvider search suggestion has a higher relevance than any
+  // SearchProvider one, subtract the difference b/w the maximum
+  // OnDeviceProvider search suggestion relevance and the minimum SearchProvider
+  // search suggestion relevance from the relevances for all OnDeviceProvider
+  // ones.
   if (search_provider_search_suggestion_exists &&
       !on_device_search_suggestions.empty()) {
-    if (mode == "decrease-relevances" &&
-        on_device_search_suggestion_max_relevance >=
-            search_provider_search_suggestion_min_relevance) {
+    if (on_device_search_suggestion_max_relevance >=
+        search_provider_search_suggestion_min_relevance) {
       int relevance_offset =
           (on_device_search_suggestion_max_relevance -
            search_provider_search_suggestion_min_relevance + 1);
@@ -473,9 +462,6 @@
         m->relevance = m->relevance > relevance_offset
                            ? m->relevance - relevance_offset
                            : 0;
-    } else if (mode == "remove-suggestions") {
-      for (auto* m : on_device_search_suggestions)
-        m->relevance = 0;
     }
   }
 }
diff --git a/components/omnibox/browser/autocomplete_result_unittest.cc b/components/omnibox/browser/autocomplete_result_unittest.cc
index 92cb74c..5f08110 100644
--- a/components/omnibox/browser/autocomplete_result_unittest.cc
+++ b/components/omnibox/browser/autocomplete_result_unittest.cc
@@ -1288,84 +1288,24 @@
   AutocompleteInput input(u"a", metrics::OmniboxEventProto::OTHER,
                           TestSchemeClassifier());
 
-  // Test setting on device suggestion relevances to 0.
-  {
-    base::test::ScopedFeatureList feature_list;
-    feature_list.InitAndEnableFeatureWithParameters(
-        omnibox::kOnDeviceHeadProviderNonIncognito,
-        {{"DemoteOnDeviceSearchSuggestionsMode", "remove-suggestions"}});
-    AutocompleteResult result;
-    result.AppendMatches(input, matches);
-    result.DemoteOnDeviceSearchSuggestions();
-    EXPECT_EQ(5UL, result.size());
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(0)->provider->type());
-    EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(1)->provider->type());
-    EXPECT_EQ(0, result.match_at(1)->relevance);
-    EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(2)->provider->type());
-    EXPECT_EQ(0, result.match_at(2)->relevance);
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(3)->provider->type());
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(4)->provider->type());
-  }
-
   // Test setting on device suggestion relevances lower than search provider
   // suggestions.
-  {
-    base::test::ScopedFeatureList feature_list;
-    feature_list.InitAndEnableFeatureWithParameters(
-        omnibox::kOnDeviceHeadProviderNonIncognito,
-        {{"DemoteOnDeviceSearchSuggestionsMode", "decrease-relevances"}});
-    AutocompleteResult result;
-    result.AppendMatches(input, matches);
-    result.DemoteOnDeviceSearchSuggestions();
-    EXPECT_EQ(5UL, result.size());
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(0)->provider->type());
-    EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(1)->provider->type());
-    EXPECT_LT(result.match_at(1)->relevance, result.match_at(0)->relevance);
-    EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(2)->provider->type());
-    EXPECT_LT(result.match_at(2)->relevance, result.match_at(0)->relevance);
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(3)->provider->type());
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(4)->provider->type());
-  }
-
-  // Test no demotion should happen if search provider only returns trivial
-  // autocompletion, e.g. SEARCH_WHAT_YOU_TYPED or SEARCH_OTHER_ENGINE.
-  {
-    base::test::ScopedFeatureList feature_list;
-    feature_list.InitAndEnableFeatureWithParameters(
-        omnibox::kOnDeviceHeadProviderNonIncognito,
-        {{"DemoteOnDeviceSearchSuggestionsMode", "remove-suggestions"}});
-
-    matches[0].type = AutocompleteMatchType::SEARCH_OTHER_ENGINE;
-    matches[3].type = AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED;
-    matches[4].type = AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED;
-
-    AutocompleteResult result;
-    result.AppendMatches(input, matches);
-    result.DemoteOnDeviceSearchSuggestions();
-    EXPECT_EQ(5UL, result.size());
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(0)->provider->type());
-    EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(1)->provider->type());
-    EXPECT_EQ(1100, result.match_at(1)->relevance);
-    EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(2)->provider->type());
-    EXPECT_EQ(1000, result.match_at(2)->relevance);
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(3)->provider->type());
-    EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
-              result.match_at(4)->provider->type());
-  }
+  AutocompleteResult result;
+  result.AppendMatches(input, matches);
+  result.DemoteOnDeviceSearchSuggestions();
+  EXPECT_EQ(5UL, result.size());
+  EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
+            result.match_at(0)->provider->type());
+  EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
+            result.match_at(1)->provider->type());
+  EXPECT_LT(result.match_at(1)->relevance, result.match_at(0)->relevance);
+  EXPECT_EQ(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
+            result.match_at(2)->provider->type());
+  EXPECT_LT(result.match_at(2)->relevance, result.match_at(0)->relevance);
+  EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
+            result.match_at(3)->provider->type());
+  EXPECT_NE(AutocompleteProvider::TYPE_ON_DEVICE_HEAD,
+            result.match_at(4)->provider->type());
 }
 
 TEST_F(AutocompleteResultTest, DemoteByType) {
diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc
index d2a1814..55842ab 100644
--- a/components/omnibox/browser/omnibox_field_trial.cc
+++ b/components/omnibox/browser/omnibox_field_trial.cc
@@ -650,50 +650,6 @@
   return constraint;
 }
 
-int OmniboxFieldTrial::OnDeviceHeadSuggestMaxScoreForNonUrlInput(
-    bool is_incognito) {
-  const int kDefaultScore =
-#if BUILDFLAG(IS_IOS)
-      99;
-#else
-      is_incognito ? 99 : 1000;
-#endif  // BUILDFLAG(IS_IOS)
-  return is_incognito
-             ? kDefaultScore
-             : base::GetFieldTrialParamByFeatureAsInt(
-                   omnibox::kOnDeviceHeadProviderNonIncognito,
-                   kOnDeviceHeadSuggestMaxScoreForNonUrlInput, kDefaultScore);
-}
-
-int OmniboxFieldTrial::OnDeviceHeadSuggestDelaySuggestRequestMs(
-    bool is_incognito) {
-  const int kDefaultDelayNonIncognito = 0;
-  return is_incognito ? 0
-                      : base::GetFieldTrialParamByFeatureAsInt(
-                            omnibox::kOnDeviceHeadProviderNonIncognito,
-                            kOnDeviceHeadSuggestDelaySuggestRequestMs,
-                            kDefaultDelayNonIncognito);
-}
-
-int OmniboxFieldTrial::OnDeviceSearchProviderDefaultLoaderTimeoutMs(
-    bool is_incognito) {
-  return is_incognito ? 0
-                      : base::GetFieldTrialParamByFeatureAsInt(
-                            omnibox::kOnDeviceHeadProviderNonIncognito,
-                            kOnDeviceSearchProviderDefaultLoaderTimeoutMs, 0);
-}
-
-std::string OmniboxFieldTrial::OnDeviceHeadSuggestDemoteMode() {
-  std::string demote_mode = base::GetFieldTrialParamValueByFeature(
-      omnibox::kOnDeviceHeadProviderNonIncognito,
-      kOnDeviceHeadSuggestDemoteMode);
-#if !BUILDFLAG(IS_IOS)
-  if (demote_mode.empty())
-    demote_mode = "decrease-relevances";
-#endif  // !BUILDFLAG(IS_IOS)
-  return demote_mode;
-}
-
 bool OmniboxFieldTrial::ShouldDisableCGIParamMatching() {
   return base::FeatureList::IsEnabled(omnibox::kDisableCGIParamMatching);
 }
@@ -784,14 +740,6 @@
 
 const char OmniboxFieldTrial::kOnDeviceHeadModelLocaleConstraint[] =
     "ForceModelLocaleConstraint";
-const char OmniboxFieldTrial::kOnDeviceHeadSuggestMaxScoreForNonUrlInput[] =
-    "OnDeviceSuggestMaxScoreForNonUrlInput";
-const char OmniboxFieldTrial::kOnDeviceHeadSuggestDelaySuggestRequestMs[] =
-    "DelayOnDeviceHeadSuggestRequestMs";
-const char OmniboxFieldTrial::kOnDeviceSearchProviderDefaultLoaderTimeoutMs[] =
-    "SearchProviderDefaultLoaderTimeoutMs";
-const char OmniboxFieldTrial::kOnDeviceHeadSuggestDemoteMode[] =
-    "DemoteOnDeviceSearchSuggestionsMode";
 
 int OmniboxFieldTrial::kDefaultMinimumTimeBetweenSuggestQueriesMs = 100;
 
diff --git a/components/omnibox/browser/omnibox_field_trial.h b/components/omnibox/browser/omnibox_field_trial.h
index 1ca5603d..12ec3b6a 100644
--- a/components/omnibox/browser/omnibox_field_trial.h
+++ b/components/omnibox/browser/omnibox_field_trial.h
@@ -373,11 +373,6 @@
 bool IsOnDeviceHeadSuggestEnabledForAnyMode();
 // Functions can be used in both non-incognito and incognito.
 std::string OnDeviceHeadModelLocaleConstraint(bool is_incognito);
-int OnDeviceHeadSuggestMaxScoreForNonUrlInput(bool is_incognito);
-int OnDeviceSearchProviderDefaultLoaderTimeoutMs(bool is_incognito);
-int OnDeviceHeadSuggestDelaySuggestRequestMs(bool is_incognito);
-// Function only works in non-incognito when server suggestions are available.
-std::string OnDeviceHeadSuggestDemoteMode();
 
 // Returns true if CGI parameter names should not be considered when scoring
 // suggestions.
@@ -473,12 +468,6 @@
 // Parameter names used by on device head provider.
 // These four parameters are shared by both non-incognito and incognito.
 extern const char kOnDeviceHeadModelLocaleConstraint[];
-extern const char kOnDeviceHeadSuggestMaxScoreForNonUrlInput[];
-extern const char kOnDeviceHeadSuggestDelaySuggestRequestMs[];
-extern const char kOnDeviceSearchProviderDefaultLoaderTimeoutMs[];
-// This parameter is for non-incognito which are only useful when server
-// suggestions are available.
-extern const char kOnDeviceHeadSuggestDemoteMode[];
 
 // The amount of time to wait before sending a new suggest request after the
 // previous one unless overridden by a field trial parameter.
diff --git a/components/omnibox/browser/on_device_head_provider.cc b/components/omnibox/browser/on_device_head_provider.cc
index 31b5868..1596c22 100644
--- a/components/omnibox/browser/on_device_head_provider.cc
+++ b/components/omnibox/browser/on_device_head_provider.cc
@@ -46,6 +46,16 @@
              template_url_service->search_terms_data()) == SEARCH_ENGINE_GOOGLE;
 }
 
+int OnDeviceHeadSuggestMaxScoreForNonUrlInput(bool is_incognito) {
+  const int kDefaultScore =
+#if BUILDFLAG(IS_IOS)
+      99;
+#else
+      is_incognito ? 99 : 1000;
+#endif  // BUILDFLAG(IS_IOS)
+  return kDefaultScore;
+}
+
 }  // namespace
 
 struct OnDeviceHeadProvider::OnDeviceHeadProviderParams {
@@ -151,20 +161,10 @@
       new OnDeviceHeadProviderParams(on_device_search_request_id_, input));
 
   done_ = false;
-  // Since the On Device provider usually runs much faster than online
-  // providers, it will be very likely users will see on device suggestions
-  // first and then the Omnibox UI gets refreshed to show suggestions fetched
-  // from server, if we issue both requests simultaneously.
-  // Therefore, we might want to delay the On Device suggest requests (and also
-  // apply a timeout to search default loader) to mitigate this issue. Note this
-  // delay is not needed for incognito where server suggestion is not served.
-  int delay = OmniboxFieldTrial::OnDeviceHeadSuggestDelaySuggestRequestMs(
-      client()->IsOffTheRecord());
-  base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
       base::BindOnce(&OnDeviceHeadProvider::DoSearch,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(params)),
-      delay > 0 ? base::Milliseconds(delay) : base::TimeDelta());
+                     weak_ptr_factory_.GetWeakPtr(), std::move(params)));
 }
 
 void OnDeviceHeadProvider::Stop(bool clear_cached_results,
@@ -256,11 +256,10 @@
                                 params->suggestions.size(), 1, 5, 6);
     matches_.clear();
 
-    int relevance =
-        params->input.type() == metrics::OmniboxInputType::URL
-            ? kBaseRelevanceForUrlInput
-            : OmniboxFieldTrial::OnDeviceHeadSuggestMaxScoreForNonUrlInput(
-                  client()->IsOffTheRecord());
+    int relevance = params->input.type() == metrics::OmniboxInputType::URL
+                        ? kBaseRelevanceForUrlInput
+                        : OnDeviceHeadSuggestMaxScoreForNonUrlInput(
+                              client()->IsOffTheRecord());
 
     for (const auto& item : params->suggestions) {
       matches_.push_back(BaseSearchProvider::CreateOnDeviceSearchSuggestion(
diff --git a/components/omnibox/browser/on_device_head_provider_unittest.cc b/components/omnibox/browser/on_device_head_provider_unittest.cc
index 8528b88a..b25cdba 100644
--- a/components/omnibox/browser/on_device_head_provider_unittest.cc
+++ b/components/omnibox/browser/on_device_head_provider_unittest.cc
@@ -78,16 +78,7 @@
   scoped_refptr<OnDeviceHeadProvider> provider_;
 };
 
-class OnDeviceHeadProviderZeroDelayTest : public OnDeviceHeadProviderTest {
- public:
-  OnDeviceHeadProviderZeroDelayTest() {
-    scoped_feature_list_.InitAndEnableFeatureWithParameters(
-        omnibox::kOnDeviceHeadProviderNonIncognito,
-        {{OmniboxFieldTrial::kOnDeviceHeadSuggestDelaySuggestRequestMs, "0"}});
-  }
-};
-
-TEST_F(OnDeviceHeadProviderZeroDelayTest, ModelInstanceNotCreated) {
+TEST_F(OnDeviceHeadProviderTest, ModelInstanceNotCreated) {
   AutocompleteInput input(u"M", metrics::OmniboxEventProto::OTHER,
                           TestSchemeClassifier());
   input.set_want_asynchronous_matches(true);
@@ -106,7 +97,7 @@
   EXPECT_TRUE(provider_->done());
 }
 
-TEST_F(OnDeviceHeadProviderZeroDelayTest, RejectSynchronousRequest) {
+TEST_F(OnDeviceHeadProviderTest, RejectSynchronousRequest) {
   AutocompleteInput input(u"M", metrics::OmniboxEventProto::OTHER,
                           TestSchemeClassifier());
   input.set_want_asynchronous_matches(false);
@@ -129,7 +120,7 @@
   }
 }
 
-TEST_F(OnDeviceHeadProviderZeroDelayTest, RejectOnFocusRequest) {
+TEST_F(OnDeviceHeadProviderTest, RejectOnFocusRequest) {
   AutocompleteInput input(u"M", metrics::OmniboxEventProto::OTHER,
                           TestSchemeClassifier());
   input.set_want_asynchronous_matches(true);
@@ -141,7 +132,7 @@
   ASSERT_FALSE(IsOnDeviceHeadProviderAllowed(input));
 }
 
-TEST_F(OnDeviceHeadProviderZeroDelayTest, NoMatches) {
+TEST_F(OnDeviceHeadProviderTest, NoMatches) {
   AutocompleteInput input(u"b", metrics::OmniboxEventProto::OTHER,
                           TestSchemeClassifier());
   input.set_want_asynchronous_matches(true);
@@ -159,7 +150,7 @@
   EXPECT_TRUE(provider_->done());
 }
 
-TEST_F(OnDeviceHeadProviderZeroDelayTest, HasMatches) {
+TEST_F(OnDeviceHeadProviderTest, HasMatches) {
   AutocompleteInput input(u"M", metrics::OmniboxEventProto::OTHER,
                           TestSchemeClassifier());
   input.set_want_asynchronous_matches(true);
@@ -180,7 +171,7 @@
   EXPECT_EQ(u"map", provider_->matches()[2].contents);
 }
 
-TEST_F(OnDeviceHeadProviderZeroDelayTest, CancelInProgressRequest) {
+TEST_F(OnDeviceHeadProviderTest, CancelInProgressRequest) {
   AutocompleteInput input1(u"g", metrics::OmniboxEventProto::OTHER,
                            TestSchemeClassifier());
   input1.set_want_asynchronous_matches(true);
diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc
index e0c141f..5061047 100644
--- a/components/omnibox/browser/search_provider.cc
+++ b/components/omnibox/browser/search_provider.cc
@@ -629,20 +629,11 @@
   time_suggest_request_sent_ = base::TimeTicks::Now();
 
   if (!query_is_private) {
-    int timeout_ms = 0;
-    // Consider explicitly setting a timeout for requests sent to Google when
-    // On Device Head provider is enabled.
-    if (IsSearchEngineGoogle(providers_.GetDefaultProviderURL(), client())) {
-      timeout_ms =
-          OmniboxFieldTrial::OnDeviceSearchProviderDefaultLoaderTimeoutMs(
-              client()->IsOffTheRecord());
-    }
-    default_loader_ = CreateSuggestLoader(
-        providers_.GetDefaultProviderURL(), input_,
-        timeout_ms > 0 ? base::Milliseconds(timeout_ms) : base::TimeDelta());
+    default_loader_ =
+        CreateSuggestLoader(providers_.GetDefaultProviderURL(), input_);
   }
-  keyword_loader_ = CreateSuggestLoader(providers_.GetKeywordProviderURL(),
-                                        keyword_input_, base::TimeDelta());
+  keyword_loader_ =
+      CreateSuggestLoader(providers_.GetKeywordProviderURL(), keyword_input_);
 
   // Both the above can fail if the providers have been modified or deleted
   // since the query began.
@@ -922,8 +913,7 @@
 
 std::unique_ptr<network::SimpleURLLoader> SearchProvider::CreateSuggestLoader(
     const TemplateURL* template_url,
-    const AutocompleteInput& input,
-    const base::TimeDelta& timeout) {
+    const AutocompleteInput& input) {
   if (!template_url || template_url->suggestions_url().empty())
     return nullptr;
 
@@ -1027,8 +1017,6 @@
 
   std::unique_ptr<network::SimpleURLLoader> loader =
       network::SimpleURLLoader::Create(std::move(request), traffic_annotation);
-  if (timeout.is_positive())
-    loader->SetTimeoutDuration(timeout);
   loader->DownloadToStringOfUnboundedSizeUntilCrashAndDie(
       client()->GetURLLoaderFactory().get(),
       base::BindOnce(&SearchProvider::OnURLLoadComplete, base::Unretained(this),
diff --git a/components/omnibox/browser/search_provider.h b/components/omnibox/browser/search_provider.h
index cbaf8db0..25bb75b 100644
--- a/components/omnibox/browser/search_provider.h
+++ b/components/omnibox/browser/search_provider.h
@@ -267,12 +267,10 @@
 
   // Starts a new SimpleURLLoader requesting suggest results from
   // |template_url|; callers own the returned SimpleURLLoader, which is NULL for
-  // invalid providers. Note the request will never time out unless the given
-  // |timeout| is greater than 0.
+  // invalid providers.
   std::unique_ptr<network::SimpleURLLoader> CreateSuggestLoader(
       const TemplateURL* template_url,
-      const AutocompleteInput& input,
-      const base::TimeDelta& timeout);
+      const AutocompleteInput& input);
 
   // Converts the parsed results to a set of AutocompleteMatches, |matches_|.
   void ConvertResultsToAutocompleteMatches();
diff --git a/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc b/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
index 9c59cea9..c0ca650 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
+++ b/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
@@ -246,13 +246,8 @@
   EXPECT_FALSE(GetMetadataForEntityId("someid").has_value());
 }
 
-// TODO(crbug.com/1286473): Flaky on Chrome OS.
-#if BUILDFLAG(IS_CHROMEOS)
-#define MAYBE_PageTopics DISABLED_PageTopics
-#else
-#define MAYBE_PageTopics PageTopics
-#endif
-TEST_F(PageContentAnnotationsModelManagerTest, MAYBE_PageTopics) {
+// TODO(crbug.com/1286473): Flaky on Chrome OS and MSAN.
+TEST_F(PageContentAnnotationsModelManagerTest, DISABLED_PageTopics) {
   SetupPageTopicsV2ModelExecutor();
 
   // Running the actual model can take a while.
diff --git a/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc b/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc
index 78c9d3e..2ff5e91 100644
--- a/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc
+++ b/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc
@@ -39,9 +39,14 @@
   // When both sizes are equal
   DCHECK(timing1.Time());
   DCHECK(timing2.Time());
-  if (timing1.Time().value() < timing2.Time().value())
+  // The size can be nonzero while the time can be 0 since a time of 0 is sent
+  // when the image is still painting. When we merge the two
+  // |ContentfulPaintTimingInfo| objects, we should ignore the one with 0 time.
+  if (timing1.Time() == base::TimeDelta())
+    return timing2;
+  if (timing2.Time() == base::TimeDelta())
     return timing1;
-  return timing2;
+  return timing1.Time().value() < timing2.Time().value() ? timing1 : timing2;
 }
 
 void MergeForSubframesWithAdjustedTime(
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
index 6cdbec5..c93d9fbc 100644
--- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
+++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
@@ -334,8 +334,15 @@
     matched_bits.Set(TimingField::kFirstContentfulPaint);
   if (timing.paint_timing->first_meaningful_paint)
     matched_bits.Set(TimingField::kFirstMeaningfulPaint);
-  if (timing.paint_timing->largest_contentful_paint->largest_image_paint ||
-      timing.paint_timing->largest_contentful_paint->largest_text_paint) {
+  // The largest contentful paint's size can be nonzero while the time can be 0
+  // since a time of 0 is sent when the image is still painting. We set
+  // LargestContentfulPaint to be observed when its time is non-zero.
+  if ((timing.paint_timing->largest_contentful_paint->largest_image_paint &&
+       !timing.paint_timing->largest_contentful_paint->largest_image_paint
+            ->is_zero()) ||
+      (timing.paint_timing->largest_contentful_paint->largest_text_paint &&
+       !timing.paint_timing->largest_contentful_paint->largest_text_paint
+            ->is_zero())) {
     matched_bits.Set(TimingField::kLargestContentfulPaint);
   }
   if (timing.paint_timing->first_input_or_scroll_notified_timestamp)
diff --git a/components/password_manager/core/browser/password_manager_constants.cc b/components/password_manager/core/browser/password_manager_constants.cc
index 17b9020..2d93c88 100644
--- a/components/password_manager/core/browser/password_manager_constants.cc
+++ b/components/password_manager/core/browser/password_manager_constants.cc
@@ -22,4 +22,8 @@
 const char kPasswordManagerHelpCenterSmartLock[] =
     "https://support.google.com/accounts?p=smart_lock_chrome";
 
+const char kManageMyPasswordsURL[] = "https://passwords.google.com/native";
+
+const char kReferrerURL[] = "https://passwords.google/";
+
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_manager_constants.h b/components/password_manager/core/browser/password_manager_constants.h
index b0020d25..06e8b53 100644
--- a/components/password_manager/core/browser/password_manager_constants.h
+++ b/components/password_manager/core/browser/password_manager_constants.h
@@ -23,6 +23,12 @@
 // TODO(crbug.com/862269): remove when "Smart Lock" is completely gone.
 extern const char kPasswordManagerHelpCenterSmartLock[];
 
+// URL which open native Password Manager UI.
+extern const char kManageMyPasswordsURL[];
+
+// URL from which native Password Manager UI can be opened.
+extern const char kReferrerURL[];
+
 }  // namespace password_manager
 
 #endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_CONSTANTS_H_
diff --git a/components/password_manager/core/browser/password_manager_util_unittest.cc b/components/password_manager/core/browser/password_manager_util_unittest.cc
index 0f02da90..35f92372 100644
--- a/components/password_manager/core/browser/password_manager_util_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_util_unittest.cc
@@ -232,7 +232,7 @@
   MOCK_METHOD(bool, IsPasswordManagerEnabled, (), (override));
   MOCK_METHOD(void,
               PropagateAutofillPredictions,
-              (content::RenderFrameHost*,
+              (autofill::AutofillDriver*,
                const std::vector<autofill::FormStructure*>&),
               (override));
   MOCK_METHOD(void,
diff --git a/components/pdf/renderer/BUILD.gn b/components/pdf/renderer/BUILD.gn
index 20b186ca8..d5e9d3f 100644
--- a/components/pdf/renderer/BUILD.gn
+++ b/components/pdf/renderer/BUILD.gn
@@ -34,6 +34,7 @@
     "//content/public/common",
     "//gin",
     "//ipc",
+    "//net",
     "//pdf:accessibility",
     "//pdf:buildflags",
     "//pdf:features",
@@ -43,6 +44,8 @@
     "//third_party/blink/public:blink",
     "//third_party/blink/public/strings:accessibility_strings",
     "//third_party/icu",
+    "//ui/display",
+    "//ui/gfx/geometry",
     "//url",
     "//v8",
   ]
diff --git a/components/pdf/renderer/DEPS b/components/pdf/renderer/DEPS
index 80d962d..0fc18e1 100644
--- a/components/pdf/renderer/DEPS
+++ b/components/pdf/renderer/DEPS
@@ -4,6 +4,7 @@
   "+components/printing/renderer/print_render_frame_helper.h",
   "+components/strings/grit/components_strings.h",
   "+mojo/public/cpp/bindings",
+  "+net",
   "+pdf/accessibility_structs.h",
   "+pdf/buildflags.h",
   "+pdf/mojom/pdf.mojom.h",
@@ -16,4 +17,6 @@
   "+third_party/skia/include/core",
   "+ui/accessibility",
   "+ui/base",
+  "+ui/display",
+  "+v8/include",
 ]
diff --git a/components/pdf/renderer/pdf_view_web_plugin_client.cc b/components/pdf/renderer/pdf_view_web_plugin_client.cc
index 05a48dd..ce88c39 100644
--- a/components/pdf/renderer/pdf_view_web_plugin_client.cc
+++ b/components/pdf/renderer/pdf_view_web_plugin_client.cc
@@ -4,12 +4,39 @@
 
 #include "components/pdf/renderer/pdf_view_web_plugin_client.h"
 
-#include "base/check.h"
+#include <memory>
+#include <string>
+#include <utility>
+
+#include "base/check_op.h"
+#include "base/values.h"
 #include "components/pdf/renderer/pdf_accessibility_tree.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/v8_value_converter.h"
+#include "net/cookies/site_for_cookies.h"
 #include "printing/buildflags/buildflags.h"
+#include "third_party/blink/public/platform/web_security_origin.h"
+#include "third_party/blink/public/platform/web_string.h"
+#include "third_party/blink/public/platform/web_url.h"
+#include "third_party/blink/public/platform/web_vector.h"
+#include "third_party/blink/public/web/blink.h"
+#include "third_party/blink/public/web/web_associated_url_loader.h"
+#include "third_party/blink/public/web/web_document.h"
+#include "third_party/blink/public/web/web_dom_message_event.h"
 #include "third_party/blink/public/web/web_element.h"
+#include "third_party/blink/public/web/web_frame_widget.h"
+#include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/public/web/web_plugin_container.h"
+#include "third_party/blink/public/web/web_serialized_script_value.h"
+#include "third_party/blink/public/web/web_view.h"
+#include "third_party/blink/public/web/web_widget.h"
+#include "ui/display/screen_info.h"
+#include "ui/gfx/geometry/point_f.h"
+#include "ui/gfx/geometry/rect.h"
+#include "v8/include/v8-context.h"
+#include "v8/include/v8-isolate.h"
+#include "v8/include/v8-local-handle.h"
+#include "v8/include/v8-value.h"
 
 #if BUILDFLAG(ENABLE_PRINTING)
 #include "components/printing/renderer/print_render_frame_helper.h"
@@ -20,7 +47,8 @@
 PdfViewWebPluginClient::PdfViewWebPluginClient(
     content::RenderFrame* render_frame)
     : render_frame_(render_frame),
-      v8_value_converter_(content::V8ValueConverter::Create()) {
+      v8_value_converter_(content::V8ValueConverter::Create()),
+      isolate_(blink::MainThreadIsolate()) {
   DCHECK(render_frame_);
 }
 
@@ -32,18 +60,176 @@
   return v8_value_converter_->FromV8Value(value, context);
 }
 
-v8::Local<v8::Value> PdfViewWebPluginClient::ToV8Value(
-    const base::Value& value,
-    v8::Local<v8::Context> context) {
-  return v8_value_converter_->ToV8Value(&value, context);
-}
-
 base::WeakPtr<chrome_pdf::PdfViewWebPlugin::Client>
 PdfViewWebPluginClient::GetWeakPtr() {
   return weak_factory_.GetWeakPtr();
 }
 
-void PdfViewWebPluginClient::Print(const blink::WebElement& element) {
+void PdfViewWebPluginClient::SetPluginContainer(
+    blink::WebPluginContainer* container) {
+  plugin_container_ = container;
+}
+
+blink::WebPluginContainer* PdfViewWebPluginClient::PluginContainer() {
+  return plugin_container_;
+}
+
+net::SiteForCookies PdfViewWebPluginClient::SiteForCookies() const {
+  return plugin_container_->GetDocument().SiteForCookies();
+}
+
+blink::WebURL PdfViewWebPluginClient::CompleteURL(
+    const blink::WebString& partial_url) const {
+  return plugin_container_->GetDocument().CompleteURL(partial_url);
+}
+
+void PdfViewWebPluginClient::PostMessage(base::Value::Dict message) {
+  v8::Isolate::Scope isolate_scope(isolate_);
+  v8::HandleScope handle_scope(isolate_);
+  v8::Local<v8::Context> context = GetFrame()->MainWorldScriptContext();
+  DCHECK_EQ(isolate_, context->GetIsolate());
+  v8::Context::Scope context_scope(context);
+
+  base::Value message_as_value(std::move(message));
+  v8::Local<v8::Value> converted_message =
+      v8_value_converter_->ToV8Value(&message_as_value, context);
+
+  plugin_container_->EnqueueMessageEvent(
+      blink::WebSerializedScriptValue::Serialize(isolate_, converted_message));
+}
+
+void PdfViewWebPluginClient::Invalidate() {
+  plugin_container_->Invalidate();
+}
+
+void PdfViewWebPluginClient::RequestTouchEventType(
+    blink::WebPluginContainer::TouchEventRequestType request_type) {
+  plugin_container_->RequestTouchEventType(request_type);
+}
+
+void PdfViewWebPluginClient::ReportFindInPageMatchCount(int identifier,
+                                                        int total,
+                                                        bool final_update) {
+  plugin_container_->ReportFindInPageMatchCount(identifier, total,
+                                                final_update);
+}
+
+void PdfViewWebPluginClient::ReportFindInPageSelection(int identifier,
+                                                       int index) {
+  plugin_container_->ReportFindInPageSelection(identifier, index);
+}
+
+void PdfViewWebPluginClient::ReportFindInPageTickmarks(
+    const std::vector<gfx::Rect>& tickmarks) {
+  blink::WebLocalFrame* frame = GetFrame();
+  if (frame) {
+    frame->SetTickmarks(blink::WebElement(),
+                        blink::WebVector<gfx::Rect>(tickmarks));
+  }
+}
+
+float PdfViewWebPluginClient::DeviceScaleFactor() {
+  // Do not rely on `blink::WebPluginContainer::DeviceScaleFactor()`, since it
+  // doesn't always reflect the real screen's device scale. Instead, get the
+  // device scale from the top-level frame's `display::ScreenInfo`.
+  blink::WebWidget* widget = GetFrame()->LocalRoot()->FrameWidget();
+  return widget->GetOriginalScreenInfo().device_scale_factor;
+}
+
+gfx::PointF PdfViewWebPluginClient::GetScrollPosition() {
+  // Note that `blink::WebLocalFrame::GetScrollOffset()` actually returns a
+  // scroll position (a point relative to the top-left corner).
+  return GetFrame()->GetScrollOffset();
+}
+
+void PdfViewWebPluginClient::UsePluginAsFindHandler() {
+  plugin_container_->UsePluginAsFindHandler();
+}
+
+void PdfViewWebPluginClient::SetReferrerForRequest(
+    blink::WebURLRequest& request,
+    const blink::WebURL& referrer_url) {
+  GetFrame()->SetReferrerForRequest(request, referrer_url);
+}
+
+void PdfViewWebPluginClient::Alert(const blink::WebString& message) {
+  blink::WebLocalFrame* frame = GetFrame();
+  if (frame)
+    frame->Alert(message);
+}
+
+bool PdfViewWebPluginClient::Confirm(const blink::WebString& message) {
+  blink::WebLocalFrame* frame = GetFrame();
+  return frame && frame->Confirm(message);
+}
+
+blink::WebString PdfViewWebPluginClient::Prompt(
+    const blink::WebString& message,
+    const blink::WebString& default_value) {
+  blink::WebLocalFrame* frame = GetFrame();
+  return frame ? frame->Prompt(message, default_value) : blink::WebString();
+}
+
+void PdfViewWebPluginClient::TextSelectionChanged(
+    const blink::WebString& selection_text,
+    uint32_t offset,
+    const gfx::Range& range) {
+  // Focus the plugin's containing frame before changing the text selection.
+  // TODO(crbug.com/1234559): Would it make more sense not to change the text
+  // selection at all in this case? Maybe we only have this problem because we
+  // support a "selectAll" message.
+  blink::WebLocalFrame* frame = GetFrame();
+  frame->View()->SetFocusedFrame(frame);
+
+  frame->TextSelectionChanged(selection_text, offset, range);
+}
+
+std::unique_ptr<blink::WebAssociatedURLLoader>
+PdfViewWebPluginClient::CreateAssociatedURLLoader(
+    const blink::WebAssociatedURLLoaderOptions& options) {
+  return GetFrame()->CreateAssociatedURLLoader(options);
+}
+
+void PdfViewWebPluginClient::UpdateTextInputState() {
+  // `widget` is null in Print Preview.
+  auto* widget = GetFrame()->FrameWidget();
+  if (widget)
+    widget->UpdateTextInputState();
+}
+
+void PdfViewWebPluginClient::UpdateSelectionBounds() {
+  // `widget` is null in Print Preview.
+  auto* widget = GetFrame()->FrameWidget();
+  if (widget)
+    widget->UpdateSelectionBounds();
+}
+
+std::string PdfViewWebPluginClient::GetEmbedderOriginString() {
+  auto* frame = GetFrame();
+  if (!frame)
+    return {};
+
+  auto* parent_frame = frame->Parent();
+  if (!parent_frame)
+    return {};
+
+  return GURL(parent_frame->GetSecurityOrigin().ToString().Utf8()).spec();
+}
+
+bool PdfViewWebPluginClient::HasFrame() const {
+  return plugin_container_ && GetFrame();
+}
+
+blink::WebLocalFrame* PdfViewWebPluginClient::GetFrame() const {
+  return plugin_container_->GetDocument().GetFrame();
+}
+
+blink::WebLocalFrameClient* PdfViewWebPluginClient::GetWebLocalFrameClient() {
+  return GetFrame()->Client();
+}
+
+void PdfViewWebPluginClient::Print() {
+  blink::WebElement element = plugin_container_->GetElement();
   DCHECK(!element.IsNull());
 #if BUILDFLAG(ENABLE_PRINTING)
   printing::PrintRenderFrameHelper::Get(render_frame_)->PrintNode(element);
diff --git a/components/pdf/renderer/pdf_view_web_plugin_client.h b/components/pdf/renderer/pdf_view_web_plugin_client.h
index 5ddf93d..fd731d95 100644
--- a/components/pdf/renderer/pdf_view_web_plugin_client.h
+++ b/components/pdf/renderer/pdf_view_web_plugin_client.h
@@ -10,11 +10,20 @@
 #include "base/memory/weak_ptr.h"
 #include "pdf/pdf_view_web_plugin.h"
 
+namespace blink {
+class WebLocalFrame;
+class WebPluginContainer;
+}  // namespace blink
+
 namespace content {
 class RenderFrame;
 class V8ValueConverter;
 }  // namespace content
 
+namespace v8 {
+class Isolate;
+}  // namespace v8
+
 namespace pdf {
 
 class PdfViewWebPluginClient : public chrome_pdf::PdfViewWebPlugin::Client {
@@ -28,19 +37,55 @@
   std::unique_ptr<base::Value> FromV8Value(
       v8::Local<v8::Value> value,
       v8::Local<v8::Context> context) override;
-  v8::Local<v8::Value> ToV8Value(const base::Value& value,
-                                 v8::Local<v8::Context> context) override;
   base::WeakPtr<chrome_pdf::PdfViewWebPlugin::Client> GetWeakPtr() override;
-  void Print(const blink::WebElement& element) override;
+  void SetPluginContainer(blink::WebPluginContainer* container) override;
+  blink::WebPluginContainer* PluginContainer() override;
+  net::SiteForCookies SiteForCookies() const override;
+  blink::WebURL CompleteURL(const blink::WebString& partial_url) const override;
+  void PostMessage(base::Value::Dict message) override;
+  void Invalidate() override;
+  void RequestTouchEventType(
+      blink::WebPluginContainer::TouchEventRequestType request_type) override;
+  void ReportFindInPageMatchCount(int identifier,
+                                  int total,
+                                  bool final_update) override;
+  void ReportFindInPageSelection(int identifier, int index) override;
+  void ReportFindInPageTickmarks(
+      const std::vector<gfx::Rect>& tickmarks) override;
+  float DeviceScaleFactor() override;
+  gfx::PointF GetScrollPosition() override;
+  void UsePluginAsFindHandler() override;
+  void SetReferrerForRequest(blink::WebURLRequest& request,
+                             const blink::WebURL& referrer_url) override;
+  void Alert(const blink::WebString& message) override;
+  bool Confirm(const blink::WebString& message) override;
+  blink::WebString Prompt(const blink::WebString& message,
+                          const blink::WebString& default_value) override;
+  void TextSelectionChanged(const blink::WebString& selection_text,
+                            uint32_t offset,
+                            const gfx::Range& range) override;
+  std::unique_ptr<blink::WebAssociatedURLLoader> CreateAssociatedURLLoader(
+      const blink::WebAssociatedURLLoaderOptions& options) override;
+  void UpdateTextInputState() override;
+  void UpdateSelectionBounds() override;
+  std::string GetEmbedderOriginString() override;
+  bool HasFrame() const override;
+  blink::WebLocalFrameClient* GetWebLocalFrameClient() override;
+  void Print() override;
   void RecordComputedAction(const std::string& action) override;
   std::unique_ptr<chrome_pdf::PdfAccessibilityDataHandler>
   CreateAccessibilityDataHandler(
       chrome_pdf::PdfAccessibilityActionHandler* action_handler) override;
 
  private:
+  blink::WebLocalFrame* GetFrame() const;
+
   content::RenderFrame* const render_frame_;
 
   const std::unique_ptr<content::V8ValueConverter> v8_value_converter_;
+  v8::Isolate* const isolate_;
+
+  blink::WebPluginContainer* plugin_container_;
 
   base::WeakPtrFactory<PdfViewWebPluginClient> weak_factory_{this};
 };
diff --git a/components/permissions/BUILD.gn b/components/permissions/BUILD.gn
index de614886..c3ead7f 100644
--- a/components/permissions/BUILD.gn
+++ b/components/permissions/BUILD.gn
@@ -57,6 +57,8 @@
     "contexts/webxr_permission_context.h",
     "contexts/window_placement_permission_context.cc",
     "contexts/window_placement_permission_context.h",
+    "notifications_engagement_service.cc",
+    "notifications_engagement_service.h",
     "object_permission_context_base.cc",
     "object_permission_context_base.h",
     "permission_actions_history.cc",
diff --git a/components/permissions/features.cc b/components/permissions/features.cc
index 5dceacc2..71d18ed 100644
--- a/components/permissions/features.cc
+++ b/components/permissions/features.cc
@@ -24,6 +24,9 @@
     "BlockRepeatedNotificationPermissionPrompts",
     base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kNotificationInteractionHistory{
+    "NotificationInteractionHistory", base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kOneTimeGeolocationPermission{
     "OneTimeGeolocationPermission", base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/components/permissions/features.h b/components/permissions/features.h
index 2c17e64..ccb7478 100644
--- a/components/permissions/features.h
+++ b/components/permissions/features.h
@@ -23,6 +23,9 @@
 extern const base::Feature kBlockRepeatedNotificationPermissionPrompts;
 
 COMPONENT_EXPORT(PERMISSIONS_COMMON)
+extern const base::Feature kNotificationInteractionHistory;
+
+COMPONENT_EXPORT(PERMISSIONS_COMMON)
 extern const base::Feature kOneTimeGeolocationPermission;
 
 COMPONENT_EXPORT(PERMISSIONS_COMMON)
diff --git a/components/permissions/notifications_engagement_service.cc b/components/permissions/notifications_engagement_service.cc
new file mode 100644
index 0000000..2be8a59
--- /dev/null
+++ b/components/permissions/notifications_engagement_service.cc
@@ -0,0 +1,154 @@
+// Copyright 2022 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 "components/permissions/notifications_engagement_service.h"
+
+#include "base/logging.h"
+#include "components/permissions/permissions_client.h"
+#include "url/gurl.h"
+
+namespace permissions {
+
+namespace {
+
+// For each origin that has the  |ContentSettingsType::NOTIFICATIONS|
+// permission, we record the number of notifications that were displayed
+// and interacted with. The data is stored in the website setting
+// |NOTIFICATION_INTERACTIONS|  keyed to the same origin. The internal
+// structure of this metadata is a dictionary:
+//
+//   {"1644163200": {"display_count": 3},  # Implied click_count = 0.
+//    "1644768000": {"display_count": 6, "click_count": 1}}
+//
+// Where the value stored for  date_i  summarizes notification activity
+// for the time period between  date_i  and  date_i+1  (or today for the
+// last entry). Currently, the dates will be space one week apart, and
+// correspond to Monday midnights.
+
+constexpr char kEngagementKey[] = "click_count";
+constexpr char kDisplayedKey[] = "display_count";
+
+// Entries in notifications engagement expire after they become this old.
+constexpr base::TimeDelta kMaxAge = base::Days(90);
+
+// Discards notification interactions stored in `engagement` for time
+// periods older than |kMaxAge|.
+void EraseStaleEntries(base::Value::Dict& engagement) {
+  const base::Time cutoff = base::Time::Now() - kMaxAge;
+
+  for (auto it = engagement.begin(); it != engagement.end();) {
+    const auto& [key, value] = *it;
+
+    absl::optional<base::Time> last_time =
+        NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(key);
+    if (!last_time.has_value() || last_time.value() < cutoff) {
+      it = engagement.erase(it);
+      continue;
+    }
+    ++it;
+  }
+}
+}  // namespace
+
+NotificationsEngagementService::NotificationsEngagementService(
+    content::BrowserContext* context,
+    PrefService* pref_service)
+    : pref_service_(pref_service) {
+  settings_map_ =
+      permissions::PermissionsClient::Get()->GetSettingsMap(context);
+}
+
+void NotificationsEngagementService::Shutdown() {
+  settings_map_ = nullptr;
+}
+
+void NotificationsEngagementService::RecordNotificationDisplayed(
+    const GURL& url) {
+  IncrementCounts(url, 1 /*display_count_delta*/, 0 /*click_count_delta*/);
+}
+
+void NotificationsEngagementService::RecordNotificationInteraction(
+    const GURL& url) {
+  IncrementCounts(url, 0 /*display_count_delta*/, 1 /*click_count_delta*/);
+}
+
+void NotificationsEngagementService::IncrementCounts(const GURL& url,
+                                                     int display_count_delta,
+                                                     int click_count_delta) {
+  base::Value engagement_as_value = settings_map_->GetWebsiteSetting(
+      url, GURL(), ContentSettingsType::NOTIFICATION_INTERACTIONS, nullptr);
+
+  base::Value::Dict engagement;
+  if (engagement_as_value.is_dict())
+    engagement = std::move(engagement_as_value.GetDict());
+
+  std::string date = GetBucketLabelForLastMonday(base::Time::Now());
+  if (date == std::string())
+    return;
+
+  EraseStaleEntries(engagement);
+  base::Value::Dict* bucket = engagement.FindDict(date);
+  if (!bucket) {
+    bucket = &engagement.Set(date, base::Value::Dict())->GetDict();
+  }
+  if (display_count_delta) {
+    bucket->Set(kDisplayedKey, display_count_delta +
+                                   bucket->FindInt(kDisplayedKey).value_or(0));
+  }
+  if (click_count_delta) {
+    bucket->Set(
+        kEngagementKey,
+        click_count_delta + bucket->FindInt(kEngagementKey).value_or(0));
+  }
+
+  // Set the website setting of this origin with the updated |engagement|.
+  settings_map_->SetWebsiteSettingDefaultScope(
+      url, GURL(), ContentSettingsType::NOTIFICATION_INTERACTIONS,
+      base::Value(std::move(engagement)));
+}
+
+// static
+std::string NotificationsEngagementService::GetBucketLabelForLastMonday(
+    base::Time date) {
+  // For human-readability, return the UTC Monday midnight on the same date as
+  // local midnight.
+  base::Time::Exploded date_exploded;
+  date.LocalExplode(&date_exploded);
+  base::Time local_monday =
+      (date - base::Days((date_exploded.day_of_week + 6) % 7)).LocalMidnight();
+
+  base::Time::Exploded local_monday_exploded;
+  local_monday.LocalExplode(&local_monday_exploded);
+  // Intentionally converting a locally exploded time, to an UTC time, so that
+  // the Monday Midnight in UTC is on the same date the last Monday on local
+  // time.
+  base::Time last_monday;
+  bool converted =
+      base::Time::FromUTCExploded(local_monday_exploded, &last_monday);
+
+  if (converted)
+    return base::NumberToString(last_monday.base::Time::ToTimeT());
+
+  return std::string();
+}
+
+// static
+absl::optional<base::Time>
+NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(
+    const std::string& label) {
+  int maybe_engagement_time;
+  base::Time local_period_begin;
+
+  // Store the time as local time.
+  if (base::StringToInt(label.c_str(), &maybe_engagement_time)) {
+    base::Time::Exploded date_exploded;
+    base::Time::FromTimeT(maybe_engagement_time).UTCExplode(&date_exploded);
+    if (base::Time::FromLocalExploded(date_exploded, &local_period_begin))
+      return local_period_begin;
+  }
+
+  return absl::nullopt;
+}
+
+}  // namespace permissions
diff --git a/components/permissions/notifications_engagement_service.h b/components/permissions/notifications_engagement_service.h
new file mode 100644
index 0000000..c0d4e67
--- /dev/null
+++ b/components/permissions/notifications_engagement_service.h
@@ -0,0 +1,64 @@
+// Copyright 2022 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 COMPONENTS_PERMISSIONS_NOTIFICATIONS_ENGAGEMENT_SERVICE_H_
+#define COMPONENTS_PERMISSIONS_NOTIFICATIONS_ENGAGEMENT_SERVICE_H_
+
+#include "base/memory/raw_ptr.h"
+#include "base/time/time.h"
+#include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/keyed_service/core/keyed_service.h"
+
+class GURL;
+class PrefService;
+
+namespace content {
+class BrowserContext;
+}  // namespace content
+
+namespace permissions {
+
+// This class records and stores notification engagement per origin for the
+// past 90 days. Engagements per origin are bucketed by week: A notification
+// engagement or display is assigned to the last Monday midnight in local time.
+class NotificationsEngagementService : public KeyedService {
+ public:
+  explicit NotificationsEngagementService(content::BrowserContext* context,
+                                          PrefService* pref_service);
+
+  NotificationsEngagementService(const NotificationsEngagementService&) =
+      delete;
+  NotificationsEngagementService& operator=(
+      const NotificationsEngagementService&) = delete;
+
+  ~NotificationsEngagementService() override = default;
+
+  // KeyedService implementation.
+  void Shutdown() override;
+
+  void RecordNotificationDisplayed(const GURL& url);
+  void RecordNotificationInteraction(const GURL& url);
+
+  // ISO8601 defines Monday as the first day of the week. Additionally, in most
+  // of the world the workweek starts with Monday, so Monday is used
+  // specifically here, as notification usage is a function of work/personal
+  // settings.
+  static std::string GetBucketLabelForLastMonday(base::Time time);
+  static absl::optional<base::Time> ParsePeriodBeginFromBucketLabel(
+      const std::string& label);
+
+ private:
+  void IncrementCounts(const GURL& url,
+                       const int display_count_delta,
+                       const int click_count_delta);
+
+  // Used to update the notification engagement per URL.
+  raw_ptr<HostContentSettingsMap> settings_map_;
+
+  raw_ptr<PrefService> pref_service_;
+};
+
+}  // namespace permissions
+
+#endif  // COMPONENTS_PERMISSIONS_NOTIFICATIONS_ENGAGEMENT_SERVICE_H_
diff --git a/components/policy/core/common/policy_loader_ios.mm b/components/policy/core/common/policy_loader_ios.mm
index df43149..5faa0610 100644
--- a/components/policy/core/common/policy_loader_ios.mm
+++ b/components/policy/core/common/policy_loader_ios.mm
@@ -160,7 +160,9 @@
   }
 
   // Handle the case of a JSON-encoded string for a dict policy.
-  if (schema.type() == base::Value::Type::DICTIONARY && value.is_string()) {
+  if ((schema.type() == base::Value::Type::DICTIONARY ||
+       schema.type() == base::Value::Type::LIST) &&
+      value.is_string()) {
     absl::optional<base::Value> decoded_value = base::JSONReader::Read(
         value.GetString(), base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS);
     if (decoded_value.has_value()) {
diff --git a/components/policy/core/common/policy_loader_ios_unittest.mm b/components/policy/core/common/policy_loader_ios_unittest.mm
index d5add46..c58c38e 100644
--- a/components/policy/core/common/policy_loader_ios_unittest.mm
+++ b/components/policy/core/common/policy_loader_ios_unittest.mm
@@ -132,7 +132,17 @@
   NSString* key = base::SysUTF8ToNSString(policy_name);
   base::ScopedCFTypeRef<CFPropertyListRef> value(
       ValueToProperty(*policy_value));
-  AddPolicies(@{key : (__bridge NSArray*)(value.get())});
+
+  if (encode_complex_data_as_json_) {
+    // Convert |policy_value| to a JSON-encoded string.
+    std::string json_string;
+    JSONStringValueSerializer serializer(&json_string);
+    ASSERT_TRUE(serializer.Serialize(*policy_value));
+
+    AddPolicies(@{key : base::SysUTF8ToNSString(json_string)});
+  } else {
+    AddPolicies(@{key : (__bridge NSArray*)(value.get())});
+  }
 }
 
 void TestHarness::InstallDictionaryPolicy(const std::string& policy_name,
diff --git a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h
index ffdbc3e..26dc103 100644
--- a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h
+++ b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h
@@ -20,6 +20,7 @@
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/accelerated_widget_mac/ca_transaction_observer.h"
 #include "ui/accelerated_widget_mac/display_ca_layer_tree.h"
 #include "ui/base/cocoa/command_dispatcher.h"
@@ -338,7 +339,6 @@
   std::unique_ptr<CocoaWindowMoveLoop> window_move_loop_;
   ui::ModalType modal_type_ = ui::MODAL_TYPE_NONE;
   bool is_translucent_window_ = false;
-  bool is_headless_mode_window_ = false;
   id key_down_event_monitor_ = nil;
 
   // Intended for PWAs with window controls overlay display override. These two
@@ -385,11 +385,6 @@
   // currently hidden due to having a hidden parent.
   bool wants_to_be_visible_ = false;
 
-  // This tracks headless window visibility state. In headless mode
-  // the platform window is always hidden, so we use this boolean
-  // to track the window's requested visibility state.
-  bool headless_window_visibility_state_ = false;
-
   // If true, then ignore interactions with CATransactionCoordinator until the
   // first frame arrives.
   bool ca_transaction_sync_suppressed_ = false;
@@ -402,6 +397,21 @@
   // on the first call to SetVisibilityState().
   std::vector<uint8_t> pending_restoration_data_;
 
+  // A structure to hold a headless mode window state. This is present iff the
+  // window has been created in headless mode.
+  struct HeadlessModeWindow {
+    // This tracks headless window visibility state. In headless mode
+    // the platform window is always hidden, so we use this boolean
+    // to track the window's expected visibility state.
+    bool visibility_state = false;
+    // This tracks headless window fullscreen state. In headless mode the
+    // platform window is never made fullscreen because AppKit implicitly
+    // makes fullscreen windows visible.
+    bool fullscreen_state = false;
+  };
+
+  absl::optional<HeadlessModeWindow> headless_mode_window_;
+
   display::ScopedDisplayObserver display_observer_{this};
 
   mojo::AssociatedReceiver<remote_cocoa::mojom::NativeWidgetNSWindow>
diff --git a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
index dbbe949..592122f 100644
--- a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
+++ b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
@@ -438,9 +438,11 @@
     mojom::NativeWidgetNSWindowInitParamsPtr params) {
   modal_type_ = params->modal_type;
   is_translucent_window_ = params->is_translucent;
-  is_headless_mode_window_ = params->is_headless_mode_window;
   pending_restoration_data_ = params->state_restoration_data;
 
+  if (params->is_headless_mode_window)
+    headless_mode_window_ = absl::make_optional<HeadlessModeWindow>();
+
   // Register for application hide notifications so that visibility can be
   // properly tracked. This is not done in the delegate so that the lifetime is
   // tied to the C++ object, rather than the delegate (which may be reference
@@ -675,10 +677,10 @@
   // changing its visibility state just maintain a local flag to track the
   // expected visibility state and lie to the upper layer pretending the
   // window did change its visibility state.
-  if (is_headless_mode_window_) {
-    headless_window_visibility_state_ =
+  if (headless_mode_window_) {
+    headless_mode_window_->visibility_state =
         new_state != WindowVisibilityState::kHideWindow;
-    host_->OnVisibilityChanged(headless_window_visibility_state_);
+    host_->OnVisibilityChanged(headless_mode_window_->visibility_state);
     return;
   }
 
@@ -1226,6 +1228,23 @@
 }
 
 void NativeWidgetNSWindowBridge::FullscreenControllerToggleFullscreen() {
+  // AppKit implicitly makes the fullscreen window visible, so avoid going
+  // fullscreen in headless mode. Instead, toggle the expected fullscreen state
+  // and fake the relevant callbacks for the fullscreen controller to
+  // believe the fullscreen state was toggled.
+  if (headless_mode_window_) {
+    headless_mode_window_->fullscreen_state =
+        !headless_mode_window_->fullscreen_state;
+    if (headless_mode_window_->fullscreen_state) {
+      fullscreen_controller_.OnWindowWillEnterFullscreen();
+      fullscreen_controller_.OnWindowDidEnterFullscreen();
+    } else {
+      fullscreen_controller_.OnWindowWillExitFullscreen();
+      fullscreen_controller_.OnWindowDidExitFullscreen();
+    }
+    return;
+  }
+
   [window_ toggleFullScreen:nil];
 }
 
@@ -1621,8 +1640,8 @@
   // returning the actual platform window visibility state tracked by
   // OnVisibilityChanged() callback, return the expected visibility state
   // maintained by SetVisibilityState() call.
-  return is_headless_mode_window_ ? headless_window_visibility_state_
-                                  : window_visible_;
+  return headless_mode_window_ ? headless_mode_window_->visibility_state
+                               : window_visible_;
 }
 
 }  // namespace remote_cocoa
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
index 279acb19..ba7a1a7f 100644
--- a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
+++ b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
@@ -68,7 +68,7 @@
 
   DCHECK(task_runner_);
   DCHECK(clock);
-  DCHECK(init_params->profile_prefs && init_params->local_state);
+  DCHECK(init_params->profile_prefs);
 
   if (init_params->storage_service) {
     // Test only:
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_impl.h b/components/segmentation_platform/internal/segmentation_platform_service_impl.h
index b30abaf..84d487c5 100644
--- a/components/segmentation_platform/internal/segmentation_platform_service_impl.h
+++ b/components/segmentation_platform/internal/segmentation_platform_service_impl.h
@@ -61,7 +61,6 @@
     history::HistoryService* history_service = nullptr;
     base::FilePath storage_dir;
     PrefService* profile_prefs = nullptr;
-    PrefService* local_state = nullptr;
 
     std::unique_ptr<ModelProviderFactory> model_provider;
     UkmDataManager* ukm_data_manager = nullptr;
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_test_base.cc b/components/segmentation_platform/internal/segmentation_platform_service_test_base.cc
index c9fda10..092803ec 100644
--- a/components/segmentation_platform/internal/segmentation_platform_service_test_base.cc
+++ b/components/segmentation_platform/internal/segmentation_platform_service_test_base.cc
@@ -115,7 +115,6 @@
   params->model_provider =
       std::make_unique<TestModelProviderFactory>(&model_provider_data_);
   params->profile_prefs = &pref_service_;
-  params->local_state = &pref_service_;
   params->history_service = history_service;
   params->task_runner = task_runner_;
   params->clock = &test_clock_;
diff --git a/components/services/screen_ai/BUILD.gn b/components/services/screen_ai/BUILD.gn
index 61614e6..f3614e27 100644
--- a/components/services/screen_ai/BUILD.gn
+++ b/components/services/screen_ai/BUILD.gn
@@ -20,19 +20,21 @@
   ]
 }
 
-source_set("screen_ai_sandbox_hook") {
-  sources = [
-    "sandbox/screen_ai_sandbox_hook_linux.cc",
-    "sandbox/screen_ai_sandbox_hook_linux.h",
-  ]
+if (!is_mac) {
+  source_set("screen_ai_sandbox_hook") {
+    sources = [
+      "sandbox/screen_ai_sandbox_hook_linux.cc",
+      "sandbox/screen_ai_sandbox_hook_linux.h",
+    ]
 
-  deps = [
-    "//base",
-    "//components/component_updater",
-    "//components/services/screen_ai/public/cpp:utilities",
-    "//sandbox/linux:sandbox_services",
-    "//ui/accessibility:ax_base",
-  ]
+    deps = [
+      "//base",
+      "//components/component_updater",
+      "//components/services/screen_ai/public/cpp:utilities",
+      "//sandbox/linux:sandbox_services",
+      "//ui/accessibility:ax_base",
+    ]
 
-  public_deps = [ "//sandbox/policy" ]
+    public_deps = [ "//sandbox/policy" ]
+  }
 }
diff --git a/components/services/screen_ai/buildflags/features.gni b/components/services/screen_ai/buildflags/features.gni
index f09f125..4b48eb12 100644
--- a/components/services/screen_ai/buildflags/features.gni
+++ b/components/services/screen_ai/buildflags/features.gni
@@ -7,5 +7,6 @@
 
 declare_args() {
   # Screen AI service is still not supported on other platforms.
-  enable_screen_ai_service = is_linux || is_chromeos_ash || is_chromeos_lacros
+  enable_screen_ai_service =
+      is_linux || is_mac || is_chromeos_ash || is_chromeos_lacros
 }
diff --git a/components/services/storage/dom_storage/local_storage_impl.cc b/components/services/storage/dom_storage/local_storage_impl.cc
index bf608371..b35524e8 100644
--- a/components/services/storage/dom_storage/local_storage_impl.cc
+++ b/components/services/storage/dom_storage/local_storage_impl.cc
@@ -271,15 +271,6 @@
 
     context_->OnCommitResult(status);
   }
-
-  void OnMapLoaded(leveldb::Status status) override {
-    if (!status.ok()) {
-      UMA_HISTOGRAM_ENUMERATION("LocalStorageContext.MapLoadError",
-                                leveldb_env::GetLevelDBStatusUMAValue(status),
-                                leveldb_env::LEVELDB_STATUS_MAX);
-    }
-  }
-
   void Bind(mojo::PendingReceiver<blink::mojom::StorageArea> receiver) {
     has_bindings_ = true;
     storage_area()->Bind(std::move(receiver));
diff --git a/components/services/unzip/BUILD.gn b/components/services/unzip/BUILD.gn
index 579d80d..a21e47ca 100644
--- a/components/services/unzip/BUILD.gn
+++ b/components/services/unzip/BUILD.gn
@@ -62,7 +62,6 @@
     "//components/test/data/unzip_service/SJIS 13.zip",
     "//components/test/data/unzip_service/UTF8 (Bug 903664).zip",
     "//components/test/data/unzip_service/bad_archive.zip",
-    "//components/test/data/unzip_service/bug953599.zip",
     "//components/test/data/unzip_service/good_archive.zip",
   ]
   outputs = [ "{{bundle_resources_dir}}/" +
diff --git a/components/services/unzip/public/cpp/unzip_unittest.cc b/components/services/unzip/public/cpp/unzip_unittest.cc
index 5289b2f..d1ae016 100644
--- a/components/services/unzip/public/cpp/unzip_unittest.cc
+++ b/components/services/unzip/public/cpp/unzip_unittest.cc
@@ -53,12 +53,6 @@
   return file_count;
 }
 
-base::FilePath GetFirstFilePath(const base::FilePath& dir) {
-  base::FileEnumerator file_enumerator(dir, /*recursive=*/true,
-                                       base::FileEnumerator::FILES);
-  return file_enumerator.Next();
-}
-
 class UnzipTest : public testing::Test {
  public:
   UnzipTest() = default;
@@ -251,13 +245,6 @@
   }
 }
 
-TEST_F(UnzipTest, DecodeExtendedHeader) {
-  EXPECT_TRUE(DoUnzip(GetArchivePath("bug953599.zip"), unzip_dir_));
-
-  base::FilePath fileName = GetFirstFilePath(unzip_dir_);
-  EXPECT_EQ(FILE_PATH_LITERAL("새 문서.txt"), fileName.BaseName().value());
-}
-
 TEST_F(UnzipTest, GetExtractedSize) {
   mojom::Size result = DoGetExtractedSize(GetArchivePath("good_archive.zip"));
   EXPECT_TRUE(result.is_valid);
diff --git a/components/test/data/unzip_service/bug953599.zip b/components/test/data/unzip_service/bug953599.zip
deleted file mode 100644
index bb2b1c7..0000000
--- a/components/test/data/unzip_service/bug953599.zip
+++ /dev/null
Binary files differ
diff --git a/components/tracing/common/background_tracing_state_manager.h b/components/tracing/common/background_tracing_state_manager.h
index 148b1f0b..a3f0677e 100644
--- a/components/tracing/common/background_tracing_state_manager.h
+++ b/components/tracing/common/background_tracing_state_manager.h
@@ -12,6 +12,10 @@
 #include "base/time/time.h"
 #include "components/prefs/pref_service.h"
 
+namespace android_webview {
+class AwTracingDelegateTest;
+}
+
 namespace content {
 class BackgroundTracingConfig;
 }
@@ -80,6 +84,7 @@
  private:
   friend base::NoDestructor<BackgroundTracingStateManager>;
   friend class tracing::BackgroundTracingStateManagerTest;
+  friend class android_webview::AwTracingDelegateTest;
 
   BackgroundTracingStateManager();
   ~BackgroundTracingStateManager();
diff --git a/components/tracing/common/background_tracing_utils.cc b/components/tracing/common/background_tracing_utils.cc
index b52e5e0..0f856ea 100644
--- a/components/tracing/common/background_tracing_utils.cc
+++ b/components/tracing/common/background_tracing_utils.cc
@@ -15,6 +15,7 @@
 #include "base/files/file_util.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "components/tracing/common/tracing_switches.h"
@@ -87,6 +88,11 @@
 
 }  // namespace
 
+void RecordDisallowedMetric(TracingFinalizationDisallowedReason reason) {
+  UMA_HISTOGRAM_ENUMERATION("Tracing.Background.FinalizationDisallowedReason",
+                            reason);
+}
+
 void SetupBackgroundTracingWithOutputFile(
     std::unique_ptr<content::BackgroundTracingConfig> config,
     const base::FilePath& output_file) {
diff --git a/components/tracing/common/background_tracing_utils.h b/components/tracing/common/background_tracing_utils.h
index f32855b..07e0991f 100644
--- a/components/tracing/common/background_tracing_utils.h
+++ b/components/tracing/common/background_tracing_utils.h
@@ -13,6 +13,24 @@
 
 namespace tracing {
 
+// These values are logged to UMA. Entries should not be renumbered and numeric
+// values should never be reused. Please keep in sync with
+// "TracingFinalizationDisallowedReason" in
+// src/tools/metrics/histograms/enums.xml.
+enum class TracingFinalizationDisallowedReason {
+  kIncognitoLaunched = 0,
+  kProfileNotLoaded = 1,
+  kCrashMetricsNotLoaded = 2,
+  kLastSessionCrashed = 3,
+  kMetricsReportingDisabled = 4,
+  kTraceUploadedRecently = 5,
+  kLastTracingSessionDidNotEnd = 6,
+  kMaxValue = kLastTracingSessionDidNotEnd
+};
+
+COMPONENT_EXPORT(BACKGROUND_TRACING_UTILS)
+void RecordDisallowedMetric(TracingFinalizationDisallowedReason reason);
+
 enum class BackgroundTracingSetupMode {
   // Background tracing config comes from a field trial.
   kFromFieldTrial,
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
index d7f4287..9a0ee4f 100644
--- a/content/app/content_main_runner_impl.cc
+++ b/content/app/content_main_runner_impl.cc
@@ -348,9 +348,8 @@
   ZygoteHandle generic_zygote =
       CreateGenericZygote(base::BindOnce(LaunchZygoteHelper));
 
-  // TODO(kerrnel): Investigate doing this without the ZygoteHostImpl as a
-  // proxy. It is currently done this way due to concerns about race
-  // conditions.
+  // This operation is done through the ZygoteHostImpl as a proxy because of
+  // race condition concerns.
   ZygoteHostImpl::GetInstance()->SetRendererSandboxStatus(
       generic_zygote->GetSandboxStatus());
 }
diff --git a/content/browser/accessibility/hit_testing_browsertest.cc b/content/browser/accessibility/hit_testing_browsertest.cc
index 3d9396e..1012f14 100644
--- a/content/browser/accessibility/hit_testing_browsertest.cc
+++ b/content/browser/accessibility/hit_testing_browsertest.cc
@@ -738,15 +738,9 @@
 }
 
 // Timeouts on Linux. TODO(crbug.com/1083805): Enable this test.
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
-#define MAYBE_CachingAsyncHitTestMissesElement_WithPinchZoom \
-  DISABLED_CachingAsyncHitTestMissesElement_WithPinchZoom
-#else
-#define MAYBE_CachingAsyncHitTestMissesElement_WithPinchZoom \
-  CachingAsyncHitTestMissesElement_WithPinchZoom
-#endif
-IN_PROC_BROWSER_TEST_P(AccessibilityHitTestingBrowserTest,
-                       MAYBE_CachingAsyncHitTestMissesElement_WithPinchZoom) {
+IN_PROC_BROWSER_TEST_P(
+    AccessibilityHitTestingBrowserTest,
+    DISABLED_CachingAsyncHitTestMissesElement_WithPinchZoom) {
   ASSERT_TRUE(embedded_test_server()->Start());
 
   EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL)));
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index 491500a..3223f04 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -2568,8 +2568,10 @@
   // 3) Initialize the reasons tree and navigate away to ensure that everything
   // from the old frame has been destroyed.
   BackForwardCacheCanStoreDocumentResultWithTree can_store_result =
-      web_contents()->GetController().GetBackForwardCache().CanStorePageNow(
-          rfh.get());
+      web_contents()
+          ->GetController()
+          .GetBackForwardCache()
+          .GetCurrentBackForwardCacheEligibility(rfh.get());
   ASSERT_TRUE(NavigateToURL(shell(), url_b));
   ASSERT_TRUE(rfh.WaitUntilRenderFrameDeleted());
 
@@ -2888,7 +2890,8 @@
             web_contents()
                 ->GetController()
                 .GetBackForwardCache()
-                .CanStorePageNow(static_cast<RenderFrameHostImpl*>(main_frame));
+                .GetCurrentBackForwardCacheEligibility(
+                    static_cast<RenderFrameHostImpl*>(main_frame));
         EXPECT_TRUE(can_store_result.flattened_reasons.HasNotRestoredReason(
             BackForwardCacheMetrics::NotRestoredReason::kSubframeIsNavigating));
       }));
diff --git a/content/browser/back_forward_cache_no_store_browsertest.cc b/content/browser/back_forward_cache_no_store_browsertest.cc
index 24139e6..fff73c892 100644
--- a/content/browser/back_forward_cache_no_store_browsertest.cc
+++ b/content/browser/back_forward_cache_no_store_browsertest.cc
@@ -25,6 +25,8 @@
 namespace content {
 
 using NotRestoredReason = BackForwardCacheMetrics::NotRestoredReason;
+using NotRestoredReasons =
+    BackForwardCacheCanStoreDocumentResult::NotRestoredReasons;
 
 namespace {
 
@@ -134,6 +136,7 @@
   response.Send(kResponseWithNoCache);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Navigate away. |rfh_a| should enter the bfcache.
   EXPECT_TRUE(NavigateToURL(shell(), url_b));
@@ -149,6 +152,11 @@
 
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStore}, {}, {}, {}, {},
                     FROM_HERE);
+  // Make sure that the tree result also has the same reason.
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(NotRestoredReason::kCacheControlNoStore),
+                  BlockListedFeatures()));
 }
 
 // Test that a page with cache-control:no-store enters bfcache with the flag on,
@@ -186,6 +194,7 @@
   response.Send(kResponseWithNoCache);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Set a normal cookie from JavaScript.
   EXPECT_TRUE(ExecJs(tab_to_be_bfcached, "document.cookie='foo=bar'"));
@@ -213,6 +222,12 @@
   EXPECT_EQ("foo=baz", EvalJs(tab_to_be_bfcached, "document.cookie"));
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStoreCookieModified}, {},
                     {}, {}, {}, FROM_HERE);
+  // Make sure that the tree result also has the same reason.
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(
+                      NotRestoredReason::kCacheControlNoStoreCookieModified),
+                  BlockListedFeatures()));
 }
 
 // Disabled due to flakiness on Cast Audio Linux https://crbug.com/1229182
@@ -243,6 +258,7 @@
   // 1) Load the document and specify no-store for the main resource.
   EXPECT_TRUE(NavigateToURL(tab_to_be_bfcached, url_a));
   RenderFrameHostImplWrapper rfh_a(current_frame_host());
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Set a normal cookie from JavaScript.
   EXPECT_TRUE(ExecJs(tab_to_be_bfcached, "document.cookie='foo=bar'"));
@@ -265,7 +281,13 @@
   EXPECT_EQ("foo=baz", EvalJs(tab_to_be_bfcached, "document.cookie"));
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStoreCookieModified}, {},
                     {}, {}, {}, FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(
+                      NotRestoredReason::kCacheControlNoStoreCookieModified),
+                  BlockListedFeatures()));
   RenderFrameHostImplWrapper rfh_a_2(current_frame_host());
+  rfh_a_2->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 6) Navigate away to b.com. |rfh_a_2| should enter bfcache again.
   EXPECT_TRUE(NavigateToURL(tab_to_be_bfcached, url_b));
@@ -276,6 +298,10 @@
   ASSERT_TRUE(HistoryGoBack(tab_to_be_bfcached->web_contents()));
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStore}, {}, {}, {}, {},
                     FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(NotRestoredReason::kCacheControlNoStore),
+                  BlockListedFeatures()));
 }
 
 // Flaky on Cast Audio Linux https://crbug.com/1229182
@@ -314,6 +340,7 @@
   response.Send(kResponseWithNoCache);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Set a normal cookie from JavaScript.
   EXPECT_TRUE(ExecJs(tab_to_be_bfcached, "document.cookie='foo=bar'"));
@@ -340,6 +367,10 @@
 
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStore}, {}, {}, {}, {},
                     FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(NotRestoredReason::kCacheControlNoStore),
+                  BlockListedFeatures()));
 }
 
 // Test that a page with cache-control:no-store records other not restored
@@ -356,6 +387,7 @@
   // 1) Load the document and specify no-store for the main resource.
   EXPECT_TRUE(NavigateToURL(shell(), url_a));
   RenderFrameHostImplWrapper rfh_a(current_frame_host());
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Navigate away. At this point the page should be in bfcache.
   EXPECT_TRUE(NavigateToURL(shell(), url_b));
@@ -370,6 +402,11 @@
   ExpectNotRestored({NotRestoredReason::kJavaScriptExecution,
                      NotRestoredReason::kCacheControlNoStore},
                     {}, {}, {}, {}, FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(NotRestoredReason::kJavaScriptExecution,
+                                     NotRestoredReason::kCacheControlNoStore),
+                  BlockListedFeatures()));
 }
 
 // Test that a page with cache-control:no-store records other not restored
@@ -388,6 +425,7 @@
   EXPECT_TRUE(NavigateToURL(shell(), url_a));
   RenderFrameHostImplWrapper rfh_a(current_frame_host());
   RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a.get());
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
   // Use blocklisted feature.
   EXPECT_TRUE(ExecJs(rfh_a.get(), "window.foo = new BroadcastChannel('foo');"));
 
@@ -403,6 +441,13 @@
        NotRestoredReason::kCacheControlNoStore},
       {blink::scheduler::WebSchedulerTrackedFeature::kBroadcastChannel}, {}, {},
       {}, FROM_HERE);
+  EXPECT_THAT(
+      GetTreeResult()->GetDocumentResult(),
+      MatchesDocumentResult(
+          NotRestoredReasons(NotRestoredReason::kBlocklistedFeatures,
+                             NotRestoredReason::kCacheControlNoStore),
+          BlockListedFeatures(blink::scheduler::WebSchedulerTrackedFeature::
+                                  kBroadcastChannel)));
 }
 
 // Test that a page with cache-control:no-store records eviction reasons along
@@ -420,6 +465,7 @@
   EXPECT_TRUE(NavigateToURL(shell(), url_a));
   RenderFrameHostImplWrapper rfh_a(current_frame_host());
   RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a.get());
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Navigate away. |rfh_a| should enter bfcache.
   EXPECT_TRUE(NavigateToURL(shell(), url_b));
@@ -428,12 +474,17 @@
   // 3) Evict |rfh_a| by JavaScriptExecution.
   EvictByJavaScript(rfh_a.get());
   delete_observer_rfh_a.WaitUntilDeleted();
+
   // 4) Go back.
   ASSERT_TRUE(HistoryGoBack(web_contents()));
-
   ExpectNotRestored({NotRestoredReason::kJavaScriptExecution,
                      NotRestoredReason::kCacheControlNoStore},
                     {}, {}, {}, {}, FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(NotRestoredReason::kJavaScriptExecution,
+                                     NotRestoredReason::kCacheControlNoStore),
+                  BlockListedFeatures()));
 }
 
 namespace {
@@ -497,6 +548,7 @@
   response.Send(kResponseWithNoCacheWithCookie);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
   EXPECT_EQ("foo=bar", EvalJs(tab_to_be_bfcached, "document.cookie"));
 
   // 2) Navigate away. |rfh_a| should enter bfcache.
@@ -522,6 +574,11 @@
   EXPECT_EQ("foo=baz", EvalJs(tab_to_be_bfcached, "document.cookie"));
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStoreCookieModified}, {},
                     {}, {}, {}, FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(
+                      NotRestoredReason::kCacheControlNoStoreCookieModified),
+                  BlockListedFeatures()));
 }
 
 // Disabled due to flakiness on Cast Audio Linux https://crbug.com/1229182
@@ -563,6 +620,7 @@
   response.Send(kResponseWithNoCacheWithHTTPOnlyCookie);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
   // HTTPOnly cookie should not be accessible from JavaScript.
   EXPECT_EQ("", EvalJs(tab_to_be_bfcached, "document.cookie"));
 
@@ -589,6 +647,12 @@
   ExpectNotRestored(
       {NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified}, {}, {},
       {}, {}, FROM_HERE);
+  EXPECT_THAT(
+      GetTreeResult()->GetDocumentResult(),
+      MatchesDocumentResult(
+          NotRestoredReasons(
+              NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified),
+          BlockListedFeatures()));
 }
 
 // Disabled due to flakiness on Cast Audio Linux https://crbug.com/1229182
@@ -632,6 +696,7 @@
   response.Send(kResponseWithNoCacheWithHTTPOnlyCookie);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Navigate away. |rfh_a| should enter bfcache.
   EXPECT_TRUE(NavigateToURL(tab_to_be_bfcached, url_b));
@@ -657,7 +722,15 @@
   ExpectNotRestored(
       {NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified}, {}, {},
       {}, {}, FROM_HERE);
+  EXPECT_THAT(
+      GetTreeResult()->GetDocumentResult(),
+      MatchesDocumentResult(
+          NotRestoredReasons(
+              NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified),
+          BlockListedFeatures()));
+
   RenderFrameHostImplWrapper rfh_a_2(current_frame_host());
+  rfh_a_2->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 5) Navigate away to b.com. |rfh_a_2| should enter bfcache again.
   EXPECT_TRUE(NavigateToURL(tab_to_be_bfcached, url_b));
@@ -673,6 +746,10 @@
   observer4.Wait();
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStore}, {}, {}, {}, {},
                     FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(NotRestoredReason::kCacheControlNoStore),
+                  BlockListedFeatures()));
 }
 
 class BackForwardCacheBrowserTestRestoreCacheControlNoStoreUnlessCookieChange
@@ -761,6 +838,7 @@
   response.Send(kResponseWithNoCache);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Set a normal cookie from JavaScript.
   EXPECT_TRUE(ExecJs(tab_to_be_bfcached, "document.cookie='foo=bar'"));
@@ -788,6 +866,11 @@
   EXPECT_EQ("foo=baz", EvalJs(tab_to_be_bfcached, "document.cookie"));
   ExpectNotRestored({NotRestoredReason::kCacheControlNoStoreCookieModified}, {},
                     {}, {}, {}, FROM_HERE);
+  EXPECT_THAT(GetTreeResult()->GetDocumentResult(),
+              MatchesDocumentResult(
+                  NotRestoredReasons(
+                      NotRestoredReason::kCacheControlNoStoreCookieModified),
+                  BlockListedFeatures()));
 }
 
 // TODO(https://crbug.com/1231849): flaky on Cast Linux.
@@ -829,6 +912,7 @@
   response.Send(kResponseWithNoCacheWithHTTPOnlyCookie);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Navigate away. |rfh_a| should enter bfcache.
   EXPECT_TRUE(NavigateToURL(tab_to_be_bfcached, url_b));
@@ -855,6 +939,12 @@
   ExpectNotRestored(
       {NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified}, {}, {},
       {}, {}, FROM_HERE);
+  EXPECT_THAT(
+      GetTreeResult()->GetDocumentResult(),
+      MatchesDocumentResult(
+          NotRestoredReasons(
+              NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified),
+          BlockListedFeatures()));
 }
 
 class BackForwardCacheBrowserTestRestoreUnlessHTTPOnlyCookieChange
@@ -996,6 +1086,7 @@
   response.Send(kResponseWithNoCacheWithHTTPOnlyCookie);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Navigate away. |rfh_a| should enter bfcache.
   EXPECT_TRUE(NavigateToURL(tab_to_be_bfcached, url_b));
@@ -1020,6 +1111,12 @@
   ExpectNotRestored(
       {NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified}, {}, {},
       {}, {}, FROM_HERE);
+  EXPECT_THAT(
+      GetTreeResult()->GetDocumentResult(),
+      MatchesDocumentResult(
+          NotRestoredReasons(
+              NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified),
+          BlockListedFeatures()));
 }
 
 // TODO(https://crbug.com/1231849): flaky on Cast Linux.
@@ -1059,6 +1156,7 @@
   response.Send(kResponseWithNoCacheWithHTTPOnlyCookie);
   response.Done();
   observer.Wait();
+  rfh_a->GetBackForwardCacheMetrics()->SetObserverForTesting(this);
 
   // 2) Navigate away. |rfh_a| should enter bfcache.
   EXPECT_TRUE(NavigateToURL(tab_to_be_bfcached, url_b));
@@ -1085,6 +1183,12 @@
   ExpectNotRestored(
       {NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified}, {}, {},
       {}, {}, FROM_HERE);
+  EXPECT_THAT(
+      GetTreeResult()->GetDocumentResult(),
+      MatchesDocumentResult(
+          NotRestoredReasons(
+              NotRestoredReason::kCacheControlNoStoreHTTPOnlyCookieModified),
+          BlockListedFeatures()));
 }
 
 }  // namespace content
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc
index 3ffdcf4..d9775a8c 100644
--- a/content/browser/browser_interface_binders.cc
+++ b/content/browser/browser_interface_binders.cc
@@ -122,6 +122,7 @@
 #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom.h"
 #include "third_party/blink/public/mojom/input/input_host.mojom.h"
 #include "third_party/blink/public/mojom/keyboard_lock/keyboard_lock.mojom.h"
+#include "third_party/blink/public/mojom/loader/anchor_element_interaction_host.mojom.h"
 #include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
 #include "third_party/blink/public/mojom/loader/content_security_notifier.mojom.h"
 #include "third_party/blink/public/mojom/loader/navigation_predictor.mojom.h"
@@ -1087,6 +1088,11 @@
       &EmptyBinderForFrame<payments::mojom::PaymentRequest>));
   map->Add<blink::mojom::AnchorElementMetricsHost>(base::BindRepeating(
       &EmptyBinderForFrame<blink::mojom::AnchorElementMetricsHost>));
+  if (base::FeatureList::IsEnabled(
+          blink::features::kAnchorElementInteraction)) {
+    map->Add<blink::mojom::AnchorElementInteractionHost>(base::BindRepeating(
+        &EmptyBinderForFrame<blink::mojom::AnchorElementInteractionHost>));
+  }
   map->Add<blink::mojom::CredentialManager>(base::BindRepeating(
       &EmptyBinderForFrame<blink::mojom::CredentialManager>));
   if (base::FeatureList::IsEnabled(blink::features::kBrowsingTopics)) {
diff --git a/content/browser/loader/navigation_early_hints_browsertest.cc b/content/browser/loader/navigation_early_hints_browsertest.cc
index 43b22487..a6418dd 100644
--- a/content/browser/loader/navigation_early_hints_browsertest.cc
+++ b/content/browser/loader/navigation_early_hints_browsertest.cc
@@ -151,7 +151,7 @@
     feature_list_.InitWithFeatures(
         {features::kEarlyHintsPreloadForNavigation,
          net::features::kSplitCacheByNetworkIsolationKey},
-        {});
+        {net::features::kForceIsolationInfoFrameOriginToTopLevelFrame});
   }
   ~NavigationEarlyHintsTest() override = default;
 
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index d2e5c1a..3dc3d81 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -4501,8 +4501,9 @@
     : public NavigationBaseBrowserTest {
  public:
   NetworkIsolationSplitCacheAppendIframeOrigin() {
-    feature_list_.InitAndEnableFeature(
-        net::features::kSplitCacheByNetworkIsolationKey);
+    feature_list_.InitWithFeatures(
+        {net::features::kSplitCacheByNetworkIsolationKey},
+        {net::features::kForceIsolationInfoFrameOriginToTopLevelFrame});
   }
 
  private:
diff --git a/content/browser/net/split_cache_browsertest.cc b/content/browser/net/split_cache_browsertest.cc
index 91b0043..e8b2b0d 100644
--- a/content/browser/net/split_cache_browsertest.cc
+++ b/content/browser/net/split_cache_browsertest.cc
@@ -390,8 +390,9 @@
     : public SplitCacheContentBrowserTest {
  public:
   SplitCacheRegistrableDomainContentBrowserTest() {
-    feature_list_.InitAndEnableFeature(
-        net::features::kSplitCacheByNetworkIsolationKey);
+    feature_list_.InitWithFeatures(
+        {net::features::kSplitCacheByNetworkIsolationKey},
+        {net::features::kForceIsolationInfoFrameOriginToTopLevelFrame});
   }
 
  private:
@@ -406,13 +407,16 @@
     std::vector<base::Feature> enabled_features;
     enabled_features.push_back(net::features::kSplitCacheByNetworkIsolationKey);
 
+    std::vector<base::Feature> disabled_features;
+    disabled_features.push_back(
+        net::features::kForceIsolationInfoFrameOriginToTopLevelFrame);
+
     // When the test parameter is true, we test the split cache with
     // PlzDedicatedWorker enabled.
     if (GetParam())
       enabled_features.push_back(blink::features::kPlzDedicatedWorker);
 
-    feature_list_.InitWithFeatures(enabled_features,
-                                   {} /* disabled_features */);
+    feature_list_.InitWithFeatures(enabled_features, disabled_features);
   }
 
  private:
diff --git a/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc b/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc
index 7f5306f..e39352a 100644
--- a/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc
+++ b/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc
@@ -19,6 +19,7 @@
 namespace {
 
 using blink::scheduler::WebSchedulerTrackedFeature;
+using Reason = BackForwardCacheMetrics::NotRestoredReason;
 
 std::string DescribeFeatures(BlockListedFeatures blocklisted_features) {
   std::vector<std::string> features;
@@ -82,7 +83,6 @@
     perfetto::protos::pbzero::BackForwardCacheCanStoreDocumentResult;
 ProtoEnum::BackForwardCacheNotRestoredReason NotRestoredReasonToTraceEnum(
     BackForwardCacheMetrics::NotRestoredReason reason) {
-  using Reason = BackForwardCacheMetrics::NotRestoredReason;
   switch (reason) {
     case Reason::kNotPrimaryMainFrame:
       return ProtoEnum::NOT_MAIN_FRAME;
@@ -228,6 +228,27 @@
 }
 
 bool BackForwardCacheCanStoreDocumentResult::CanStore() const {
+  if (not_restored_reasons_.Has(Reason::kCacheControlNoStore) ||
+      not_restored_reasons_.Has(Reason::kCacheControlNoStoreCookieModified) ||
+      not_restored_reasons_.Has(
+          Reason::kCacheControlNoStoreHTTPOnlyCookieModified)) {
+    // Cache-control:no-store related reasons are only recorded when the
+    // experiment is on to allow pages with cache-control:no-store into back/
+    // forward cache.
+    // If there are other reasons present outside of cache-control:no-store
+    // related reasons, the page is not eligible for storing.
+    return Difference(not_restored_reasons_,
+                      NotRestoredReasons(
+                          Reason::kCacheControlNoStore,
+                          Reason::kCacheControlNoStoreCookieModified,
+                          Reason::kCacheControlNoStoreHTTPOnlyCookieModified))
+        .Empty();
+  } else {
+    return not_restored_reasons_.Empty();
+  }
+}
+
+bool BackForwardCacheCanStoreDocumentResult::CanRestore() const {
   return not_restored_reasons_.Empty();
 }
 
diff --git a/content/browser/renderer_host/back_forward_cache_can_store_document_result.h b/content/browser/renderer_host/back_forward_cache_can_store_document_result.h
index 9618775..84d3135 100644
--- a/content/browser/renderer_host/back_forward_cache_can_store_document_result.h
+++ b/content/browser/renderer_host/back_forward_cache_can_store_document_result.h
@@ -62,8 +62,11 @@
   void NoDueToAXEvents(const std::vector<ui::AXEvent>& events);
   void RecordAXEvent(ax::mojom::Event event_type);
 
+  // The conditions for storing and restoring the pages are different in that
+  // pages with cache-control:no-store can enter back/forward cache depending on
+  // the experiment flag, but can never be restored.
   bool CanStore() const;
-  operator bool() const { return CanStore(); }
+  bool CanRestore() const;
 
   const NotRestoredReasons& not_restored_reasons() const {
     return not_restored_reasons_;
diff --git a/content/browser/renderer_host/back_forward_cache_impl.cc b/content/browser/renderer_host/back_forward_cache_impl.cc
index 03e588b..797c604 100644
--- a/content/browser/renderer_host/back_forward_cache_impl.cc
+++ b/content/browser/renderer_host/back_forward_cache_impl.cc
@@ -555,8 +555,8 @@
 
   auto* matching_entry = FindMatchingEntry(render_frame_host->GetPage());
   // |matching_entry| can be nullptr for tests because this can be called from
-  // |CanStorePageNow()|, at which point |rfh| may not have a matching entry
-  // yet.
+  // |GetCurrentBackForwardCacheEligibility()|, at which point |rfh| may not
+  // have a matching entry yet.
   if (!matching_entry)
     return;
 
@@ -582,21 +582,15 @@
 }
 
 BackForwardCacheCanStoreDocumentResultWithTree
-BackForwardCacheImpl::CanStorePageNow(RenderFrameHostImpl* rfh,
-                                      bool include_ccns) {
+BackForwardCacheImpl::GetCurrentBackForwardCacheEligibility(
+    RenderFrameHostImpl* rfh) {
   BackForwardCacheCanStoreDocumentResult flattened_result;
   std::unique_ptr<BackForwardCacheCanStoreTreeResult> tree =
       PopulateReasonsForPage(rfh, flattened_result,
                              /*include_non_sticky=*/true);
 
-  // TODO(https://crbug.com/1280150): Call
-  // UpdateCanStoreToIncludeCacheControlNoStore() for tree structure.
-  // Include cache-control:no-store related reasons only when requested.
-  if (include_ccns) {
-    DCHECK(AllowStoringPagesWithCacheControlNoStore());
-    UpdateCanStoreToIncludeCacheControlNoStore(flattened_result, rfh);
-  }
-  DVLOG(1) << "CanStorePageNow: " << rfh->GetLastCommittedURL() << " : "
+  DVLOG(1) << "GetCurrentBackForwardCacheEligibility: "
+           << rfh->GetLastCommittedURL() << " : "
            << flattened_result.ToString();
   TRACE_EVENT("navigation", "BackForwardCacheImpl::CanPotentiallyStorePageNow",
               ChromeTrackEvent::kBackForwardCacheCanStoreDocumentResult,
@@ -607,14 +601,16 @@
 }
 
 BackForwardCacheCanStoreDocumentResultWithTree
-BackForwardCacheImpl::CanPotentiallyStorePageLater(RenderFrameHostImpl* rfh) {
+BackForwardCacheImpl::GetFutureBackForwardCacheEligibilityPotential(
+    RenderFrameHostImpl* rfh) {
   BackForwardCacheCanStoreDocumentResult flattened;
   auto result = PopulateReasonsForPage(rfh, flattened,
                                        /*include_non_sticky = */ false);
-  DVLOG(1) << "CanPotentiallyStorePageLater: " << rfh->GetLastCommittedURL()
-           << " : " << flattened.ToString();
+  DVLOG(1) << "GetFutureBackForwardCacheEligibilityPotential: "
+           << rfh->GetLastCommittedURL() << " : " << flattened.ToString();
   TRACE_EVENT(
-      "navigation", "BackForwardCacheImpl::CanPotentiallyStorePageLater",
+      "navigation",
+      "BackForwardCacheImpl::GetFutureBackForwardCacheEligibilityPotential",
       ChromeTrackEvent::kBackForwardCacheCanStoreDocumentResult, flattened);
   return BackForwardCacheCanStoreDocumentResultWithTree(flattened,
                                                         std::move(result));
@@ -713,9 +709,10 @@
   // This check makes sure the old and new document aren't sharing the same
   // BrowsingInstance. Note that the existence of related active contents might
   // change in the future, but we are checking this in
-  // CanPotentiallyStorePageLater instead of CanStorePageNow because it's needed
-  // to determine whether to do a proactive BrowsingInstance swap or not, which
-  // should not be done if the page has related active contents.
+  // GetFutureBackForwardCacheEligibilityPotential instead of
+  // GetCurrentBackForwardCacheEligibility because it's needed to determine
+  // whether to do a proactive BrowsingInstance swap or not, which should not be
+  // done if the page has related active contents.
   unsigned expected_related_active_contents_count = is_active_rfh ? 1 : 0;
   // We should never have fewer than expected.
   DCHECK_GE(rfh->GetSiteInstance()->GetRelatedActiveContentsCount(),
@@ -762,9 +759,9 @@
 
   // We should not cache pages with Cache-control: no-store. Note that
   // even though this is categorized as a "feature", we will check this within
-  // CanPotentiallyStorePageLater as it's not possible to change the HTTP
-  // headers, so if it's not possible to cache this page now due to this, it's
-  // impossible to cache this page later.
+  // GetFutureBackForwardCacheEligibilityPotential as it's not possible to
+  // change the HTTP headers, so if it's not possible to cache this page now due
+  // to this, it's impossible to cache this page later.
   // TODO(rakina): Once we move cache-control tracking to RenderFrameHostImpl,
   // change this part to use the information stored in RenderFrameHostImpl
   // instead.
@@ -886,8 +883,9 @@
       /* include_non_sticky = */ false,
       BackForwardCacheImpl::NotRestoredReasonBuilder::EvictionInfo(
           rfh, &eviction_reason));
+
   return BackForwardCacheCanStoreDocumentResultWithTree(
-      eviction_reason, builder.GetTreeResult());
+      builder.GetFlattenedResult(), builder.GetTreeResult());
 }
 
 BackForwardCacheImpl::NotRestoredReasonBuilder::NotRestoredReasonBuilder(
@@ -922,9 +920,6 @@
 std::unique_ptr<BackForwardCacheCanStoreTreeResult>
 BackForwardCacheImpl::NotRestoredReasonBuilder::PopulateReasonsAndReturnSubtree(
     RenderFrameHostImpl* rfh) {
-  // TODO(https://crbug.com/1280150): Add cache-control:no-store reasons to the
-  // tree.
-
   BackForwardCacheCanStoreDocumentResult result_for_rfh;
   if (eviction_info_.has_value()) {
     // When |eviction_info_| is set, that means that we are populating the
@@ -939,6 +934,7 @@
     bfcache_.PopulateReasonsForDocument(result_for_rfh, rfh,
                                         include_non_sticky_);
   }
+  bfcache_.UpdateCanStoreToIncludeCacheControlNoStore(result_for_rfh, rfh);
   flattened_result_.AddReasonsFrom(result_for_rfh);
 
   // Finds the reasons recursively and create the reason subtree for the
@@ -960,7 +956,8 @@
 void BackForwardCacheImpl::StoreEntry(
     std::unique_ptr<BackForwardCacheImpl::Entry> entry) {
   TRACE_EVENT("navigation", "BackForwardCache::StoreEntry", "entry", entry);
-  DCHECK(CanStorePageNow(entry->render_frame_host()));
+  DCHECK(GetCurrentBackForwardCacheEligibility(entry->render_frame_host())
+             .CanStore());
 
 #if BUILDFLAG(IS_ANDROID)
   if (!IsProcessBindingEnabled()) {
@@ -1186,29 +1183,21 @@
   if (matching_entry == entries_.end())
     return nullptr;
 
-  if (AllowStoringPagesWithCacheControlNoStore() &&
-      (*matching_entry)
-          ->render_frame_host()
-          ->GetBackForwardCacheDisablingFeatures()
-          .Has(WebSchedulerTrackedFeature::
-                   kMainResourceHasCacheControlNoStore)) {
-    auto* render_frame_host = (*matching_entry)->render_frame_host();
-    // If we are in the experiments to allow pages with cache-control:no-store
-    // in back/forward cache and the page has cache-control:no-store, we should
-    // record them as reasons.
-    BackForwardCacheCanStoreDocumentResultWithTree can_store =
-        CanStorePageNow(render_frame_host, /* include_ccns = */ true);
-    if (!can_store) {
-      (*matching_entry)
-          ->render_frame_host()
-          ->EvictFromBackForwardCacheWithFlattenedAndTreeReasons(can_store);
-    }
+  auto* render_frame_host = (*matching_entry)->render_frame_host();
+  // If we are in the experiments to allow pages with cache-control:no-store
+  // in back/forward cache and the page has cache-control:no-store, we should
+  // record them as reasons. It might not be possible to restore the entry even
+  // if it hasn't been evicted up until this point, e.g. due to cache-control:
+  // no-store preventing restoration but not storage
+  BackForwardCacheCanStoreDocumentResultWithTree bfcache_eligibility =
+      GetCurrentBackForwardCacheEligibility(render_frame_host);
+  if (!bfcache_eligibility.CanRestore()) {
+    render_frame_host->EvictFromBackForwardCacheWithFlattenedAndTreeReasons(
+        bfcache_eligibility);
   }
 
   // Don't return the frame if it is evicted.
-  if ((*matching_entry)
-          ->render_frame_host()
-          ->is_evicted_from_back_forward_cache())
+  if (render_frame_host->is_evicted_from_back_forward_cache())
     return nullptr;
 
   return (*matching_entry).get();
@@ -1246,19 +1235,6 @@
 
   base::EraseIf(entries_, [this](std::unique_ptr<Entry>& entry) {
     if (entry->render_frame_host()->is_evicted_from_back_forward_cache()) {
-      // We need to update the not restored reasons to include cache-control:
-      // no-store related reasons before evicting. Because at this point, we
-      // have not recorded cache-control:no-store related reasons so that the
-      // page can temporarily enter bfcache.
-      BackForwardCacheCanStoreDocumentResult flattened_result;
-      // TODO(yuzus): Move this function to BackForwardCacheMetrics.
-      UpdateCanStoreToIncludeCacheControlNoStore(flattened_result,
-                                                 entry->render_frame_host());
-      if (auto* metrics =
-              entry->render_frame_host()->GetBackForwardCacheMetrics()) {
-        metrics->AddNotRestoredFlattenedReasonsToExistingResult(
-            flattened_result);
-      }
       RemoveProcessesForEntry(*entry);
       return true;
     }
diff --git a/content/browser/renderer_host/back_forward_cache_impl.h b/content/browser/renderer_host/back_forward_cache_impl.h
index f07f8a8..f3aecc0 100644
--- a/content/browser/renderer_host/back_forward_cache_impl.h
+++ b/content/browser/renderer_host/back_forward_cache_impl.h
@@ -87,9 +87,12 @@
 
   BackForwardCacheCanStoreDocumentResult flattened_reasons;
   std::unique_ptr<BackForwardCacheCanStoreTreeResult> tree_reasons;
-  // If BFCache is available, it returns true. If there are reasons that BFCache
-  // is not available, it returns false.
-  explicit operator bool() const { return flattened_reasons; }
+
+  // The conditions for storing and restoring the pages are different in that
+  // pages with cache-control:no-store can enter back/forward cache depending on
+  // the experiment flag, but can never be restored.
+  bool CanStore() const { return flattened_reasons.CanStore(); }
+  bool CanRestore() const { return flattened_reasons.CanRestore(); }
 };
 
 // BackForwardCache:
@@ -198,27 +201,22 @@
   // children's state. Should only be called after we've navigated away from
   // |render_frame_host|, which means nothing about the page can change (usage
   // of blocklisted features, pending navigations, load state, etc.) anymore.
-  // Note that criteria for storing and restoring can be different.
-  // |include_ccns| indicates whether or not we should consider cache-control:
-  // no-store related reasons. We don't include those reasons in the default
-  // case to allow pages with cache-control:no-store in back/forward cache
-  // temporarily for metrics collection, but those pages should never be
-  // restored. When trying to restore a page, |include_ccns| is set to true to
-  // include cache-control:no-store reasons, so that the pages containing them
-  // will not be restored.
-  BackForwardCacheCanStoreDocumentResultWithTree CanStorePageNow(
-      RenderFrameHostImpl* render_frame_host,
-      bool include_ccns = false);
+  // Note that criteria for storing and restoring can be different, i.e.
+  // |CanStore()| and |CanRestore()| might give different results.
+  BackForwardCacheCanStoreDocumentResultWithTree
+  GetCurrentBackForwardCacheEligibility(RenderFrameHostImpl* render_frame_host);
 
   // Whether a RenderFrameHost could be stored into the BackForwardCache at some
-  // point in the future. Different than CanStorePageNow() above, we won't check
-  // for properties of |render_frame_host| that might change in the future such
-  // as usage of certain APIs, loading state, existence of pending navigation
-  // requests, etc. This should be treated as a "best guess" on whether a page
-  // still has a chance to be stored in the back-forward cache later on, and
-  // should not be used as a final check before storing a page to the
-  // back-forward cache (for that, use CanStorePageNow() instead).
-  BackForwardCacheCanStoreDocumentResultWithTree CanPotentiallyStorePageLater(
+  // point in the future. Different than GetCurrentBackForwardCacheEligibility()
+  // above, we won't check for properties of |render_frame_host| that might
+  // change in the future such as usage of certain APIs, loading state,
+  // existence of pending navigation requests, etc. This should be treated as a
+  // "best guess" on whether a page still has a chance to be stored in the
+  // back-forward cache later on, and should not be used as a final check before
+  // storing a page to the back-forward cache (for that, use
+  // GetCurrentBackForwardCacheEligibility() instead).
+  BackForwardCacheCanStoreDocumentResultWithTree
+  GetFutureBackForwardCacheEligibilityPotential(
       RenderFrameHostImpl* render_frame_host);
 
   // Moves the specified BackForwardCache entry into the BackForwardCache. It
@@ -490,7 +488,7 @@
     ~NotRestoredReasonBuilder();
 
     // Access the populated result.
-    BackForwardCacheCanStoreDocumentResult GetFlattenedResult() {
+    BackForwardCacheCanStoreDocumentResult& GetFlattenedResult() {
       // TODO(yuzus): Check that |flattened_result_| and the tree result match.
       return flattened_result_;
     }
diff --git a/content/browser/renderer_host/back_forward_cache_metrics.cc b/content/browser/renderer_host/back_forward_cache_metrics.cc
index 4b38b37..b349632 100644
--- a/content/browser/renderer_host/back_forward_cache_metrics.cc
+++ b/content/browser/renderer_host/back_forward_cache_metrics.cc
@@ -130,9 +130,9 @@
   if (IsHistoryNavigation(navigation)) {
     UpdateNotRestoredReasonsForNavigation(navigation);
 
-    bool can_store = *page_store_result_;
+    bool can_restore = page_store_result_->CanRestore();
     bool did_store = navigation->IsServedFromBackForwardCache();
-    DCHECK_EQ(can_store, did_store) << page_store_result_->ToString();
+    DCHECK_EQ(can_restore, did_store) << page_store_result_->ToString();
 
     // If a navigation serves the result from back/forward cache, then it must
     // not have logged any NotRestoredReasons. Also if it is not restored from
diff --git a/content/browser/renderer_host/frame_tree.cc b/content/browser/renderer_host/frame_tree.cc
index 09e80f3..95c8b8a 100644
--- a/content/browser/renderer_host/frame_tree.cc
+++ b/content/browser/renderer_host/frame_tree.cc
@@ -592,9 +592,10 @@
   }
   RenderViewHostImpl* rvh =
       static_cast<RenderViewHostImpl*>(RenderViewHostFactory::Create(
-          this, site_instance, render_view_delegate_, render_widget_delegate_,
-          main_frame_routing_id, swapped_out, renderer_initiated_creation,
-          std::move(main_browsing_context_state)));
+          this, static_cast<SiteInstanceImpl*>(site_instance)->group(),
+          site_instance->GetStoragePartitionConfig(), render_view_delegate_,
+          render_widget_delegate_, main_frame_routing_id, swapped_out,
+          renderer_initiated_creation, std::move(main_browsing_context_state)));
   return base::WrapRefCounted(rvh);
 }
 
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 94fc328a..646e9a53 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -4580,10 +4580,11 @@
   // will send our best guess by checking if the page can be persisted at this
   // point.
   bool can_store_old_page_in_bfcache =
-      static_cast<bool>(frame_tree_node_->frame_tree()
-                            ->controller()
-                            .GetBackForwardCache()
-                            .CanPotentiallyStorePageLater(old_frame_host));
+      frame_tree_node_->frame_tree()
+          ->controller()
+          .GetBackForwardCache()
+          .GetFutureBackForwardCacheEligibilityPotential(old_frame_host)
+          .CanStore();
   commit_params_->old_page_info = blink::mojom::OldPageInfo::New();
   commit_params_->old_page_info->routing_id_for_old_main_frame =
       old_frame_host->GetRoutingID();
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 1dae1b0..83f5291 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -12760,18 +12760,20 @@
   RenderFrameHostImpl* top_document = this;
   while (RenderFrameHostImpl* parent = top_document->GetParent())
     top_document = parent;
-  BackForwardCacheCanStoreDocumentResultWithTree can_store =
-      frame_tree()->controller().GetBackForwardCache().CanStorePageNow(
-          top_document);
+  BackForwardCacheCanStoreDocumentResultWithTree bfcache_eligibility =
+      frame_tree()
+          ->controller()
+          .GetBackForwardCache()
+          .GetCurrentBackForwardCacheEligibility(top_document);
 
   TRACE_EVENT("navigation",
               "RenderFrameHostImpl::MaybeEvictFromBackForwardCache",
-              "render_frame_host", this, "can_store",
-              can_store.flattened_reasons.ToString());
+              "render_frame_host", this, "bfcache_eligibility",
+              bfcache_eligibility.flattened_reasons.ToString());
 
-  if (can_store)
+  if (bfcache_eligibility.CanStore())
     return;
-  EvictFromBackForwardCacheWithFlattenedAndTreeReasons(can_store);
+  EvictFromBackForwardCacheWithFlattenedAndTreeReasons(bfcache_eligibility);
 }
 
 void RenderFrameHostImpl::LogCannotCommitOriginCrashKeys(
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc
index 2b8e23d..57beffb5 100644
--- a/content/browser/renderer_host/render_frame_host_manager.cc
+++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -752,12 +752,14 @@
     BackForwardCacheImpl& back_forward_cache =
         GetNavigationController().GetBackForwardCache();
 
-    BackForwardCacheCanStoreDocumentResultWithTree can_store =
-        back_forward_cache.CanStorePageNow(old_render_frame_host.get());
+    BackForwardCacheCanStoreDocumentResultWithTree bfcache_eligibility =
+        back_forward_cache.GetCurrentBackForwardCacheEligibility(
+            old_render_frame_host.get());
     TRACE_EVENT("navigation", "BackForwardCache_MaybeStorePage",
-                "old_render_frame_host", old_render_frame_host, "can_store",
-                can_store.flattened_reasons.ToString());
-    if (can_store) {
+                "old_render_frame_host", old_render_frame_host,
+                "bfcache_eligibility",
+                bfcache_eligibility.flattened_reasons.ToString());
+    if (bfcache_eligibility.CanStore()) {
       auto stored_page = CollectPage(std::move(old_render_frame_host));
       auto entry =
           std::make_unique<BackForwardCacheImpl::Entry>(std::move(stored_page));
@@ -770,7 +772,8 @@
     }
 
     if (old_page_back_forward_cache_metrics) {
-      old_page_back_forward_cache_metrics->SetNotRestoredReasons(can_store);
+      old_page_back_forward_cache_metrics->SetNotRestoredReasons(
+          bfcache_eligibility);
     }
   }
 
@@ -1793,23 +1796,24 @@
   NavigationControllerImpl& controller =
       render_frame_host_->frame_tree_node()->navigator().controller();
 
-  auto can_store =
-      controller.GetBackForwardCache().CanPotentiallyStorePageLater(
-          render_frame_host_.get());
-  if (can_store) {
+  auto bfcache_eligibility = controller.GetBackForwardCache()
+                                 .GetFutureBackForwardCacheEligibilityPotential(
+                                     render_frame_host_.get());
+  if (bfcache_eligibility.CanStore()) {
     if (is_same_site) {
       return ShouldSwapBrowsingInstance::kYes_SameSiteProactiveSwap;
     } else {
       return ShouldSwapBrowsingInstance::kYes_CrossSiteProactiveSwap;
     }
   } else {
-    // As CanPotentiallyStorePageLater is used instead of CanStorePageNow, non-
-    // sticky reasons are not recorded here. This is intentional because it is
-    // impossible to get correct non-sticky reasons at this timing.
+    // As GetFutureBackForwardCacheEligibilityPotential is used instead of
+    // GetCurrentBackForwardCacheEligibility, non- sticky reasons are not
+    // recorded here. This is intentional because it is impossible to get
+    // correct non-sticky reasons at this timing.
     BackForwardCacheMetrics* back_forward_cache_metrics =
         render_frame_host_->GetBackForwardCacheMetrics();
     if (back_forward_cache_metrics) {
-      back_forward_cache_metrics->SetNotRestoredReasons(can_store);
+      back_forward_cache_metrics->SetNotRestoredReasons(bfcache_eligibility);
     }
     return ShouldSwapBrowsingInstance::kNo_NotNeededForBackForwardCache;
   }
diff --git a/content/browser/renderer_host/render_view_host_factory.cc b/content/browser/renderer_host/render_view_host_factory.cc
index 284e040..c6872b2 100644
--- a/content/browser/renderer_host/render_view_host_factory.cc
+++ b/content/browser/renderer_host/render_view_host_factory.cc
@@ -10,7 +10,7 @@
 #include "base/memory/ptr_util.h"
 #include "content/browser/renderer_host/render_view_host_impl.h"
 #include "content/browser/renderer_host/render_widget_host_factory.h"
-#include "content/browser/site_instance_impl.h"
+#include "content/browser/site_instance_group.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 
 namespace content {
@@ -24,30 +24,28 @@
 // static
 RenderViewHost* RenderViewHostFactory::Create(
     FrameTree* frame_tree,
-    SiteInstance* instance,
+    SiteInstanceGroup* group,
+    const StoragePartitionConfig& storage_partition_config,
     RenderViewHostDelegate* delegate,
     RenderWidgetHostDelegate* widget_delegate,
     int32_t main_frame_routing_id,
     bool swapped_out,
     bool renderer_initiated_creation,
     scoped_refptr<BrowsingContextState> main_browsing_context_state) {
-  int32_t routing_id = instance->GetProcess()->GetNextRoutingID();
-  int32_t widget_routing_id = instance->GetProcess()->GetNextRoutingID();
-  DCHECK(static_cast<SiteInstanceImpl*>(instance)->group());
+  int32_t routing_id = group->process()->GetNextRoutingID();
+  int32_t widget_routing_id = group->process()->GetNextRoutingID();
 
   if (factory_) {
     return factory_->CreateRenderViewHost(
-        frame_tree, instance, delegate, widget_delegate, routing_id,
-        main_frame_routing_id, widget_routing_id, swapped_out,
+        frame_tree, group, storage_partition_config, delegate, widget_delegate,
+        routing_id, main_frame_routing_id, widget_routing_id, swapped_out,
         std::move(main_browsing_context_state));
   }
 
   RenderViewHostImpl* view_host = new RenderViewHostImpl(
-      frame_tree, instance,
+      frame_tree, group, storage_partition_config,
       RenderWidgetHostFactory::Create(
-          frame_tree, widget_delegate,
-          static_cast<SiteInstanceImpl*>(instance)->group()->GetSafeRef(),
-          widget_routing_id,
+          frame_tree, widget_delegate, group->GetSafeRef(), widget_routing_id,
           /*hidden=*/true, renderer_initiated_creation),
       delegate, routing_id, main_frame_routing_id, swapped_out,
       true /* has_initialized_audio_host */,
diff --git a/content/browser/renderer_host/render_view_host_factory.h b/content/browser/renderer_host/render_view_host_factory.h
index eb53bbb..844990e 100644
--- a/content/browser/renderer_host/render_view_host_factory.h
+++ b/content/browser/renderer_host/render_view_host_factory.h
@@ -15,7 +15,7 @@
 class RenderViewHost;
 class RenderViewHostDelegate;
 class RenderWidgetHostDelegate;
-class SiteInstance;
+class SiteInstanceGroup;
 
 // A factory for creating RenderViewHosts. There is a global factory function
 // that can be installed for the purposes of testing to provide a specialized
@@ -27,7 +27,8 @@
   // pointer will be passed to the caller.
   static RenderViewHost* Create(
       FrameTree* frame_tree,
-      SiteInstance* instance,
+      SiteInstanceGroup* group,
+      const StoragePartitionConfig& storage_partition_config,
       RenderViewHostDelegate* delegate,
       RenderWidgetHostDelegate* widget_delegate,
       int32_t main_frame_routing_id,
@@ -63,7 +64,8 @@
   // function to create a different kind of RenderViewHost for testing.
   virtual RenderViewHost* CreateRenderViewHost(
       FrameTree* frame_tree,
-      SiteInstance* instance,
+      SiteInstanceGroup* group,
+      const StoragePartitionConfig& storage_partition_config,
       RenderViewHostDelegate* delegate,
       RenderWidgetHostDelegate* widget_delegate,
       int32_t routing_id,
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index dcd6248..a5316c32 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -283,7 +283,8 @@
 
 RenderViewHostImpl::RenderViewHostImpl(
     FrameTree* frame_tree,
-    SiteInstance* instance,
+    SiteInstanceGroup* group,
+    const StoragePartitionConfig& storage_partition_config,
     std::unique_ptr<RenderWidgetHostImpl> widget,
     RenderViewHostDelegate* delegate,
     int32_t routing_id,
@@ -293,9 +294,8 @@
     scoped_refptr<BrowsingContextState> main_browsing_context_state)
     : render_widget_host_(std::move(widget)),
       delegate_(delegate),
-      render_view_host_map_id_(frame_tree->GetRenderViewHostMapId(
-          static_cast<SiteInstanceImpl*>(instance)->group())),
-      storage_partition_config_(instance->GetStoragePartitionConfig()),
+      render_view_host_map_id_(frame_tree->GetRenderViewHostMapId(group)),
+      storage_partition_config_(storage_partition_config),
       routing_id_(routing_id),
       main_frame_routing_id_(main_frame_routing_id),
       frame_tree_(frame_tree),
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index 64f6ebe..442b15b 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -117,7 +117,8 @@
 
   RenderViewHostImpl(
       FrameTree* frame_tree,
-      SiteInstance* instance,
+      SiteInstanceGroup* group,
+      const StoragePartitionConfig& storage_partition_config,
       std::unique_ptr<RenderWidgetHostImpl> widget,
       RenderViewHostDelegate* delegate,
       int32_t routing_id,
@@ -188,10 +189,10 @@
   // blink::Page's main blink::Frame is remote).
   RenderFrameHostImpl* GetMainRenderFrameHost();
 
-  // // RenderViewHost is associated with a given SiteInstance(Group) and as
+  // // RenderViewHost is associated with a given SiteInstanceGroup and as
   // BrowsingContextState in non-legacy BrowsingContextState mode is tied to a
   // given BrowsingInstance, so the main BrowsingContextState stays the same
-  // during the entire lifetime of a RenderViewHost: cross-SiteInstance
+  // during the entire lifetime of a RenderViewHost: cross-SiteInstanceGroup
   // same-BrowsingInstance navigations might change the representation of the
   // main frame in a given RenderView from RenderFrame to RenderFrameProxy and
   // back, while cross-BrowsingInstances result in creating a new unrelated
@@ -390,14 +391,14 @@
   raw_ptr<RenderViewHostDelegate> delegate_;
 
   // ID to use when registering/unregistering this object with its FrameTree.
-  // This ID is generated by passing a SiteInstance to
+  // This ID is generated by passing a SiteInstanceGroup to
   // FrameTree::GetRenderViewHostMapId(). This RenderViewHost may only be reused
-  // by frames with SiteInstances that generate an ID that matches this field.
+  // by frames with SiteInstanceGroups that generate an ID that matches this
+  // field.
   FrameTree::RenderViewHostMapId render_view_host_map_id_;
 
-  // StoragePartitionConfig taken from the SiteInstance passed into the
-  // constructor. It provides information for selecting the session storage
-  // namespace for this view.
+  // Provides information for selecting the session storage namespace for this
+  // view.
   const StoragePartitionConfig storage_partition_config_;
 
   // Routing ID for this RenderViewHost.
diff --git a/content/browser/renderer_host/render_widget_host_view_android_unittest.cc b/content/browser/renderer_host/render_widget_host_view_android_unittest.cc
index 83f00a52..00ba756 100644
--- a/content/browser/renderer_host/render_widget_host_view_android_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android_unittest.cc
@@ -188,7 +188,8 @@
                                    process_->GetNextRoutingID());
   host_ = mock_host.get();
   render_view_host_ = new TestRenderViewHost(
-      frame_tree_.get(), site_instance_.get(), std::move(mock_host),
+      frame_tree_.get(), site_instance_group_.get(),
+      site_instance_->GetStoragePartitionConfig(), std::move(mock_host),
       web_contents_.get(), process_->GetNextRoutingID(),
       process_->GetNextRoutingID(), false, nullptr);
   parent_layer_ = cc::Layer::Create();
diff --git a/content/browser/sandbox_parameters_mac.mm b/content/browser/sandbox_parameters_mac.mm
index 76a22420..5cbb9e32 100644
--- a/content/browser/sandbox_parameters_mac.mm
+++ b/content/browser/sandbox_parameters_mac.mm
@@ -239,6 +239,7 @@
                    << static_cast<int>(sandbox_type);
       break;
     // Setup parameters for sandbox types handled by embedders below.
+    case sandbox::mojom::Sandbox::kScreenAI:
     case sandbox::mojom::Sandbox::kSpeechRecognition:
       SetupCommonSandboxParameters(client);
       CHECK(GetContentClient()->browser()->SetupEmbedderSandboxParameters(
diff --git a/content/browser/web_package/web_bundle_element_browsertest.cc b/content/browser/web_package/web_bundle_element_browsertest.cc
index ff5d54e..a263e14 100644
--- a/content/browser/web_package/web_bundle_element_browsertest.cc
+++ b/content/browser/web_package/web_bundle_element_browsertest.cc
@@ -130,7 +130,9 @@
  public:
  protected:
   WebBundleElementBrowserTest() {
-    feature_list_.InitAndEnableFeature(features::kSubresourceWebBundles);
+    feature_list_.InitWithFeatures(
+        {features::kSubresourceWebBundles},
+        {net::features::kForceIsolationInfoFrameOriginToTopLevelFrame});
   }
   ~WebBundleElementBrowserTest() override = default;
 
diff --git a/content/common/features.gni b/content/common/features.gni
index 08e1e870..0fa6f2ac 100644
--- a/content/common/features.gni
+++ b/content/common/features.gni
@@ -18,4 +18,4 @@
 }
 
 enable_screen_capture =
-    is_linux || is_chromeos || is_mac || is_win || is_android
+    is_linux || is_chromeos || is_mac || is_win || is_android || is_fuchsia
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
index 3fb7b5e1..7fc96c9 100644
--- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -380,11 +380,6 @@
 crbug.com/1321305 [ mac release apple-apple-m1 ] Pixel_WebGPUImportVideoFrame [ Failure ]
 crbug.com/1321305 [ mac release apple-apple-m1 ] Pixel_WebGPUImportVideoFrameOffscreenCanvas [ Failure ]
 
-# Hangs with mac 0-copy path of WebGPU ImportExternalTexture
-crbug.com/1213170 [ mac no-asan amd-0x6821 ] Pixel_WebGPUImport* [ Failure ]
-crbug.com/1213170 [ mac no-asan intel-0xd26 ] Pixel_WebGPUImport* [ Failure ]
-crbug.com/1213170 [ mac no-asan intel-0x3e9b ] Pixel_WebGPUImport* [ Failure ]
-
 #######################################################################
 # Automated Entries After This Point - Do Not Manually Add Below Here #
 #######################################################################
diff --git a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
index 2777d51..27412d1 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
@@ -87,6 +87,9 @@
 
 crbug.com/1311091 WebCodecs_WebRTCPeerConnection_* [ Skip ]
 
+# Remove when Apple M1 FYI bot passes these tests
+crbug.com/1312735 [ mac apple-apple-m1 ] WebCodecs_* [ Failure ]
+
 #######################################################################
 # Automated Entries After This Point - Do Not Manually Add Below Here #
 #######################################################################
diff --git a/content/test/test_render_view_host.cc b/content/test/test_render_view_host.cc
index 41cd64cf..1dd014d 100644
--- a/content/test/test_render_view_host.cc
+++ b/content/test/test_render_view_host.cc
@@ -20,7 +20,6 @@
 #include "content/browser/renderer_host/input/synthetic_gesture_target.h"
 #include "content/browser/renderer_host/render_frame_proxy_host.h"
 #include "content/browser/renderer_host/render_widget_host_input_event_router.h"
-#include "content/browser/site_instance_impl.h"
 #include "content/browser/storage_partition_impl.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
@@ -328,7 +327,8 @@
 
 TestRenderViewHost::TestRenderViewHost(
     FrameTree* frame_tree,
-    SiteInstance* instance,
+    SiteInstanceGroup* group,
+    const StoragePartitionConfig& storage_partition_config,
     std::unique_ptr<RenderWidgetHostImpl> widget,
     RenderViewHostDelegate* delegate,
     int32_t routing_id,
@@ -336,7 +336,8 @@
     bool swapped_out,
     scoped_refptr<BrowsingContextState> main_browsing_context_state)
     : RenderViewHostImpl(frame_tree,
-                         instance,
+                         group,
+                         storage_partition_config,
                          std::move(widget),
                          delegate,
                          routing_id,
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h
index 8ede48d..19522b8 100644
--- a/content/test/test_render_view_host.h
+++ b/content/test/test_render_view_host.h
@@ -50,7 +50,6 @@
 namespace content {
 
 class FrameTree;
-class SiteInstance;
 class TestRenderFrameHost;
 class TestPageBroadcast;
 class TestWebContents;
@@ -261,7 +260,8 @@
  public:
   TestRenderViewHost(
       FrameTree* frame_tree,
-      SiteInstance* instance,
+      SiteInstanceGroup* group,
+      const StoragePartitionConfig& storage_partition_config,
       std::unique_ptr<RenderWidgetHostImpl> widget,
       RenderViewHostDelegate* delegate,
       int32_t routing_id,
diff --git a/content/test/test_render_view_host_factory.cc b/content/test/test_render_view_host_factory.cc
index 3a116d35..d5da5e9 100644
--- a/content/test/test_render_view_host_factory.cc
+++ b/content/test/test_render_view_host_factory.cc
@@ -7,7 +7,7 @@
 #include "content/browser/renderer_host/agent_scheduling_group_host.h"
 #include "content/browser/renderer_host/agent_scheduling_group_host_factory.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/browser/site_instance_impl.h"
+#include "content/browser/site_instance_group.h"
 #include "content/public/browser/render_process_host_factory.h"
 #include "content/test/test_render_view_host.h"
 #include "content/test/test_render_widget_host.h"
@@ -39,7 +39,8 @@
 
 RenderViewHost* TestRenderViewHostFactory::CreateRenderViewHost(
     FrameTree* frame_tree,
-    SiteInstance* instance,
+    SiteInstanceGroup* group,
+    const StoragePartitionConfig& storage_partition_config,
     RenderViewHostDelegate* delegate,
     RenderWidgetHostDelegate* widget_delegate,
     int32_t routing_id,
@@ -48,11 +49,10 @@
     bool swapped_out,
     scoped_refptr<BrowsingContextState> main_browsing_context_state) {
   return new TestRenderViewHost(
-      frame_tree, instance,
-      TestRenderWidgetHost::Create(
-          frame_tree, widget_delegate,
-          static_cast<SiteInstanceImpl*>(instance)->group()->GetSafeRef(),
-          widget_routing_id, false),
+      frame_tree, group, storage_partition_config,
+      TestRenderWidgetHost::Create(frame_tree, widget_delegate,
+                                   group->GetSafeRef(), widget_routing_id,
+                                   false),
       delegate, routing_id, main_frame_routing_id, swapped_out,
       std::move(main_browsing_context_state));
 }
diff --git a/content/test/test_render_view_host_factory.h b/content/test/test_render_view_host_factory.h
index aa1d0667..6a154c0a 100644
--- a/content/test/test_render_view_host_factory.h
+++ b/content/test/test_render_view_host_factory.h
@@ -12,7 +12,7 @@
 namespace content {
 
 class AgentSchedulingGroupHostFactory;
-class SiteInstance;
+class SiteInstanceGroup;
 class RenderViewHostDelegate;
 class RenderProcessHostFactory;
 
@@ -35,7 +35,8 @@
       RenderProcessHostFactory* rph_factory);
   RenderViewHost* CreateRenderViewHost(
       FrameTree* frame_tree,
-      SiteInstance* instance,
+      SiteInstanceGroup* group,
+      const StoragePartitionConfig& storage_partition_config,
       RenderViewHostDelegate* delegate,
       RenderWidgetHostDelegate* widget_delegate,
       int32_t routing_id,
diff --git a/content/utility/BUILD.gn b/content/utility/BUILD.gn
index beb796d..2d14f33 100644
--- a/content/utility/BUILD.gn
+++ b/content/utility/BUILD.gn
@@ -132,7 +132,7 @@
     }
   }
 
-  if (enable_screen_ai_service) {
+  if (is_linux || is_chromeos_ash || is_chromeos_lacros) {
     deps += [ "//components/services/screen_ai:screen_ai_sandbox_hook" ]
   }
 
diff --git a/device/bluetooth/chromeos/bluetooth_utils.cc b/device/bluetooth/chromeos/bluetooth_utils.cc
index 5473c928..05ade98 100644
--- a/device/bluetooth/chromeos/bluetooth_utils.cc
+++ b/device/bluetooth/chromeos/bluetooth_utils.cc
@@ -17,7 +17,6 @@
 #include "build/chromeos_buildflags.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "device/base/features.h"
-#include "device/bluetooth/floss/floss_features.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -181,12 +180,6 @@
 }
 
 bool IsUnsupportedDevice(const device::BluetoothDevice* device) {
-  // With Floss, device list filtering is still unstable. We disable filtering
-  // first so that Floss testing of other features can be unblocked.
-  // TODO(b/202335393): Enable device filtering once it's stable with Floss.
-  if (base::FeatureList::IsEnabled(floss::features::kFlossEnabled))
-    return false;
-
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   if (ash::switches::IsUnfilteredBluetoothDevicesEnabled())
     return false;
diff --git a/docs/dangling_ptr.md b/docs/dangling_ptr.md
new file mode 100644
index 0000000..a54fdc5
--- /dev/null
+++ b/docs/dangling_ptr.md
@@ -0,0 +1,71 @@
+# Danling pointer detector.
+
+Dangling pointers are not a problem unless they are dereferenced and used.
+However, they are a source of UaF bugs and highly discouraged unless you are
+100% confident that they are never dereferenced after the pointed-to objects are
+freed.
+
+Behind build flags, Chrome implements a dangling pointer detector. It causes
+Chrome to crash, whenever a raw_ptr becomes dangling:
+```cpp
+raw_ptr<T> ptr_never_dangling;
+```
+
+On the other hand, we cannot simply ban all the usage of dangling pointers
+because there are valid use cases. The `DisableDanglingPtrDetection` option can
+be used to annotate "intentional-and-safe" dangling pointers. It is meant to be
+used as a last resort, only if there is no better way to re-architecture the
+code.
+```cpp
+raw_ptr<T, DisableDanglingPtrDetection> ptr_may_dangle;
+```
+
+# How to check for dangling pointers?
+
+It is gated behind both build and runtime flags:
+
+## Build flags
+
+```bash
+gn args ./out/dangling/
+```
+
+```gn
+use_goma = true
+is_debug = false
+dcheck_always_on = true
+use_backup_ref_ptr = true
+use_partition_alloc = true
+enable_dangling_raw_ptr_checks = true
+```
+
+## Runtime flags
+
+```bash
+./out/dangling/content_shell --enable-features=PartitionAllocBackupRefPtr
+```
+
+Chrome will crash on the first dangling raw_ptr detected.
+
+# Record a list of signatures.
+
+Instead of immediately crashing, you can list all the dangling raw_ptr
+occurrences. This is gated behind the `PartitionAllocDanglingPtrRecord` feature.
+
+For instance:
+```bash
+./out/dangling/content_shell --enable-features=PartitionAllocBackupRefPtr,PartitionAllocDanglingPtrRecord |& tee output
+```
+
+The logs can be filtered and transformed into a tab separated table:
+```bash
+cat output \
+ | grep "DanglingSignature" \
+ | cut -f2,3 \
+ | sort \
+ | uniq -c \
+ | sed -E 's/^ *//; s/ /\t/' \
+ | sort -rn
+```
+
+This is used to list issues and track progresses.
diff --git a/docs/speed/perf_lab_platforms.md b/docs/speed/perf_lab_platforms.md
index 999fcbfb..58795c6 100644
--- a/docs/speed/perf_lab_platforms.md
+++ b/docs/speed/perf_lab_platforms.md
@@ -7,15 +7,21 @@
 ## Android
 
  * [android-go-perf](https://ci.chromium.org/p/chrome/builders/ci/android-go-perf): Android O (gobo).
+ * [android-go-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/android-go-perf-pgo): Android O (gobo).
  * [android-go_webview-perf](https://ci.chromium.org/p/chrome/builders/ci/android-go_webview-perf): Android OPM1.171019.021 (gobo).
  * [android-pixel2-perf](https://ci.chromium.org/p/chrome/builders/ci/android-pixel2-perf): Android OPM1.171019.021.
  * [android-pixel2-perf-calibration](https://ci.chromium.org/p/chrome/builders/ci/android-pixel2-perf-calibration): Android OPM1.171019.021.
+ * [android-pixel2-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/android-pixel2-perf-pgo): Android OPM1.171019.021.
  * [android-pixel2_weblayer-perf](https://ci.chromium.org/p/chrome/builders/ci/android-pixel2_weblayer-perf): Android OPM1.171019.021.
  * [android-pixel2_webview-perf](https://ci.chromium.org/p/chrome/builders/ci/android-pixel2_webview-perf): Android OPM1.171019.021.
+ * [android-pixel2_webview-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/android-pixel2_webview-perf-pgo): Android OPM1.171019.021.
  * [android-pixel4-perf](https://ci.chromium.org/p/chrome/builders/ci/android-pixel4-perf): Android R.
+ * [android-pixel4-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/android-pixel4-perf-pgo): Android R.
  * [android-pixel4_weblayer-perf](https://ci.chromium.org/p/chrome/builders/ci/android-pixel4_weblayer-perf): Android R.
+ * [android-pixel4_weblayer-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/android-pixel4_weblayer-perf-pgo): Android R.
  * [android-pixel4_webview-perf](https://ci.chromium.org/p/chrome/builders/ci/android-pixel4_webview-perf): Android R.
  * [android-pixel4a_power-perf](https://ci.chromium.org/p/chrome/builders/ci/android-pixel4a_power-perf): Android QD4A.200102.001.A1.
+ * [android-pixel4a_power-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/android-pixel4a_power-perf-pgo): Android QD4A.200102.001.A1.
 
 ## Chromeos
 
@@ -25,17 +31,24 @@
 
  * [linux-perf](https://ci.chromium.org/p/chrome/builders/ci/linux-perf): Ubuntu-18.04, 8 core, NVIDIA Quadro P400.
  * [linux-perf-calibration](https://ci.chromium.org/p/chrome/builders/ci/linux-perf-calibration): Ubuntu-18.04, 8 core, NVIDIA Quadro P400.
+ * [linux-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/linux-perf-pgo): Ubuntu-18.04, 8 core, NVIDIA Quadro P400.
  * [linux-perf-rel](https://ci.chromium.org/p/chrome/builders/ci/linux-perf-rel): Ubuntu-18.04, 8 core, NVIDIA Quadro P400.
 
 ## Mac
 
  * [mac-laptop_high_end-perf](https://ci.chromium.org/p/chrome/builders/ci/mac-laptop_high_end-perf): MacBook Pro, Core i7 2.8 GHz, 16GB RAM, 256GB SSD, Radeon 55.
+ * [mac-laptop_high_end-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/mac-laptop_high_end-perf-pgo): MacBook Pro, Core i7 2.8 GHz, 16GB RAM, 256GB SSD, Radeon 55.
  * [mac-laptop_low_end-perf](https://ci.chromium.org/p/chrome/builders/ci/mac-laptop_low_end-perf): MacBook Air, Core i5 1.8 GHz, 8GB RAM, 128GB SSD, HD Graphics.
+ * [mac-laptop_low_end-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/mac-laptop_low_end-perf-pgo): MacBook Air, Core i5 1.8 GHz, 8GB RAM, 128GB SSD, HD Graphics.
  * [mac-m1_mini_2020-perf](https://ci.chromium.org/p/chrome/builders/ci/mac-m1_mini_2020-perf): Mac M1 Mini 2020.
+ * [mac-m1_mini_2020-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/mac-m1_mini_2020-perf-pgo): Mac M1 Mini 2020.
 
 ## Win
 
  * [win-10-perf](https://ci.chromium.org/p/chrome/builders/ci/win-10-perf): Windows Intel HD 630 towers, Core i7-7700 3.6 GHz, 16GB RAM, Intel Kaby Lake HD Graphics 630.
+ * [win-10-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/win-10-perf-pgo): Windows Intel HD 630 towers, Core i7-7700 3.6 GHz, 16GB RAM, Intel Kaby Lake HD Graphics 630.
  * [win-10_amd_laptop-perf](https://ci.chromium.org/p/chrome/builders/ci/win-10_amd_laptop-perf): Windows 10 Laptop with AMD chipset..
+ * [win-10_amd_laptop-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/win-10_amd_laptop-perf-pgo): Windows 10 Laptop with AMD chipset..
  * [win-10_laptop_low_end-perf](https://ci.chromium.org/p/chrome/builders/ci/win-10_laptop_low_end-perf): Low end windows 10 HP laptops. HD Graphics 5500, x86-64-i3-5005U, SSD, 4GB RAM..
+ * [win-10_laptop_low_end-perf-pgo](https://ci.chromium.org/p/chrome/builders/ci/win-10_laptop_low_end-perf-pgo): Low end windows 10 HP laptops. HD Graphics 5500, x86-64-i3-5005U, SSD, 4GB RAM..
 
diff --git a/extensions/common/BUILD.gn b/extensions/common/BUILD.gn
index abffae1..a517093a 100644
--- a/extensions/common/BUILD.gn
+++ b/extensions/common/BUILD.gn
@@ -192,6 +192,8 @@
     "api/bluetooth/bluetooth_manifest_handler.h",
     "api/bluetooth/bluetooth_manifest_permission.cc",
     "api/bluetooth/bluetooth_manifest_permission.h",
+    "api/commands/commands_handler.cc",
+    "api/commands/commands_handler.h",
     "api/declarative/declarative_constants.cc",
     "api/declarative/declarative_constants.h",
     "api/declarative/declarative_manifest_data.cc",
@@ -539,6 +541,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "api/commands/commands_manifest_unittest.cc",
     "api/declarative/declarative_manifest_unittest.cc",
     "api/declarative_net_request/dnr_manifest_unittest.cc",
     "api/printer_provider/usb_printer_manifest_unittest.cc",
diff --git a/chrome/common/extensions/api/commands/commands_handler.cc b/extensions/common/api/commands/commands_handler.cc
similarity index 87%
rename from chrome/common/extensions/api/commands/commands_handler.cc
rename to extensions/common/api/commands/commands_handler.cc
index 6283c42..68b2a692 100644
--- a/chrome/common/extensions/api/commands/commands_handler.cc
+++ b/extensions/common/api/commands/commands_handler.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 "chrome/common/extensions/api/commands/commands_handler.h"
+#include "extensions/common/api/commands/commands_handler.h"
 
 #include <memory>
 #include <utility>
@@ -26,46 +26,40 @@
 const int kMaxCommandsWithKeybindingPerExtension = 4;
 }  // namespace
 
-CommandsInfo::CommandsInfo() {
-}
-
-CommandsInfo::~CommandsInfo() {
-}
+CommandsInfo::CommandsInfo() = default;
+CommandsInfo::~CommandsInfo() = default;
 
 // static
 const Command* CommandsInfo::GetBrowserActionCommand(
     const Extension* extension) {
-  CommandsInfo* info = static_cast<CommandsInfo*>(
-      extension->GetManifestData(keys::kCommands));
+  auto* info =
+      static_cast<CommandsInfo*>(extension->GetManifestData(keys::kCommands));
   return info ? info->browser_action_command.get() : NULL;
 }
 
 // static
 const Command* CommandsInfo::GetPageActionCommand(const Extension* extension) {
-  CommandsInfo* info = static_cast<CommandsInfo*>(
-      extension->GetManifestData(keys::kCommands));
+  auto* info =
+      static_cast<CommandsInfo*>(extension->GetManifestData(keys::kCommands));
   return info ? info->page_action_command.get() : NULL;
 }
 
 // static
 const Command* CommandsInfo::GetActionCommand(const Extension* extension) {
-  CommandsInfo* info =
+  auto* info =
       static_cast<CommandsInfo*>(extension->GetManifestData(keys::kCommands));
   return info ? info->action_command.get() : nullptr;
 }
 
 // static
 const CommandMap* CommandsInfo::GetNamedCommands(const Extension* extension) {
-  CommandsInfo* info = static_cast<CommandsInfo*>(
-      extension->GetManifestData(keys::kCommands));
+  auto* info =
+      static_cast<CommandsInfo*>(extension->GetManifestData(keys::kCommands));
   return info ? &info->named_commands : NULL;
 }
 
-CommandsHandler::CommandsHandler() {
-}
-
-CommandsHandler::~CommandsHandler() {
-}
+CommandsHandler::CommandsHandler() = default;
+CommandsHandler::~CommandsHandler() = default;
 
 bool CommandsHandler::Parse(Extension* extension, std::u16string* error) {
   if (!extension->manifest()->FindKey(keys::kCommands)) {
@@ -121,8 +115,7 @@
     std::string command_name = binding->command_name();
     if (command_name == manifest_values::kBrowserActionCommandEvent) {
       commands_info->browser_action_command = std::move(binding);
-    } else if (command_name ==
-                   manifest_values::kPageActionCommandEvent) {
+    } else if (command_name == manifest_values::kPageActionCommandEvent) {
       commands_info->page_action_command = std::move(binding);
     } else if (command_name == manifest_values::kActionCommandEvent) {
       commands_info->action_command = std::move(binding);
@@ -140,8 +133,8 @@
 
 bool CommandsHandler::AlwaysParseForType(Manifest::Type type) const {
   return type == Manifest::TYPE_EXTENSION ||
-      type == Manifest::TYPE_LEGACY_PACKAGED_APP ||
-      type == Manifest::TYPE_PLATFORM_APP;
+         type == Manifest::TYPE_LEGACY_PACKAGED_APP ||
+         type == Manifest::TYPE_PLATFORM_APP;
 }
 
 void CommandsHandler::MaybeSetBrowserActionDefault(const Extension* extension,
diff --git a/chrome/common/extensions/api/commands/commands_handler.h b/extensions/common/api/commands/commands_handler.h
similarity index 90%
rename from chrome/common/extensions/api/commands/commands_handler.h
rename to extensions/common/api/commands/commands_handler.h
index fcd64cda..416a414 100644
--- a/chrome/common/extensions/api/commands/commands_handler.h
+++ b/extensions/common/api/commands/commands_handler.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_
-#define CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_
+#ifndef EXTENSIONS_COMMON_API_COMMANDS_COMMANDS_HANDLER_H_
+#define EXTENSIONS_COMMON_API_COMMANDS_COMMANDS_HANDLER_H_
 
 #include <memory>
 #include <string>
@@ -59,4 +59,4 @@
 
 }  // namespace extensions
 
-#endif  // CHROME_COMMON_EXTENSIONS_API_COMMANDS_COMMANDS_HANDLER_H_
+#endif  // EXTENSIONS_COMMON_API_COMMANDS_COMMANDS_HANDLER_H_
diff --git a/chrome/common/extensions/api/commands/commands_manifest_unittest.cc b/extensions/common/api/commands/commands_manifest_unittest.cc
similarity index 92%
rename from chrome/common/extensions/api/commands/commands_manifest_unittest.cc
rename to extensions/common/api/commands/commands_manifest_unittest.cc
index 9f70491b..3faa1878 100644
--- a/chrome/common/extensions/api/commands/commands_manifest_unittest.cc
+++ b/extensions/common/api/commands/commands_manifest_unittest.cc
@@ -2,24 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
-
 #include "base/command_line.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/extensions/api/commands/commands_handler.h"
+#include "extensions/common/api/commands/commands_handler.h"
 #include "extensions/common/features/feature_channel.h"
 #include "extensions/common/manifest_constants.h"
+#include "extensions/common/manifest_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace extensions {
 
 namespace errors = manifest_errors;
 
-class CommandsManifestTest : public ChromeManifestTest {
-};
+using CommandsManifestTest = ManifestTest;
 
 TEST_F(CommandsManifestTest, CommandManifestSimple) {
 #if BUILDFLAG(IS_MAC)
@@ -60,8 +57,7 @@
   const Command* page_action =
       CommandsInfo::GetPageActionCommand(extension.get());
   ASSERT_TRUE(NULL != page_action);
-  ASSERT_STREQ("_execute_page_action",
-      page_action->command_name().c_str());
+  ASSERT_STREQ("_execute_page_action", page_action->command_name().c_str());
   ASSERT_STREQ("", base::UTF16ToASCII(page_action->description()).c_str());
   ASSERT_EQ(ctrl_f, page_action->accelerator());
 }
@@ -83,7 +79,7 @@
 
 TEST_F(CommandsManifestTest, CommandManifestRejectJustShift) {
   LoadAndExpectError("command_reject_just_shift.json",
-      errors::kInvalidKeyBinding);
+                     errors::kInvalidKeyBinding);
 }
 
 TEST_F(CommandsManifestTest, BrowserActionSynthesizesCommand) {
diff --git a/extensions/common/common_manifest_handlers.cc b/extensions/common/common_manifest_handlers.cc
index 50e13712..333afb1a 100644
--- a/extensions/common/common_manifest_handlers.cc
+++ b/extensions/common/common_manifest_handlers.cc
@@ -9,6 +9,7 @@
 #include "build/chromeos_buildflags.h"
 #include "components/nacl/common/buildflags.h"
 #include "extensions/common/api/bluetooth/bluetooth_manifest_handler.h"
+#include "extensions/common/api/commands/commands_handler.h"
 #include "extensions/common/api/declarative/declarative_manifest_handler.h"
 #include "extensions/common/api/declarative_net_request/dnr_manifest_handler.h"
 #include "extensions/common/api/printer_provider/usb_printer_manifest_handler.h"
@@ -56,6 +57,7 @@
   registry->RegisterHandler(std::make_unique<AutomationHandler>());
   registry->RegisterHandler(std::make_unique<BackgroundManifestHandler>());
   registry->RegisterHandler(std::make_unique<BluetoothManifestHandler>());
+  registry->RegisterHandler(std::make_unique<CommandsHandler>());
   registry->RegisterHandler(std::make_unique<ContentCapabilitiesHandler>());
   registry->RegisterHandler(std::make_unique<ContentScriptsHandler>());
   registry->RegisterHandler(std::make_unique<CrossOriginIsolationHandler>());
diff --git a/chrome/test/data/extensions/manifest_tests/action_synthesizes_command.json b/extensions/test/data/manifest_tests/action_synthesizes_command.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/action_synthesizes_command.json
rename to extensions/test/data/manifest_tests/action_synthesizes_command.json
diff --git a/chrome/test/data/extensions/manifest_tests/browser_action_synthesizes_command.json b/extensions/test/data/manifest_tests/browser_action_synthesizes_command.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/browser_action_synthesizes_command.json
rename to extensions/test/data/manifest_tests/browser_action_synthesizes_command.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_allow_numbers.json b/extensions/test/data/manifest_tests/command_allow_numbers.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_allow_numbers.json
rename to extensions/test/data/manifest_tests/command_allow_numbers.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_app.json b/extensions/test/data/manifest_tests/command_app.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_app.json
rename to extensions/test/data/manifest_tests/command_app.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_app_global.json b/extensions/test/data/manifest_tests/command_app_global.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_app_global.json
rename to extensions/test/data/manifest_tests/command_app_global.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_ext.json b/extensions/test/data/manifest_tests/command_ext.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_ext.json
rename to extensions/test/data/manifest_tests/command_ext.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_ext_global.json b/extensions/test/data/manifest_tests/command_ext_global.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_ext_global.json
rename to extensions/test/data/manifest_tests/command_ext_global.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_many_but_shortcuts_under_limit.json b/extensions/test/data/manifest_tests/command_many_but_shortcuts_under_limit.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_many_but_shortcuts_under_limit.json
rename to extensions/test/data/manifest_tests/command_many_but_shortcuts_under_limit.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_reject_just_shift.json b/extensions/test/data/manifest_tests/command_reject_just_shift.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_reject_just_shift.json
rename to extensions/test/data/manifest_tests/command_reject_just_shift.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_should_not_count_media_keys.json b/extensions/test/data/manifest_tests/command_should_not_count_media_keys.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_should_not_count_media_keys.json
rename to extensions/test/data/manifest_tests/command_should_not_count_media_keys.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_simple.json b/extensions/test/data/manifest_tests/command_simple.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_simple.json
rename to extensions/test/data/manifest_tests/command_simple.json
diff --git a/chrome/test/data/extensions/manifest_tests/command_too_many.json b/extensions/test/data/manifest_tests/command_too_many.json
similarity index 100%
rename from chrome/test/data/extensions/manifest_tests/command_too_many.json
rename to extensions/test/data/manifest_tests/command_too_many.json
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
index 30a9215..5cfcad9 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
+++ b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
@@ -10,7 +10,6 @@
 #include "components/viz/common/gpu/metal_context_provider.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "components/viz/common/resources/resource_sizes.h"
-#include "gpu/command_buffer/common/shared_image_usage.h"
 #include "gpu/command_buffer/service/mailbox_manager.h"
 #include "gpu/command_buffer/service/shared_context_state.h"
 #include "gpu/command_buffer/service/shared_image_backing.h"
@@ -121,15 +120,12 @@
     texture_descriptor.mipLevelCount = 1;
     texture_descriptor.sampleCount = 1;
 
-    // We need to have internal usages of CopySrc for copies. If texture is not
-    // for video frame import, which has bi-planar format, we also need
-    // RenderAttachment usage for clears.
+    // We need to have internal usages of CopySrc for copies and
+    // RenderAttachment for clears.
     WGPUDawnTextureInternalUsageDescriptor internalDesc = {};
     internalDesc.chain.sType = WGPUSType_DawnTextureInternalUsageDescriptor;
-    internalDesc.internalUsage = WGPUTextureUsage_CopySrc;
-    if (this->usage() & gpu::SHARED_IMAGE_USAGE_WEBGPU_SWAP_CHAIN_TEXTURE)
-      internalDesc.internalUsage |= WGPUTextureUsage_RenderAttachment;
-
+    internalDesc.internalUsage =
+        WGPUTextureUsage_CopySrc | WGPUTextureUsage_RenderAttachment;
     texture_descriptor.nextInChain =
         reinterpret_cast<WGPUChainedStruct*>(&internalDesc);
 
@@ -226,12 +222,6 @@
   if (!io_surface)
     return nullptr;
 
-  // TODO(crbug.com/1293514): Remove this if condition after using single
-  // multiplanar mailbox and actual_format could report multiplanar format
-  // correctly.
-  if (IOSurfaceGetPixelFormat(io_surface) == '420v')
-    actual_format = viz::YUV_420_BIPLANAR;
-
   absl::optional<WGPUTextureFormat> wgpu_format =
       viz::ToWGPUFormat(actual_format);
   if (wgpu_format.value() == WGPUTextureFormat_Undefined)
diff --git a/gpu/command_buffer/service/webgpu_decoder_impl.cc b/gpu/command_buffer/service/webgpu_decoder_impl.cc
index 249fc0a..a157778b 100644
--- a/gpu/command_buffer/service/webgpu_decoder_impl.cc
+++ b/gpu/command_buffer/service/webgpu_decoder_impl.cc
@@ -218,7 +218,9 @@
     NOTIMPLEMENTED();
     return false;
   }
-  bool WasContextLostByRobustnessExtension() const override { return false; }
+  bool WasContextLostByRobustnessExtension() const override {
+    return false;
+  }
   void MarkContextLost(error::ContextLostReason reason) override {
     NOTIMPLEMENTED();
   }
diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc
index 9d08a950..70246c8 100644
--- a/gpu/ipc/service/gpu_init.cc
+++ b/gpu/ipc/service/gpu_init.cc
@@ -37,6 +37,7 @@
 #include "ui/base/ui_base_features.h"
 #include "ui/gfx/switches.h"
 #include "ui/gl/buildflags.h"
+#include "ui/gl/gl_display_manager.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface.h"
 #include "ui/gl/gl_switches.h"
@@ -277,6 +278,13 @@
   if (preferred_gpu)
     system_device_id = CHROME_LUID_to_uint64_t(preferred_gpu->luid);
 #endif
+
+#if defined(USE_EGL)
+  if (system_device_id != 0) {
+    gl::GLDisplayManagerEGL::GetInstance()->SetGpuPreference(
+        gl::GpuPreference::kDefault, system_device_id);
+  }
+#endif  // USE_EGL
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
 #endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CASTOS)
 
diff --git a/infra/archive_config/lacros-arm-archive-rel.json b/infra/archive_config/lacros-arm-archive-rel.json
new file mode 100644
index 0000000..818e790
--- /dev/null
+++ b/infra/archive_config/lacros-arm-archive-rel.json
@@ -0,0 +1,35 @@
+{
+   "archive_datas":[
+      {
+         "files":[
+            "chrome",
+            "chrome_100_percent.pak",
+            "chrome_200_percent.pak",
+            "chrome_crashpad_handler",
+            "headless_lib_data.pak",
+            "headless_lib_strings.pak",
+            "icudtl.dat",
+            "icudtl.dat.hash",
+            "metadata.json",
+            "nacl_helper",
+            "nacl_irt_arm.nexe",
+            "resources.pak",
+            "snapshot_blob.bin"
+         ],
+         "file_globs": [
+            "locales/*.pak"
+         ],
+         "gcs_bucket":"chromium-browser-snapshots",
+         "gcs_path":"lacros_arm/{%position%}/lacros.zip",
+         "archive_type":"ARCHIVE_TYPE_ZIP"
+      },
+      {
+         "files":[
+            "metadata.json"
+         ],
+         "gcs_bucket":"chromium-browser-snapshots",
+         "gcs_path":"lacros_arm/{%position%}",
+         "archive_type":"ARCHIVE_TYPE_FILES"
+      }
+   ]
+}
diff --git a/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json b/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json
index aed0bc6..5cd081ab 100644
--- a/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json
+++ b/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json
@@ -1,4 +1,118 @@
 {
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Builder",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Tests (1)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Linux ASan LSan Builder",
+                "project": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan Tests (sandboxed)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Linux ASan LSan Builder",
+                "project": "chromium"
+              }
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan LSan Builder",
+          "project": "chromium"
+        }
+      ],
+      "builder_ids_in_scope_for_testing": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan LSan Tests (1)",
+          "project": "chromium"
+        },
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan Tests (sandboxed)",
+          "project": "chromium"
+        }
+      ],
+      "mirroring_builder_group_and_names": [
+        {
+          "builder": "linux_chromium_asan_rel_ng",
+          "group": "tryserver.chromium.linux"
+        }
+      ]
+    }
+  },
   "$build/reclient": {
     "instance": "rbe-chromium-trusted",
     "jobs": 500,
diff --git "a/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/properties.json" "b/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/properties.json"
index fd741b6..bc235baf 100644
--- "a/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/properties.json"
@@ -1,4 +1,78 @@
 {
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Builder",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Tests (1)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Linux ASan LSan Builder",
+                "project": "chromium"
+              }
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan LSan Tests (1)",
+          "project": "chromium"
+        }
+      ],
+      "mirroring_builder_group_and_names": [
+        {
+          "builder": "linux_chromium_asan_rel_ng",
+          "group": "tryserver.chromium.linux"
+        }
+      ]
+    }
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git "a/infra/config/generated/builders/ci/Linux ASan Tests \050sandboxed\051/properties.json" "b/infra/config/generated/builders/ci/Linux ASan Tests \050sandboxed\051/properties.json"
index fd741b6..d67a5009 100644
--- "a/infra/config/generated/builders/ci/Linux ASan Tests \050sandboxed\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Linux ASan Tests \050sandboxed\051/properties.json"
@@ -1,4 +1,71 @@
 {
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Builder",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan Tests (sandboxed)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Linux ASan LSan Builder",
+                "project": "chromium"
+              }
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan Tests (sandboxed)",
+          "project": "chromium"
+        }
+      ]
+    }
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json b/infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json
new file mode 100644
index 0000000..b757934
--- /dev/null
+++ b/infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json
@@ -0,0 +1,71 @@
+{
+  "$build/archive": {
+    "source_side_spec_path": [
+      "src",
+      "infra",
+      "archive_config",
+      "lacros-arm-archive-rel.json"
+    ]
+  },
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "lacros-arm-archive-rel",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "builder_group": "chromium",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium",
+                "target_arch": "arm",
+                "target_bits": 32,
+                "target_cros_boards": [
+                  "arm-generic"
+                ],
+                "target_platform": "chromeos"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "chromeos",
+                  "checkout_lacros_sdk"
+                ],
+                "config": "chromium"
+              }
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "lacros-arm-archive-rel",
+          "project": "chromium"
+        }
+      ]
+    }
+  },
+  "$build/goma": {
+    "enable_ats": true,
+    "rpc_extra_params": "?prod",
+    "server_host": "goma.chromium.org",
+    "use_luci_auth": true
+  },
+  "$recipe_engine/resultdb/test_presentation": {
+    "column_keys": [],
+    "grouping_keys": [
+      "status",
+      "v.test_suite"
+    ]
+  },
+  "builder_group": "chromium",
+  "recipe": "chromium"
+}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
index 80c9777..2a6e3fb 100644
--- a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
+++ b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
@@ -1,4 +1,82 @@
 {
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Builder",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Tests (1)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Linux ASan LSan Builder",
+                "project": "chromium"
+              }
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan LSan Builder",
+          "project": "chromium"
+        }
+      ],
+      "builder_ids_in_scope_for_testing": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan LSan Tests (1)",
+          "project": "chromium"
+        }
+      ],
+      "rts_config": {
+        "condition": "QUICK_RUN_ONLY"
+      }
+    }
+  },
   "$build/goma": {
     "enable_ats": true,
     "jobs": 150,
diff --git a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json
index 4c492da9..9026f92 100644
--- a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json
+++ b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json
@@ -3,6 +3,84 @@
     "compilator": "linux_chromium_asan_rel_ng-compilator",
     "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
   },
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Builder",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Linux ASan LSan Tests (1)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-memory-archive",
+              "builder_group": "chromium.memory",
+              "execution_mode": "TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "lsan",
+                  "mb"
+                ],
+                "build_config": "Release",
+                "config": "chromium_asan",
+                "target_bits": 64
+              },
+              "legacy_gclient_config": {
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Linux ASan LSan Builder",
+                "project": "chromium"
+              }
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan LSan Builder",
+          "project": "chromium"
+        }
+      ],
+      "builder_ids_in_scope_for_testing": [
+        {
+          "bucket": "ci",
+          "builder": "Linux ASan LSan Tests (1)",
+          "project": "chromium"
+        }
+      ],
+      "rts_config": {
+        "condition": "QUICK_RUN_ONLY"
+      }
+    }
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg
index f148b280..80bed59 100644
--- a/infra/config/generated/luci/commit-queue.cfg
+++ b/infra/config/generated/luci/commit-queue.cfg
@@ -2017,6 +2017,7 @@
       ref_regexp_exclude: "refs/branch-heads/4896"
       ref_regexp_exclude: "refs/branch-heads/4951"
       ref_regexp_exclude: "refs/branch-heads/5005"
+      ref_regexp_exclude: "refs/branch-heads/5060"
     }
   }
   verifiers {
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index 2393612..7bbe441b 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -31464,6 +31464,85 @@
       }
     }
     builders {
+      name: "lacros-arm-archive-rel"
+      swarming_host: "chromium-swarm.appspot.com"
+      dimensions: "builderless:1"
+      dimensions: "cores:32"
+      dimensions: "cpu:x86-64"
+      dimensions: "os:Ubuntu-18.04"
+      dimensions: "pool:luci.chromium.ci"
+      dimensions: "ssd:0"
+      exe {
+        cipd_package: "infra/chromium/bootstrapper/${platform}"
+        cipd_version: "latest"
+        cmd: "bootstrapper"
+      }
+      properties:
+        '{'
+        '  "$bootstrap/exe": {'
+        '    "exe": {'
+        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
+        '      "cipd_version": "refs/heads/main",'
+        '      "cmd": ['
+        '        "luciexe"'
+        '      ]'
+        '    }'
+        '  },'
+        '  "$bootstrap/properties": {'
+        '    "properties_file": "infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json",'
+        '    "top_level_project": {'
+        '      "ref": "refs/heads/main",'
+        '      "repo": {'
+        '        "host": "chromium.googlesource.com",'
+        '        "project": "chromium/src"'
+        '      }'
+        '    }'
+        '  },'
+        '  "builder_group": "chromium",'
+        '  "led_builder_is_bootstrapped": true,'
+        '  "recipe": "chromium"'
+        '}'
+      execution_timeout_secs: 10800
+      build_numbers: YES
+      service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+      experiments {
+        key: "luci.recipes.use_python3"
+        value: 100
+      }
+      resultdb {
+        enable: true
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "ci_test_results"
+          test_results {}
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "gpu_ci_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
+            }
+          }
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "blink_web_tests_ci_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
+            }
+          }
+        }
+        history_options {
+          use_invocation_timestamp: true
+        }
+      }
+    }
+    builders {
       name: "lacros-arm-generic-rel"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builderless:1"
@@ -36413,7 +36492,7 @@
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builder:mac-arm64-rel"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Mac"
+      dimensions: "os:Mac-11"
       dimensions: "pool:luci.chromium.ci"
       exe {
         cipd_package: "infra/chromium/bootstrapper/${platform}"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg
index d84d553..50c9ad2 100644
--- a/infra/config/generated/luci/luci-milo.cfg
+++ b/infra/config/generated/luci/luci-milo.cfg
@@ -31,6 +31,11 @@
     short_name: "off"
   }
   builders {
+    name: "buildbucket/luci.chromium.ci/lacros-arm-archive-rel"
+    category: "chromium|lacros"
+    short_name: "arm"
+  }
+  builders {
     name: "buildbucket/luci.chromium.ci/lacros64-archive-rel"
     category: "chromium|lacros"
     short_name: "rel"
@@ -799,6 +804,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -1524,6 +1533,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -1988,6 +2001,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -2322,6 +2339,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -2692,6 +2713,11 @@
     short_name: "off"
   }
   builders {
+    name: "buildbucket/luci.chromium.ci/lacros-arm-archive-rel"
+    category: "lacros"
+    short_name: "arm"
+  }
+  builders {
     name: "buildbucket/luci.chromium.ci/lacros64-archive-rel"
     category: "lacros"
     short_name: "rel"
@@ -2977,6 +3003,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -3551,6 +3581,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -3944,6 +3978,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -4368,6 +4406,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -4775,6 +4817,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -5314,6 +5360,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -5753,6 +5803,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -6089,6 +6143,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -6557,6 +6615,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -7334,6 +7396,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -7740,6 +7806,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -8120,6 +8190,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -8490,6 +8564,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -9105,6 +9183,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -9524,6 +9606,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -9918,6 +10004,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -10327,6 +10417,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -10666,6 +10760,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -11005,6 +11103,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -11335,6 +11437,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -11689,6 +11795,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -12148,6 +12258,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -12497,6 +12611,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -12887,6 +13005,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -13251,6 +13373,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -13628,6 +13754,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -13941,6 +14071,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
@@ -14268,6 +14402,10 @@
         url: "/p/chromium-m102/g/main/console"
       }
       links {
+        text: "m103"
+        url: "/p/chromium-m103/g/main/console"
+      }
+      links {
         text: "trunk"
         url: "/p/chromium/g/main/console"
         alt: "Trunk (ToT) console"
diff --git a/infra/config/generated/luci/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg
index 4d2c1f3..afc871ad 100644
--- a/infra/config/generated/luci/luci-scheduler.cfg
+++ b/infra/config/generated/luci/luci-scheduler.cfg
@@ -5281,6 +5281,16 @@
   }
 }
 job {
+  id: "lacros-arm-archive-rel"
+  realm: "ci"
+  acl_sets: "ci"
+  buildbucket {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "ci"
+    builder: "lacros-arm-archive-rel"
+  }
+}
+job {
   id: "lacros-arm-generic-rel"
   realm: "ci"
   acl_sets: "ci"
@@ -7058,6 +7068,7 @@
   triggers: "lacros-amd64-generic-rel (reclient)"
   triggers: "lacros-amd64-generic-rel-fyi"
   triggers: "lacros-amd64-generic-rel-skylab-fyi"
+  triggers: "lacros-arm-archive-rel"
   triggers: "lacros-arm-generic-rel"
   triggers: "lacros64-archive-rel"
   triggers: "linux-angle-builder"
diff --git a/infra/config/generated/luci/realms.cfg b/infra/config/generated/luci/realms.cfg
index 54e3327..d9f33ed 100644
--- a/infra/config/generated/luci/realms.cfg
+++ b/infra/config/generated/luci/realms.cfg
@@ -357,6 +357,7 @@
     principals: "project:chromium-m100"
     principals: "project:chromium-m101"
     principals: "project:chromium-m102"
+    principals: "project:chromium-m103"
     principals: "project:chromium-m92"
     principals: "project:chromium-m96"
     principals: "project:chromium-m97"
@@ -409,6 +410,7 @@
     principals: "project:chromium-m100"
     principals: "project:chromium-m101"
     principals: "project:chromium-m102"
+    principals: "project:chromium-m103"
     principals: "project:chromium-m92"
     principals: "project:chromium-m96"
     principals: "project:chromium-m97"
diff --git a/infra/config/milestones.json b/infra/config/milestones.json
index 52750cf..081cc50 100644
--- a/infra/config/milestones.json
+++ b/infra/config/milestones.json
@@ -28,5 +28,10 @@
         "name": "m102",
         "project": "chromium-m102",
         "ref": "refs/branch-heads/5005"
+    },
+    "103": {
+        "name": "m103",
+        "project": "chromium-m103",
+        "ref": "refs/branch-heads/5060"
     }
 }
diff --git a/infra/config/subprojects/chromium/ci/chromium.mac.star b/infra/config/subprojects/chromium/ci/chromium.mac.star
index d4014cf..f99811e 100644
--- a/infra/config/subprojects/chromium/ci/chromium.mac.star
+++ b/infra/config/subprojects/chromium/ci/chromium.mac.star
@@ -131,7 +131,7 @@
         short_name = "a64",
     ),
     cpu = cpu.ARM64,
-    os = os.MAC_11,
+    os = os.MAC_DEFAULT,
 )
 
 ci.builder(
@@ -156,7 +156,7 @@
         category = "release|arm64",
         short_name = "bld",
     ),
-    os = os.MAC_ANY,
+    os = os.MAC_DEFAULT,
 )
 
 ci.thin_tester(
diff --git a/infra/config/subprojects/chromium/ci/chromium.memory.star b/infra/config/subprojects/chromium/ci/chromium.memory.star
index f03349fc..6056497 100644
--- a/infra/config/subprojects/chromium/ci/chromium.memory.star
+++ b/infra/config/subprojects/chromium/ci/chromium.memory.star
@@ -47,6 +47,21 @@
 linux_memory_builder(
     name = "Linux ASan LSan Builder",
     branch_selector = branches.STANDARD_MILESTONE,
+    builder_spec = builder_config.builder_spec(
+        gclient_config = builder_config.gclient_config(
+            config = "chromium",
+        ),
+        chromium_config = builder_config.chromium_config(
+            config = "chromium_asan",
+            apply_configs = [
+                "lsan",
+                "mb",
+            ],
+            build_config = builder_config.build_config.RELEASE,
+            target_bits = 64,
+        ),
+        build_gs_bucket = "chromium-memory-archive",
+    ),
     console_view_entry = consoles.console_view_entry(
         category = "linux|asan lsan",
         short_name = "bld",
@@ -64,6 +79,22 @@
         short_name = "tst",
     ),
     cq_mirrors_console_view = "mirrors",
+    builder_spec = builder_config.builder_spec(
+        execution_mode = builder_config.execution_mode.TEST,
+        gclient_config = builder_config.gclient_config(
+            config = "chromium",
+        ),
+        chromium_config = builder_config.chromium_config(
+            config = "chromium_asan",
+            apply_configs = [
+                "lsan",
+                "mb",
+            ],
+            build_config = builder_config.build_config.RELEASE,
+            target_bits = 64,
+        ),
+        build_gs_bucket = "chromium-memory-archive",
+    ),
     triggered_by = ["ci/Linux ASan LSan Builder"],
     os = os.LINUX_BIONIC,
     reclient_instance = None,
@@ -72,6 +103,21 @@
 linux_memory_builder(
     name = "Linux ASan Tests (sandboxed)",
     branch_selector = branches.STANDARD_MILESTONE,
+    builder_spec = builder_config.builder_spec(
+        execution_mode = builder_config.execution_mode.TEST,
+        gclient_config = builder_config.gclient_config(
+            config = "chromium",
+        ),
+        chromium_config = builder_config.chromium_config(
+            config = "chromium_asan",
+            apply_configs = [
+                "mb",
+            ],
+            build_config = builder_config.build_config.RELEASE,
+            target_bits = 64,
+        ),
+        build_gs_bucket = "chromium-memory-archive",
+    ),
     console_view_entry = consoles.console_view_entry(
         category = "linux|asan lsan",
         short_name = "sbx",
diff --git a/infra/config/subprojects/chromium/ci/chromium.star b/infra/config/subprojects/chromium/ci/chromium.star
index f4b42c5..3db0eaa 100644
--- a/infra/config/subprojects/chromium/ci/chromium.star
+++ b/infra/config/subprojects/chromium/ci/chromium.star
@@ -208,6 +208,52 @@
 )
 
 ci.builder(
+    name = "lacros-arm-archive-rel",
+    console_view_entry = consoles.console_view_entry(
+        category = "lacros",
+        short_name = "arm",
+    ),
+    branch_selector = branches.STANDARD_MILESTONE,
+    builder_spec = builder_config.builder_spec(
+        gclient_config = builder_config.gclient_config(
+            config = "chromium",
+            apply_configs = [
+                "chromeos",
+                "checkout_lacros_sdk",
+            ],
+        ),
+        chromium_config = builder_config.chromium_config(
+            config = "chromium",
+            apply_configs = [
+                "mb",
+            ],
+            build_config = builder_config.build_config.RELEASE,
+            target_arch = builder_config.target_arch.ARM,
+            target_bits = 32,
+            target_cros_boards = [
+                "arm-generic",
+            ],
+            target_platform = builder_config.target_platform.CHROMEOS,
+        ),
+    ),
+    cores = 32,
+    properties = {
+        # The format of these properties is defined at archive/properties.proto
+        "$build/archive": {
+            "source_side_spec_path": [
+                "src",
+                "infra",
+                "archive_config",
+                "lacros-arm-archive-rel.json",
+            ],
+        },
+    },
+    # TODO(crbug.com/1320042): Turn on after it's stable.
+    tree_closing = False,
+    sheriff_rotations = args.ignore_default(None),
+)
+
+ci.builder(
     name = "linux-archive-dbg",
     builder_spec = builder_config.builder_spec(
         gclient_config = builder_config.gclient_config(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
index a56d85ce..5b7b5055 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
@@ -440,6 +440,15 @@
     branch_selector = branches.STANDARD_MILESTONE,
     main_list_view = "try",
     tryjob = try_.job(),
+    mirrors = [
+        "ci/Linux ASan LSan Builder",
+        "ci/Linux ASan LSan Tests (1)",
+    ],
+    try_settings = builder_config.try_settings(
+        rts_config = builder_config.rts_config(
+            condition = builder_config.rts_condition.QUICK_RUN_ONLY,
+        ),
+    ),
 )
 
 try_.compilator_builder(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star b/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star
index 28989381..d5d0741 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star
@@ -25,7 +25,7 @@
 
 def ios_builder(*, name, **kwargs):
     kwargs.setdefault("builderless", False)
-    kwargs.setdefault("os", os.MAC_11)
+    kwargs.setdefault("os", os.MAC_DEFAULT)
     kwargs.setdefault("ssd", None)
     kwargs.setdefault("xcode", xcode.x13main)
     return try_.builder(name = name, **kwargs)
@@ -42,7 +42,7 @@
     ],
     builderless = False,
     cpu = cpu.ARM64,
-    os = os.MAC_11,
+    os = os.MAC_DEFAULT,
 )
 
 try_.builder(
@@ -131,7 +131,7 @@
 try_.compilator_builder(
     name = "mac11-arm64-rel-compilator",
     main_list_view = "try",
-    os = os.MAC_11,
+    os = os.MAC_DEFAULT,
     # TODO (crbug.com/1245171): Revert when root issue is fixed
     grace_period = 4 * time.minute,
 )
@@ -284,14 +284,14 @@
 ios_builder(
     name = "ios-m1-simulator",
     mirrors = ["ci/ios-m1-simulator"],
-    os = os.MAC_11,
+    os = os.MAC_DEFAULT,
     cpu = cpu.ARM64,
 )
 
 ios_builder(
     name = "ios-m1-simulator-cronet",
     mirrors = ["ci/ios-m1-simulator-cronet"],
-    os = os.MAC_11,
+    os = os.MAC_DEFAULT,
     cpu = cpu.ARM64,
 )
 
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 325625eb..a59490c 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -568,7 +568,7 @@
      flag_descriptions::kIOSOmniboxUpdatedPopupUIDescription, flags_ui::kOsIos,
      FEATURE_WITH_PARAMS_VALUE_TYPE(kIOSOmniboxUpdatedPopupUI,
                                     kiOSOmniboxUpdatedPopupUIVariations,
-                                    "kIOSOmniboxUpdatedPopupUI")},
+                                    "IOSOmniboxUpdatedPopupUI")},
     {"start-surface", flag_descriptions::kStartSurfaceName,
      flag_descriptions::kStartSurfaceDescription, flags_ui::kOsIos,
      FEATURE_WITH_PARAMS_VALUE_TYPE(kStartSurface,
diff --git a/ios/chrome/browser/passwords/BUILD.gn b/ios/chrome/browser/passwords/BUILD.gn
index b8afae5b..0b37491 100644
--- a/ios/chrome/browser/passwords/BUILD.gn
+++ b/ios/chrome/browser/passwords/BUILD.gn
@@ -196,6 +196,7 @@
     "ios_chrome_password_manager_client_unittest.mm",
     "password_controller_js_unittest.mm",
     "password_controller_unittest.mm",
+    "password_tab_helper_unittest.mm",
     "well_known_change_password_tab_helper_unittest.mm",
   ]
   deps = [
diff --git a/ios/chrome/browser/passwords/password_tab_helper.h b/ios/chrome/browser/passwords/password_tab_helper.h
index 0a165c6..ec9fb12 100644
--- a/ios/chrome/browser/passwords/password_tab_helper.h
+++ b/ios/chrome/browser/passwords/password_tab_helper.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_PASSWORDS_PASSWORD_TAB_HELPER_H_
 #define IOS_CHROME_BROWSER_PASSWORDS_PASSWORD_TAB_HELPER_H_
 
+#include "ios/web/public/navigation/web_state_policy_decider.h"
 #include "ios/web/public/web_state_observer.h"
 #import "ios/web/public/web_state_user_data.h"
 
@@ -23,8 +24,10 @@
 class PasswordManagerDriver;
 }
 
-// Class binding a PasswordController to a WebState.
+// Class binding a PasswordController to a WebState. This class also opens a
+// native Passwords UI on a specific link.
 class PasswordTabHelper : public web::WebStateObserver,
+                          public web::WebStatePolicyDecider,
                           public web::WebStateUserData<PasswordTabHelper> {
  public:
   PasswordTabHelper(const PasswordTabHelper&) = delete;
@@ -64,6 +67,13 @@
   // PasswordController. May return nil.
   id<PasswordGenerationProvider> GetPasswordGenerationProvider();
 
+  // web::WebStatePolicyDecider:
+  void ShouldAllowRequest(
+      NSURLRequest* request,
+      web::WebStatePolicyDecider::RequestInfo request_info,
+      web::WebStatePolicyDecider::PolicyDecisionCallback callback) override;
+  void WebStateDestroyed() override;
+
  private:
   friend class web::WebStateUserData<PasswordTabHelper>;
 
diff --git a/ios/chrome/browser/passwords/password_tab_helper.mm b/ios/chrome/browser/passwords/password_tab_helper.mm
index 964d1c5..c46a4e3 100644
--- a/ios/chrome/browser/passwords/password_tab_helper.mm
+++ b/ios/chrome/browser/passwords/password_tab_helper.mm
@@ -6,7 +6,12 @@
 
 #include "base/check.h"
 #include "base/memory/ptr_util.h"
+#include "components/password_manager/core/browser/password_manager_constants.h"
+#include "components/password_manager/core/common/password_manager_features.h"
 #import "ios/chrome/browser/passwords/password_controller.h"
+#import "ios/chrome/browser/ui/commands/application_commands.h"
+#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
+#import "net/base/mac/url_conversions.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -66,7 +71,8 @@
 }
 
 PasswordTabHelper::PasswordTabHelper(web::WebState* web_state)
-    : controller_([[PasswordController alloc] initWithWebState:web_state]) {
+    : web::WebStatePolicyDecider(web_state),
+      controller_([[PasswordController alloc] initWithWebState:web_state]) {
   web_state->AddObserver(this);
 }
 
@@ -75,4 +81,30 @@
   controller_ = nil;
 }
 
+void PasswordTabHelper::ShouldAllowRequest(
+    NSURLRequest* request,
+    web::WebStatePolicyDecider::RequestInfo request_info,
+    web::WebStatePolicyDecider::PolicyDecisionCallback callback) {
+  GURL request_url = net::GURLWithNSURL(request.URL);
+  if (request_info.target_frame_is_main &&
+      ui::PageTransitionCoreTypeIs(request_info.transition_type,
+                                   ui::PAGE_TRANSITION_LINK) &&
+      request_url == GURL(password_manager::kManageMyPasswordsURL) &&
+      base::FeatureList::IsEnabled(
+          password_manager::features::
+              kIOSEnablePasswordManagerBrandingUpdate)) {
+    id<ApplicationSettingsCommands> settings_command_handler =
+        HandlerForProtocol(controller_.dispatcher, ApplicationSettingsCommands);
+
+    [settings_command_handler showSavedPasswordsSettingsFromViewController:nil
+                                                          showCancelButton:NO];
+    std::move(callback).Run(
+        web::WebStatePolicyDecider::PolicyDecision::Cancel());
+    return;
+  }
+  std::move(callback).Run(web::WebStatePolicyDecider::PolicyDecision::Allow());
+}
+
+void PasswordTabHelper::WebStateDestroyed() {}
+
 WEB_STATE_USER_DATA_KEY_IMPL(PasswordTabHelper)
diff --git a/ios/chrome/browser/passwords/password_tab_helper_unittest.mm b/ios/chrome/browser/passwords/password_tab_helper_unittest.mm
new file mode 100644
index 0000000..10ed219
--- /dev/null
+++ b/ios/chrome/browser/passwords/password_tab_helper_unittest.mm
@@ -0,0 +1,158 @@
+// Copyright 2022 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 "ios/chrome/browser/passwords/password_tab_helper.h"
+
+#import <Foundation/Foundation.h>
+
+#include "base/strings/sys_string_conversions.h"
+#include "base/test/bind.h"
+#include "base/test/scoped_feature_list.h"
+#include "components/autofill/ios/form_util/unique_id_data_tab_helper.h"
+#include "components/password_manager/core/browser/password_manager_constants.h"
+#include "components/password_manager/core/common/password_manager_features.h"
+#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/ui/commands/application_commands.h"
+#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
+#import "ios/web/public/navigation/navigation_manager.h"
+#import "ios/web/public/test/fakes/fake_web_client.h"
+#import "ios/web/public/test/fakes/fake_web_state_delegate.h"
+#import "ios/web/public/test/scoped_testing_web_client.h"
+#import "ios/web/public/test/task_observer_util.h"
+#include "ios/web/public/test/web_task_environment.h"
+#import "ios/web/public/test/web_view_content_test_util.h"
+#include "net/test/embedded_test_server/http_request.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+#import "third_party/ocmock/OCMock/OCMock.h"
+#include "third_party/ocmock/gtest_support.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+
+NSString* const kWrongURL = @"https://example.com";
+
+}  // namespace
+
+class PasswordTabHelperTest : public PlatformTest {
+ public:
+  PasswordTabHelperTest()
+      : web_client_(std::make_unique<web::FakeWebClient>()),
+        task_environment_(web::WebTaskEnvironment::Options::IO_MAINLOOP) {
+    browser_state_ = TestChromeBrowserState::Builder().Build();
+
+    web::WebState::CreateParams params(browser_state_.get());
+    web_state_ = web::WebState::Create(params);
+
+    UniqueIDDataTabHelper::CreateForWebState(web_state_.get());
+    PasswordTabHelper::CreateForWebState(web_state_.get());
+
+    feature_list_.InitAndEnableFeature(
+        password_manager::features::kIOSEnablePasswordManagerBrandingUpdate);
+  }
+
+  void SetUp() override {
+    PlatformTest::SetUp();
+
+    id dispatcher = [[CommandDispatcher alloc] init];
+    id mockApplicationSettingsCommandHandler =
+        OCMProtocolMock(@protocol(ApplicationSettingsCommands));
+    [dispatcher
+        startDispatchingToTarget:mockApplicationSettingsCommandHandler
+                     forProtocol:@protocol(ApplicationSettingsCommands)];
+
+    helper_ = PasswordTabHelper::FromWebState(web_state_.get());
+    ASSERT_TRUE(helper_);
+
+    helper_->SetDispatcher(dispatcher);
+  }
+
+ protected:
+  base::test::ScopedFeatureList feature_list_;
+  web::ScopedTestingWebClient web_client_;
+  web::WebTaskEnvironment task_environment_;
+  std::unique_ptr<TestChromeBrowserState> browser_state_;
+  std::unique_ptr<web::WebState> web_state_;
+  PasswordTabHelper* helper_ = nullptr;
+  id dispatcher_;
+};
+
+TEST_F(PasswordTabHelperTest, RedirectsToPasswordsAndCancelsRequest) {
+  NSURLRequest* request = [NSURLRequest
+      requestWithURL:
+          [NSURL URLWithString:base::SysUTF8ToNSString(
+                                   password_manager::kManageMyPasswordsURL)]];
+  const web::WebStatePolicyDecider::RequestInfo request_info(
+      ui::PageTransition::PAGE_TRANSITION_LINK, /*target_frame_is_main=*/true,
+      /*target_frame_is_cross_origin=*/false,
+      /*has_user_gesture=*/false);
+  __block bool callback_called = false;
+  __block web::WebStatePolicyDecider::PolicyDecision request_policy =
+      web::WebStatePolicyDecider::PolicyDecision::Allow();
+  auto callback =
+      base::BindOnce(^(web::WebStatePolicyDecider::PolicyDecision decision) {
+        request_policy = decision;
+        callback_called = true;
+      });
+
+  OCMExpect([dispatcher_ showSavedPasswordsSettingsFromViewController:nil
+                                                     showCancelButton:NO]);
+
+  helper_->ShouldAllowRequest(request, request_info, std::move(callback));
+
+  EXPECT_OCMOCK_VERIFY(dispatcher_);
+  EXPECT_TRUE(callback_called);
+  EXPECT_TRUE(request_policy.ShouldCancelNavigation());
+}
+
+TEST_F(PasswordTabHelperTest, NoRedirectWhenWrongLink) {
+  NSURLRequest* request =
+      [NSURLRequest requestWithURL:[NSURL URLWithString:kWrongURL]];
+  const web::WebStatePolicyDecider::RequestInfo request_info(
+      ui::PageTransition::PAGE_TRANSITION_LINK, /*target_frame_is_main=*/true,
+      /*target_frame_is_cross_origin=*/false,
+      /*has_user_gesture=*/false);
+  __block bool callback_called = false;
+  __block web::WebStatePolicyDecider::PolicyDecision request_policy =
+      web::WebStatePolicyDecider::PolicyDecision::Allow();
+  auto callback =
+      base::BindOnce(^(web::WebStatePolicyDecider::PolicyDecision decision) {
+        request_policy = decision;
+        callback_called = true;
+      });
+
+  helper_->ShouldAllowRequest(request, request_info, std::move(callback));
+
+  EXPECT_OCMOCK_VERIFY(dispatcher_);
+  EXPECT_TRUE(callback_called);
+  EXPECT_FALSE(request_policy.ShouldCancelNavigation());
+}
+
+TEST_F(PasswordTabHelperTest, NoRedirectWhenWrongTransition) {
+  NSURLRequest* request = [NSURLRequest
+      requestWithURL:
+          [NSURL URLWithString:base::SysUTF8ToNSString(
+                                   password_manager::kManageMyPasswordsURL)]];
+  const web::WebStatePolicyDecider::RequestInfo request_info(
+      ui::PageTransition::PAGE_TRANSITION_TYPED, /*target_frame_is_main=*/true,
+      /*target_frame_is_cross_origin=*/false,
+      /*has_user_gesture=*/false);
+  __block bool callback_called = false;
+  __block web::WebStatePolicyDecider::PolicyDecision request_policy =
+      web::WebStatePolicyDecider::PolicyDecision::Allow();
+  auto callback =
+      base::BindOnce(^(web::WebStatePolicyDecider::PolicyDecision decision) {
+        request_policy = decision;
+        callback_called = true;
+      });
+
+  helper_->ShouldAllowRequest(request, request_info, std::move(callback));
+
+  EXPECT_OCMOCK_VERIFY(dispatcher_);
+  EXPECT_TRUE(callback_called);
+  EXPECT_FALSE(request_policy.ShouldCancelNavigation());
+}
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
index c3b7112b..863aa0a 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
@@ -117,7 +117,7 @@
   bool IsAutocompleteEnabled() override;
   bool IsPasswordManagerEnabled() override;
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
+      AutofillDriver* driver,
       const std::vector<FormStructure*>& forms) override;
   void DidFillOrPreviewField(const std::u16string& autofilled_value,
                              const std::u16string& profile_full_name) override;
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
index aa2c2c78..250fc70 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
@@ -388,7 +388,7 @@
 }
 
 void ChromeAutofillClientIOS::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
+    AutofillDriver* driver,
     const std::vector<FormStructure*>& forms) {
   if (!PasswordTabHelper::FromWebState(web_state_)) {
     return;
diff --git a/ios/chrome/browser/ui/first_run/BUILD.gn b/ios/chrome/browser/ui/first_run/BUILD.gn
index 7c806fe..7e75345 100644
--- a/ios/chrome/browser/ui/first_run/BUILD.gn
+++ b/ios/chrome/browser/ui/first_run/BUILD.gn
@@ -122,6 +122,7 @@
   deps = [
     "//base",
     "//components/metrics",
+    "//components/policy/core/common:common_constants",
     "//components/signin/public/identity_manager",
     "//ios/chrome/app:tests_hook",
     "//ios/chrome/browser:application_context",
@@ -187,12 +188,17 @@
 source_set("unit_tests") {
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
-  sources = [ "welcome_to_chrome_view_controller_unittest.mm" ]
+  sources = [
+    "first_run_util_unittest.mm",
+    "welcome_to_chrome_view_controller_unittest.mm",
+  ]
   deps = [
     ":first_run",
+    ":utils",
     "//base",
     "//base/test:test_support",
     "//components/metrics",
+    "//components/policy/core/common:common_constants",
     "//components/prefs",
     "//components/prefs:test_support",
     "//ios/chrome/browser/browser_state:test_support",
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.h b/ios/chrome/browser/ui/first_run/first_run_util.h
index 4d235b2..cc4cf3d 100644
--- a/ios/chrome/browser/ui/first_run/first_run_util.h
+++ b/ios/chrome/browser/ui/first_run/first_run_util.h
@@ -57,4 +57,8 @@
 // prefs, based on whether the consent checkbox should be selected by default.
 void RecordMetricsReportingDefaultState();
 
+// Returns whether the browser is managed based on the presence of policy data
+// in the app configuration.
+bool IsApplicationManged();
+
 #endif  // IOS_CHROME_BROWSER_UI_FIRST_RUN_FIRST_RUN_UTIL_H_
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.mm b/ios/chrome/browser/ui/first_run/first_run_util.mm
index 7344b3b2..3d692af 100644
--- a/ios/chrome/browser/ui/first_run/first_run_util.mm
+++ b/ios/chrome/browser/ui/first_run/first_run_util.mm
@@ -10,6 +10,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/thread_pool.h"
 #import "components/metrics/metrics_reporting_default_state.h"
+#import "components/policy/core/common/policy_loader_ios_constants.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 #import "ios/chrome/app/tests_hook.h"
 #import "ios/chrome/browser/application_context.h"
@@ -175,3 +176,8 @@
             : metrics::EnableMetricsDefault::OPT_IN);
   });
 }
+
+bool IsApplicationManged() {
+  return [[[NSUserDefaults standardUserDefaults]
+             dictionaryForKey:kPolicyLoaderIOSConfigurationKey] count] > 0;
+}
diff --git a/ios/chrome/browser/ui/first_run/first_run_util_unittest.mm b/ios/chrome/browser/ui/first_run/first_run_util_unittest.mm
new file mode 100644
index 0000000..9625654
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/first_run_util_unittest.mm
@@ -0,0 +1,40 @@
+// Copyright 2022 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 "ios/chrome/browser/ui/first_run/first_run_util.h"
+#import "components/policy/core/common/policy_loader_ios_constants.h"
+#import "testing/platform_test.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+using FirstRunUtilTest = PlatformTest;
+
+// Tests IsApplicationManged() when the kPolicyLoaderIOSConfigurationKey value
+// doesn't exist.
+TEST_F(FirstRunUtilTest, TestBrowserManagedNotExist) {
+  NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
+  [userDefaults removeObjectForKey:kPolicyLoaderIOSConfigurationKey];
+  EXPECT_FALSE(IsApplicationManged());
+}
+
+// Tests IsApplicationManged() when the kPolicyLoaderIOSConfigurationKey value
+// is empty.
+TEST_F(FirstRunUtilTest, TestBrowserManagedEmpty) {
+  NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
+  [userDefaults setObject:@{} forKey:kPolicyLoaderIOSConfigurationKey];
+  EXPECT_FALSE(IsApplicationManged());
+  [userDefaults removeObjectForKey:kPolicyLoaderIOSConfigurationKey];
+}
+
+// Tests IsApplicationManged() when the kPolicyLoaderIOSConfigurationKey value
+// is not empty.
+TEST_F(FirstRunUtilTest, TestBrowserManagedWithValue) {
+  NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
+  NSDictionary* dict = @{@"key" : @"value"};
+  [userDefaults setObject:dict forKey:kPolicyLoaderIOSConfigurationKey];
+  EXPECT_TRUE(IsApplicationManged());
+  [userDefaults removeObjectForKey:kPolicyLoaderIOSConfigurationKey];
+}
diff --git a/ios/chrome/browser/ui/first_run/signin/BUILD.gn b/ios/chrome/browser/ui/first_run/signin/BUILD.gn
index 37b0024..e186179 100644
--- a/ios/chrome/browser/ui/first_run/signin/BUILD.gn
+++ b/ios/chrome/browser/ui/first_run/signin/BUILD.gn
@@ -49,6 +49,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/elements:elements_internal",
     "//ios/chrome/browser/ui/first_run:constants",
+    "//ios/chrome/browser/ui/first_run:utils",
     "//ios/chrome/browser/ui/first_run/resources:signin_banner",
     "//ios/chrome/browser/ui/settings/elements:enterprise_info_popover_view_controller",
     "//ios/chrome/common:string_util",
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_consumer.h b/ios/chrome/browser/ui/first_run/signin/signin_screen_consumer.h
index a0e5af0..a4a1fe02 100644
--- a/ios/chrome/browser/ui/first_run/signin/signin_screen_consumer.h
+++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_consumer.h
@@ -34,7 +34,7 @@
 
 // Shows details (an icon and a footer) that Chrome is managed.
 // This property needs to be set before the view is loaded.
-@property(nonatomic, assign) BOOL managedEnabled;
+@property(nonatomic, assign) BOOL isManaged;
 // Sets if the screen intent see SigninScreenConsumerScreenIntent.
 // This property needs to be set before the view is loaded.
 @property(nonatomic, assign) SigninScreenConsumerScreenIntent screenIntent;
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm b/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm
index ec0bd524..72fc7ea 100644
--- a/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm
+++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm
@@ -248,10 +248,7 @@
       _consumer.signinStatus = SigninScreenConsumerSigninStatusDisabled;
       break;
   }
-  self.consumer.managedEnabled =
-      GetEnterpriseSignInRestrictions(self.authenticationService,
-                                      self.prefService, self.syncService) !=
-      kNoEnterpriseRestriction;
+  self.consumer.isManaged = IsApplicationManged();
   if (!self.showFREConsent) {
     self.consumer.screenIntent = SigninScreenConsumerScreenIntentSigninOnly;
   } else {
@@ -264,8 +261,6 @@
         metricReportingDisabled
             ? SigninScreenConsumerScreenIntentWelcomeWithoutUMAAndSignin
             : SigninScreenConsumerScreenIntentWelcomeAndSignin;
-    self.consumer.managedEnabled |= self.localPrefService->IsManagedPreference(
-        metrics::prefs::kMetricsReportingEnabled);
   }
   if (signinForcedOrAvailable) {
     self.selectedIdentity = self.accountManagerService->GetDefaultIdentity();
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm b/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm
index 5267b9fc5..4cd2bc6 100644
--- a/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm
+++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm
@@ -50,7 +50,7 @@
 @implementation SigninScreenViewController
 
 @dynamic delegate;
-@synthesize managedEnabled = _managedEnabled;
+@synthesize isManaged = _isManaged;
 @synthesize screenIntent = _screenIntent;
 @synthesize signinStatus = _signinStatus;
 
@@ -117,7 +117,7 @@
   }
 
   // Add enterprise image view.
-  if (self.managedEnabled) {
+  if (self.isManaged) {
     NSLayoutYAxisAnchor* topAnchorForEnterpriseIcon =
         self.signinStatus == SigninScreenConsumerSigninStatusDisabled
             ? self.specificContentView.topAnchor
@@ -196,7 +196,7 @@
 - (void)generateDisclaimer {
   NSMutableArray<NSString*>* array = [NSMutableArray array];
   NSMutableArray<NSURL*>* urls = [NSMutableArray array];
-  if (self.managedEnabled) {
+  if (self.isManaged) {
     [array addObject:l10n_util::GetNSString(
                          IDS_IOS_FIRST_RUN_WELCOME_SCREEN_BROWSER_MANAGED)];
   }
diff --git a/ios/chrome/browser/ui/first_run/welcome/BUILD.gn b/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
index 27ef1bc..268041ec 100644
--- a/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
+++ b/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
@@ -37,6 +37,7 @@
     "checkbox_button.mm",
     "tos_view_controller.h",
     "tos_view_controller.mm",
+    "welcome_screen_consumer.h",
     "welcome_screen_mediator.h",
     "welcome_screen_mediator.mm",
     "welcome_screen_view_controller.h",
@@ -45,7 +46,6 @@
   deps = [
     "//base",
     "//components/metrics",
-    "//components/policy/core/common:common_constants",
     "//components/prefs",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser",
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_consumer.h b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_consumer.h
new file mode 100644
index 0000000..006e6089
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_consumer.h
@@ -0,0 +1,16 @@
+// Copyright 2022 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 IOS_CHROME_BROWSER_UI_FIRST_RUN_WELCOME_WELCOME_SCREEN_CONSUMER_H_
+#define IOS_CHROME_BROWSER_UI_FIRST_RUN_WELCOME_WELCOME_SCREEN_CONSUMER_H_
+
+#import <Foundation/Foundation.h>
+
+@protocol WelcomeScreenConsumer <NSObject>
+
+@property(nonatomic, assign) BOOL isManaged;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_FIRST_RUN_WELCOME_WELCOME_SCREEN_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm
index 59a8304..b5f57b0 100644
--- a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm
@@ -73,6 +73,7 @@
       [[WelcomeScreenViewController alloc] initWithTOSHandler:TOSHandler];
   self.viewController.delegate = self;
   self.mediator = [[WelcomeScreenMediator alloc] init];
+  self.mediator.consumer = self.viewController;
 
   BOOL animated = self.baseNavigationController.topViewController != nil;
   [self.baseNavigationController setViewControllers:@[ self.viewController ]
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.h b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.h
index cc5a817..d2c68ba7 100644
--- a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.h
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.h
@@ -7,12 +7,16 @@
 
 #import <Foundation/Foundation.h>
 
+@protocol WelcomeScreenConsumer;
+
 // Mediator that handles writing to prefs for the welcome screen.
 @interface WelcomeScreenMediator : NSObject
 
 // Contains the user choice for UMA reporting. This value is set to the default
 // value when the coordinator is initialized.
 @property(nonatomic, assign) BOOL UMAReportingUserChoice;
+// Mediator's consumer.
+@property(nonatomic, weak) id<WelcomeScreenConsumer> consumer;
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.mm b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.mm
index c3de7764f..46675910 100644
--- a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.mm
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_mediator.mm
@@ -8,6 +8,7 @@
 #include "components/prefs/pref_service.h"
 #import "ios/chrome/browser/application_context.h"
 #import "ios/chrome/browser/ui/first_run/first_run_util.h"
+#import "ios/chrome/browser/ui/first_run/welcome/welcome_screen_consumer.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -39,4 +40,11 @@
       metrics::prefs::kMetricsReportingEnabled, enabled);
 }
 
+#pragma mark - Properties
+
+- (void)setConsumer:(id<WelcomeScreenConsumer>)consumer {
+  _consumer = consumer;
+  self.consumer.isManaged = IsApplicationManged();
+}
+
 @end
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.h b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.h
index 46b592f..ca3d5411 100644
--- a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.h
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_UI_FIRST_RUN_WELCOME_WELCOME_SCREEN_VIEW_CONTROLLER_H_
 #define IOS_CHROME_BROWSER_UI_FIRST_RUN_WELCOME_WELCOME_SCREEN_VIEW_CONTROLLER_H_
 
+#import "ios/chrome/browser/ui/first_run/welcome/welcome_screen_consumer.h"
 #import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h"
 
 @protocol TOSCommands;
@@ -23,7 +24,8 @@
 @end
 
 // View controller of welcome screen.
-@interface WelcomeScreenViewController : PromoStyleViewController
+@interface WelcomeScreenViewController
+    : PromoStyleViewController <WelcomeScreenConsumer>
 
 @property(nonatomic, weak) id<WelcomeScreenViewControllerDelegate> delegate;
 
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm
index 30610f3a..f3f425f 100644
--- a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm
@@ -6,7 +6,6 @@
 
 #include "base/notreached.h"
 #import "base/strings/sys_string_conversions.h"
-#import "components/policy/core/common/policy_loader_ios_constants.h"
 #import "ios/chrome/browser/ui/commands/tos_commands.h"
 #import "ios/chrome/browser/ui/first_run/first_run_constants.h"
 #import "ios/chrome/browser/ui/first_run/fre_field_trial.h"
@@ -53,7 +52,9 @@
 @end
 
 @implementation WelcomeScreenViewController
+
 @dynamic delegate;
+@synthesize isManaged = _isManaged;
 
 - (instancetype)initWithTOSHandler:(id<TOSCommands>)TOSHandler {
   DCHECK(TOSHandler);
@@ -111,7 +112,7 @@
     ]];
   }
 
-  if ([self isBrowserManaged]) {
+  if (self.isManaged) {
     UILabel* managedLabel = [self createManagedLabel];
     UIView* managedIcon = [self createManagedIcon];
     [self.specificContentView addSubview:managedLabel];
@@ -165,7 +166,7 @@
 // Configures the text for the title and subtitle based on whether the browser
 // is managed or not.
 - (void)configureLabels {
-  if ([self isBrowserManaged]) {
+  if (self.isManaged) {
     self.titleText = l10n_util::GetNSString(
         IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE);
     self.subtitleText = l10n_util::GetNSString(
@@ -321,13 +322,6 @@
   self.metricsConsentButton.selected = !self.metricsConsentButton.selected;
 }
 
-// Returns whether the browser is managed based on the presence of policy data
-// in the app configuration.
-- (BOOL)isBrowserManaged {
-  return [[[NSUserDefaults standardUserDefaults]
-             dictionaryForKey:kPolicyLoaderIOSConfigurationKey] count] > 0;
-}
-
 #pragma mark - UITextViewDelegate
 
 - (BOOL)textView:(UITextView*)textView
diff --git a/ios/chrome/browser/ui/omnibox/popup/shared/popup_match_row_view.swift b/ios/chrome/browser/ui/omnibox/popup/shared/popup_match_row_view.swift
index d752d0d..9c6f094 100644
--- a/ios/chrome/browser/ui/omnibox/popup/shared/popup_match_row_view.swift
+++ b/ios/chrome/browser/ui/omnibox/popup/shared/popup_match_row_view.swift
@@ -138,7 +138,7 @@
       if isHighlighted {
         LinearGradient(gradient: Colors.highlightingGradient, startPoint: .top, endPoint: .bottom)
       } else if self.isPressed {
-        Color.tableRowViewHighlight
+        Color.updatedTertiaryBackground
       }
 
       button
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
index 8d45b59..8fcd9725 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
@@ -1140,6 +1140,9 @@
       imageNamed:status ? @"popup_menu_unfollow" : @"popup_menu_follow"];
   __weak __typeof(self) weakSelf = self;
   self.followAction.handler = ^{
+    RecordAction(status ? UserMetricsAction("MobileMenuUnfollow")
+                        : UserMetricsAction("MobileMenuFollow"));
+    // TODO(crbug.com/1324452): Record histogram.
     [weakSelf updateFollowStatus:!status withFollowWebPageURLs:webPageURLs];
   };
 }
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm
index 567a107..e9d2e4f3 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm
@@ -10,6 +10,8 @@
 #include "base/mac/foundation_util.h"
 #import "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/metrics/user_metrics.h"
+#include "base/metrics/user_metrics_action.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/common/bookmark_pref_names.h"
@@ -89,6 +91,9 @@
 #error "This file requires ARC support."
 #endif
 
+using base::RecordAction;
+using base::UserMetricsAction;
+
 namespace {
 PopupMenuToolsItem* CreateTableViewItem(int titleID,
                                         PopupMenuAction action,
@@ -651,6 +656,9 @@
 
 - (void)updateFollowStatus {
   DCHECK(IsWebChannelsEnabled());
+  RecordAction(self.followStatus ? UserMetricsAction("MobileMenuUnfollow")
+                                 : UserMetricsAction("MobileMenuFollow"));
+  // TODO(crbug.com/1324452): Record histogram.
   ios::GetChromeBrowserProvider().GetFollowProvider()->UpdateFollowStatus(
       self.webPageURLs, !self.followStatus);
 }
diff --git a/ios/chrome/browser/ui/ui_feature_flags.cc b/ios/chrome/browser/ui/ui_feature_flags.cc
index d722233..d79f04e 100644
--- a/ios/chrome/browser/ui/ui_feature_flags.cc
+++ b/ios/chrome/browser/ui/ui_feature_flags.cc
@@ -38,7 +38,7 @@
     "kIOSNewOmniboxImplementation", base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kIOSOmniboxUpdatedPopupUI{
-    "kIOSOmniboxUpdatedPopupUI", base::FEATURE_DISABLED_BY_DEFAULT};
+    "IOSOmniboxUpdatedPopupUI", base::FEATURE_DISABLED_BY_DEFAULT};
 
 const char kIOSOmniboxUpdatedPopupUIVariationName[] = "PopupUIVariant";
 
diff --git a/ios/chrome/common/ui/colors/Color+Chrome.swift b/ios/chrome/common/ui/colors/Color+Chrome.swift
index 3799f6e..5d19f05 100644
--- a/ios/chrome/common/ui/colors/Color+Chrome.swift
+++ b/ios/chrome/common/ui/colors/Color+Chrome.swift
@@ -21,6 +21,11 @@
     return Color(kTertiaryBackgroundColor)
   }
 
+  /// The updated tertiary background color
+  public static var updatedTertiaryBackground: Color {
+    return Color(kUpdatedTertiaryBackgroundColor)
+  }
+
   /// The primary grouped background color.
   public static var groupedPrimaryBackground: Color {
     return Color(kGroupedPrimaryBackgroundColor)
diff --git a/ios/chrome/common/ui/colors/resources/BUILD.gn b/ios/chrome/common/ui/colors/resources/BUILD.gn
index 9e43fc0..aac54c9 100644
--- a/ios/chrome/common/ui/colors/resources/BUILD.gn
+++ b/ios/chrome/common/ui/colors/resources/BUILD.gn
@@ -51,6 +51,7 @@
     ":textfield_placeholder_color",
     ":toolbar_button_color",
     ":toolbar_shadow_color",
+    ":updated_tertiary_background_color",
   ]
 }
 
@@ -178,6 +179,10 @@
   sources = [ "tertiary_background_color.colorset/Contents.json" ]
 }
 
+colorset("updated_tertiary_background_color") {
+  sources = [ "updated_tertiary_background_color.colorset/Contents.json" ]
+}
+
 colorset("text_tertiary_color") {
   sources = [ "text_tertiary_color.colorset/Contents.json" ]
 }
diff --git a/ios/chrome/common/ui/colors/resources/updated_tertiary_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/updated_tertiary_background_color.colorset/Contents.json
new file mode 100644
index 0000000..1aa35300
--- /dev/null
+++ b/ios/chrome/common/ui/colors/resources/updated_tertiary_background_color.colorset/Contents.json
@@ -0,0 +1,38 @@
+{
+  "info": {
+    "version": 1,
+    "author": "xcode"
+  },
+  "colors": [
+    {
+      "idiom": "universal",
+      "color": {
+        "color-space": "display-p3",
+        "components": {
+          "alpha": "1.000",
+          "red": "0xDA",
+          "green": "0xDC",
+          "blue": "0xE0"
+        }
+      }
+    },
+    {
+      "idiom": "universal",
+      "appearances": [
+        {
+          "appearance": "luminosity",
+          "value": "dark"
+        }
+      ],
+      "color": {
+        "color-space": "display-p3",
+        "components": {
+          "alpha": "1.000",
+          "red": "0x46",
+          "green": "0x4A",
+          "blue": "0x4E"
+        }
+      }
+    }
+  ]
+}
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.h b/ios/chrome/common/ui/colors/semantic_color_names.h
index f613ddd..d041316 100644
--- a/ios/chrome/common/ui/colors/semantic_color_names.h
+++ b/ios/chrome/common/ui/colors/semantic_color_names.h
@@ -35,6 +35,7 @@
 extern NSString* const kSolidButtonTextColor;
 extern NSString* const kTableViewRowHighlightColor;
 extern NSString* const kTertiaryBackgroundColor;
+extern NSString* const kUpdatedTertiaryBackgroundColor;
 extern NSString* const kTextPrimaryColor;
 extern NSString* const kTextSecondaryColor;
 extern NSString* const kTextTertiaryColor;
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.mm b/ios/chrome/common/ui/colors/semantic_color_names.mm
index 3936979..06d34ec 100644
--- a/ios/chrome/common/ui/colors/semantic_color_names.mm
+++ b/ios/chrome/common/ui/colors/semantic_color_names.mm
@@ -28,6 +28,8 @@
 NSString* const kSolidButtonTextColor = @"solid_button_text_color";
 NSString* const kTableViewRowHighlightColor = @"table_view_row_highlight_color";
 NSString* const kTertiaryBackgroundColor = @"tertiary_background_color";
+NSString* const kUpdatedTertiaryBackgroundColor =
+    @"updated_tertiary_background_color";
 NSString* const kTextPrimaryColor = @"text_primary_color";
 NSString* const kTextSecondaryColor = @"text_secondary_color";
 NSString* const kTextTertiaryColor = @"text_tertiary_color";
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn
index bdb0db8..8e55e6c 100644
--- a/ios/chrome/test/BUILD.gn
+++ b/ios/chrome/test/BUILD.gn
@@ -289,6 +289,7 @@
     "//ios/chrome/browser/ui/elements:unit_tests",
     "//ios/chrome/browser/ui/fancy_ui:unit_tests",
     "//ios/chrome/browser/ui/first_run:unit_tests",
+    "//ios/chrome/browser/ui/first_run:unit_tests",
     "//ios/chrome/browser/ui/first_run/legacy_signin:unit_tests",
     "//ios/chrome/browser/ui/first_run/sync:unit_tests",
     "//ios/chrome/browser/ui/fullscreen:unit_tests",
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
index cf64f84..c8efe1d 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
@@ -110,7 +110,7 @@
   bool IsAutocompleteEnabled() override;
   bool IsPasswordManagerEnabled() override;
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
+      AutofillDriver* driver,
       const std::vector<FormStructure*>& forms) override;
   void DidFillOrPreviewField(const std::u16string& autofilled_value,
                              const std::u16string& profile_full_name) override;
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
index 75b3000..64e5c49 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
@@ -288,7 +288,7 @@
 }
 
 void WebViewAutofillClientIOS::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
+    AutofillDriver* driver,
     const std::vector<FormStructure*>& forms) {
   [bridge_ propagateAutofillPredictionsForForms:forms];
 }
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index 280a832..1559ee3 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -608,7 +608,7 @@
 // tab instead" button is shown for chrome.desktopCapture captures.
 const base::Feature kShareThisTabInsteadButtonGetDisplayMedia{
     "ShareThisTabInsteadButtonGetDisplayMedia",
-    base::FEATURE_ENABLED_BY_DEFAULT};
+    base::FEATURE_DISABLED_BY_DEFAULT};
 
 // If kShareThisTabInsteadButtonGetDisplayMedia is ENABLED, this flag controls
 // whether a "Share this tab instead" button should be enabled for
diff --git a/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc b/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc
index ca9b47773..a3d1d0b 100644
--- a/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc
+++ b/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc
@@ -347,6 +347,10 @@
   token_manager_.UnregisterPluginVmToken(token);
 }
 
+void CameraHalDispatcherImpl::DisableSensorForTesting() {
+  sensor_enabled_ = false;
+}
+
 CameraHalDispatcherImpl::CameraHalDispatcherImpl()
     : proxy_thread_("CameraProxyThread"),
       blocking_io_thread_("CameraBlockingIOThread"),
@@ -451,6 +455,11 @@
     RegisterSensorClientWithTokenCallback callback) {
   DCHECK(proxy_task_runner_->BelongsToCurrentThread());
 
+  if (!sensor_enabled_) {
+    std::move(callback).Run(-EPERM);
+    return;
+  }
+
   main_task_runner_->PostTask(
       FROM_HERE,
       base::BindOnce(
diff --git a/media/capture/video/chromeos/camera_hal_dispatcher_impl.h b/media/capture/video/chromeos/camera_hal_dispatcher_impl.h
index a6ef60e..eb7953b 100644
--- a/media/capture/video/chromeos/camera_hal_dispatcher_impl.h
+++ b/media/capture/video/chromeos/camera_hal_dispatcher_impl.h
@@ -166,6 +166,9 @@
   void RegisterPluginVmToken(const base::UnguessableToken& token);
   void UnregisterPluginVmToken(const base::UnguessableToken& token);
 
+  // Used when running capture unittests to avoid running sensor related path.
+  void DisableSensorForTesting();
+
   // CameraHalDispatcher implementations.
   void RegisterServer(
       mojo::PendingRemote<cros::mojom::CameraHalServer> server) final;
@@ -287,6 +290,8 @@
   scoped_refptr<base::ObserverListThreadSafe<CameraPrivacySwitchObserver>>
       privacy_switch_observers_;
 
+  bool sensor_enabled_ = true;
+
   base::WeakPtrFactory<CameraHalDispatcherImpl> weak_factory_{this};
 };
 
diff --git a/media/capture/video/video_capture_device_unittest.cc b/media/capture/video/video_capture_device_unittest.cc
index 61165af..674e15c 100644
--- a/media/capture/video/video_capture_device_unittest.cc
+++ b/media/capture/video/video_capture_device_unittest.cc
@@ -289,6 +289,15 @@
         !CameraHalDispatcherImpl::GetInstance()->IsStarted()) {
       CameraHalDispatcherImpl::GetInstance()->Start(base::DoNothing(),
                                                     base::DoNothing());
+      // Since the callback is posted to the main task, it might introduce
+      // issues when destroying the main task runner while the callback hasn't
+      // been triggered. Since we don't do sensor related check in video capture
+      // tests, it should be okay to simply disable sensor code path for
+      // testing.
+      // If the sensor initialization becomes a part of the camera
+      // initialization in the future, we should include the check for sensors
+      // in the test codes instead of simply disabling it.
+      CameraHalDispatcherImpl::GetInstance()->DisableSensorForTesting();
     }
 #endif
     video_capture_device_factory_ =
diff --git a/media/gpu/ipc/service/picture_buffer_manager.cc b/media/gpu/ipc/service/picture_buffer_manager.cc
index 47229a7..7c02ce15 100644
--- a/media/gpu/ipc/service/picture_buffer_manager.cc
+++ b/media/gpu/ipc/service/picture_buffer_manager.cc
@@ -252,7 +252,6 @@
     frame->metadata().allow_overlay = picture.allow_overlay();
     frame->metadata().read_lock_fences_enabled =
         picture.read_lock_fences_enabled();
-    frame->metadata().is_webgpu_compatible = picture.is_webgpu_compatible();
 
     // TODO(sandersd): Provide an API for VDAs to control this.
     frame->metadata().power_efficient = true;
diff --git a/media/gpu/mac/vt_video_decode_accelerator_mac.cc b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
index 9b34236..a2abeca8 100644
--- a/media/gpu/mac/vt_video_decode_accelerator_mac.cc
+++ b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
@@ -2225,9 +2225,6 @@
     picture.set_scoped_shared_image(picture_info->scoped_shared_images[plane],
                                     plane);
   }
-  if (picture_format_ == PIXEL_FORMAT_NV12)
-    picture.set_is_webgpu_compatible(true);
-
   client_->PictureReady(std::move(picture));
   return true;
 }
diff --git a/media/video/picture.cc b/media/video/picture.cc
index 216db308..046aeb1 100644
--- a/media/video/picture.cc
+++ b/media/video/picture.cc
@@ -98,8 +98,7 @@
       read_lock_fences_enabled_(false),
       size_changed_(false),
       texture_owner_(false),
-      wants_promotion_hint_(false),
-      is_webgpu_compatible_(false) {}
+      wants_promotion_hint_(false) {}
 
 Picture::Picture(const Picture& other) = default;
 
diff --git a/media/video/picture.h b/media/video/picture.h
index 088a1c9..0b2173d 100644
--- a/media/video/picture.h
+++ b/media/video/picture.h
@@ -173,12 +173,6 @@
     return scoped_shared_images_[plane];
   }
 
-  void set_is_webgpu_compatible(bool is_webgpu_compatible) {
-    is_webgpu_compatible_ = is_webgpu_compatible;
-  }
-
-  bool is_webgpu_compatible() { return is_webgpu_compatible_; }
-
  private:
   int32_t picture_buffer_id_;
   int32_t bitstream_buffer_id_;
@@ -189,7 +183,6 @@
   bool size_changed_;
   bool texture_owner_;
   bool wants_promotion_hint_;
-  bool is_webgpu_compatible_;
   std::array<scoped_refptr<ScopedSharedImage>, VideoFrame::kMaxPlanes>
       scoped_shared_images_;
 };
diff --git a/mojo/public/rust/BUILD.gn b/mojo/public/rust/BUILD.gn
index 0861bd2..bdc7c706 100644
--- a/mojo/public/rust/BUILD.gn
+++ b/mojo/public/rust/BUILD.gn
@@ -24,22 +24,6 @@
   }
 }
 
-source_set("c_support_header") {
-  sources = [ "support.h" ]
-  deps = [ "//mojo/public/c/system:headers" ]
-  visibility = [ ":*" ]
-}
-
-static_library("c_support") {
-  sources = [ "support.cc" ]
-  deps = [
-    ":c_support_header",
-    "//mojo/public/c/system",
-    "//mojo/public/cpp/system",
-  ]
-  visibility = [ ":*" ]
-}
-
 static_library("c_test_support") {
   testonly = true
   sources = [ "test_support.cc" ]
@@ -53,10 +37,7 @@
 
 source_set("mojo_c_system_wrapper") {
   sources = [ "system/wrapper.h" ]
-  deps = [
-    ":c_support_header",
-    "//mojo/public/c/system:headers",
-  ]
+  deps = [ "//mojo/public/c/system:headers" ]
   visibility = [ ":*" ]
 }
 
@@ -98,7 +79,6 @@
   ]
 
   deps = [
-    ":c_support",
     ":mojo_c_system_binding",
     ":mojo_c_system_wrapper",
   ]
diff --git a/mojo/public/rust/bindings/run_loop.rs b/mojo/public/rust/bindings/run_loop.rs
index 02d6939..cf5bb60 100644
--- a/mojo/public/rust/bindings/run_loop.rs
+++ b/mojo/public/rust/bindings/run_loop.rs
@@ -24,7 +24,6 @@
 use std::collections::BinaryHeap;
 use std::collections::HashMap;
 use std::i64;
-use std::u32;
 use std::vec::Vec;
 
 use crate::system;
@@ -49,13 +48,13 @@
 
 /// Token representing handle/callback to wait on for this thread only. This
 /// token only has meaning on the thread in which the handle was registered.
-#[derive(Clone, Debug, PartialEq, Eq, Hash)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
 pub struct Token(u64);
 
 impl Token {
     /// Get the wait token's "cookie" form, suitable for use in a wait set.
-    fn as_cookie(&self) -> u64 {
-        self.0
+    fn to_cookie(self) -> wait_set::WaitSetCookie {
+        wait_set::WaitSetCookie(self.0)
     }
 }
 
@@ -66,9 +65,6 @@
     /// The handle has been closed or is otherwise no longer valid.
     HandleClosed,
 
-    /// The handle is currently busy in some transaction.
-    HandleBusy,
-
     /// It has been determined that the signals provided will never
     /// be satisfied for this handle.
     Unsatisfiable,
@@ -111,38 +107,11 @@
     deadline: system::MojoTimeTicks,
 }
 
-impl<'h> HandlerInfo<'h> {
-    /// Take the handler out of its Option type.
-    pub fn take(&mut self) -> Option<Box<dyn Handler + 'h>> {
-        self.handler.take()
-    }
-
-    /// Put a new handler into the Option type.
-    pub fn give(&mut self, handler: Box<dyn Handler + 'h>) {
-        self.handler = Some(handler);
-    }
-
-    /// Getter for the system::MojoHandle held inside.
-    pub fn handle(&self) -> system::MojoHandle {
-        self.handle
-    }
-
-    /// Getter for the current absolute deadline held inside.
-    pub fn deadline(&self) -> system::MojoTimeTicks {
-        self.deadline
-    }
-
-    /// Setter to update the current absolute deadline.
-    pub fn set_deadline(&mut self, deadline: system::MojoTimeTicks) {
-        self.deadline = deadline
-    }
-}
-
 /// A wrapper struct for carrying the task as well as some information about
 /// it.
 struct TaskInfo<'t> {
     /// The task, boxed up.
-    closure: Box<dyn FnMut(&mut RunLoop) + 't>,
+    closure: Box<dyn FnOnce(&mut RunLoop) + 't>,
 
     /// An absolute deadline in terms of time ticks.
     ///
@@ -155,8 +124,8 @@
 impl<'t> TaskInfo<'t> {
     /// Executes the task within the info object, consuming it
     /// in the process.
-    pub fn execute_task(mut self, run_loop: &mut RunLoop) {
-        (*self.closure)(run_loop);
+    pub fn execute_task(self, run_loop: &mut RunLoop) {
+        (self.closure)(run_loop);
     }
 
     /// Getter for the current absolute deadline held inside.
@@ -309,7 +278,7 @@
             handlers: HashMap::new(),
             tasks: BinaryHeap::new(),
             deadlines: BinaryHeap::new(),
-            handle_set: wait_set::WaitSet::new(wsflags!(Create::None)).unwrap(),
+            handle_set: wait_set::WaitSet::new().unwrap(),
             should_quit: false,
             running: false,
         }
@@ -334,9 +303,10 @@
     {
         let token = self.generate_token();
         let abs_deadline = absolute_deadline(deadline);
-        self.handle_set.add(handle, signals, token.as_cookie(), wsflags!(Add::None));
+        let result = self.handle_set.add(handle, signals, token.to_cookie());
+        assert_eq!(result, MojoResult::Okay);
         self.deadlines.push(DeadlineInfo { token: token.clone(), deadline: abs_deadline });
-        debug_assert!(!self.handlers.contains_key(&token));
+        assert!(!self.handlers.contains_key(&token));
         self.handlers.insert(
             token.clone(),
             HandlerInfo {
@@ -361,12 +331,12 @@
     ) -> bool {
         match self.handlers.get_mut(&token) {
             Some(info) => {
-                let _result = self.handle_set.remove(token.as_cookie());
-                debug_assert_eq!(_result, MojoResult::Okay);
+                let result = self.handle_set.remove(token.to_cookie());
+                assert_eq!(result, MojoResult::Okay);
                 let abs_deadline = absolute_deadline(deadline);
                 // Update what deadline we should be looking for, rendering
                 // all previously set deadlines "stale".
-                info.set_deadline(abs_deadline);
+                info.deadline = abs_deadline;
                 // Add a new deadline
                 self.deadlines.push(DeadlineInfo { token: token.clone(), deadline: abs_deadline });
                 // Acquire the raw handle held by the HandlerInfo in order to
@@ -376,8 +346,9 @@
                 // It's perfectly okay for the handle to be invalid, so although this
                 // is all unsafe, the whole system should just call the handler with an
                 // error.
-                let mut dummy = unsafe { system::acquire(info.handle()) };
-                self.handle_set.add(&dummy, signals, token.as_cookie(), wsflags!(Add::None));
+                let mut dummy = unsafe { system::acquire(info.handle) };
+                let result = self.handle_set.add(&dummy, signals, token.to_cookie());
+                assert_eq!(result, MojoResult::Okay);
                 dummy.invalidate();
                 true
             }
@@ -393,9 +364,9 @@
     pub fn deregister(&mut self, token: Token) -> bool {
         match self.handlers.remove(&token) {
             Some(_) => {
-                let _result = self.handle_set.remove(token.as_cookie());
+                let result = self.handle_set.remove(token.to_cookie());
                 // Handles are auto-removed if they are closed. Ignore this error.
-                debug_assert!(_result == MojoResult::Okay || _result == MojoResult::NotFound);
+                assert!(result == MojoResult::Okay || result == MojoResult::NotFound);
                 true
             }
             None => false,
@@ -407,7 +378,7 @@
     /// Returns a token if the delay is valid, otherwise returns None.
     pub fn post_task<F>(&mut self, task: F, delay: system::MojoTimeTicks) -> Result<(), ()>
     where
-        F: FnMut(&mut RunLoop) + 't,
+        F: FnOnce(&mut RunLoop) + 't,
     {
         let now = core::get_time_ticks_now();
         if delay > i64::MAX - now {
@@ -446,69 +417,54 @@
         }
     }
 
-    /// Gets a handler by token to be manipulated in a consistent environment.
-    ///
-    /// This method provides a method of accessing a handler in order to manipulate
-    /// it in a manner that avoids a borrow cycle, that is, it take()s the handler
-    /// out of the HashMap, and returns it when manipulation has completed.
-    fn get_handler_with<F>(&mut self, token: &Token, invoker: F)
-    where
-        F: FnOnce(&mut Self, &mut Box<dyn Handler + 'h>, Token, system::MojoTimeTicks),
-    {
-        // Logic for pulling out the handler as well as its current deadline.
-        //
-        // Unfortunately, pulling out the handler value here and "onto the stack"
-        // (it probably won't actually end up on the stack thanks to optimizations)
-        // is necessary since otherwise the borrow checker complains that we pass
-        // a mutable reference to the RunLoop and the handler (as &mut self) to
-        // the callbacks at the same time. This is understandably unsafe since
-        // modifying the hashmap with register and deregister can invalidate the
-        // reference to self in the callback. In the C++ bindings and in other Rust
-        // event loops this is exactly what happens, but I avoided this. The downside
-        // is that we can no longer nest event loop run() calls. Once we put a handler
-        // onto the stack here, we can no longer call its callback in a nested manner
-        // from the RunLoop. I could just enable nesting with this one restriction, that
-        // the handler calling run() will always be ignored, but this is unintuitive.
-        let (mut handler, deadline) = match self.handlers.get_mut(&token) {
-            Some(ref_info) => (
-                match ref_info.take() {
-                    Some(handler) => handler,
-                    None => return,
-                },
-                ref_info.deadline(),
-            ),
-            None => return,
-        };
-        // Call the closure that will invoke the callbacks.
-        invoker(self, &mut handler, token.clone(), deadline);
-        // Restore the handler to its location in the HashMap
-        if let Some(ref_info) = self.handlers.get_mut(&token) {
-            ref_info.give(handler);
-        }
-    }
-
     /// For all the results we received, we notify the respective handle
     /// owners of the results by calling their given callbacks.
     ///
     /// We do NOT dequeue notified handles.
-    fn notify_of_results(&mut self, results: &Vec<system::WaitSetResult>) {
-        debug_assert!(!self.handlers.is_empty());
-        for wsr in results.iter() {
-            let token = Token(wsr.cookie());
-            self.get_handler_with(&token, move |runloop, boxed_handler, token, _dl| {
-                let handler = boxed_handler.as_mut();
-                match wsr.result() {
-                    MojoResult::Okay => handler.on_ready(runloop, token),
-                    MojoResult::Cancelled => {
-                        handler.on_error(runloop, token, WaitError::HandleClosed)
+    fn notify_of_results(&mut self, results: &[system::WaitSetResult]) {
+        assert!(!self.handlers.is_empty());
+        for wait_set_result in results {
+            let token = Token(wait_set_result.cookie.0);
+            let handler_info: &mut HandlerInfo = match self.handlers.get_mut(&token) {
+                Some(h) => h,
+                None => continue,
+            };
+
+            // The handler is mutable, and we need to pass `&mut self` to it as
+            // an argument. To avoid a mutable reference cycle we take the
+            // handler out then restore it afterward.
+            let mut handler: Option<Box<dyn Handler>> = handler_info.handler.take();
+            if let Some(ref mut handler) = handler {
+                match wait_set_result.wait_result {
+                    MojoResult::Okay => {
+                        handler.on_ready(self, token);
                     }
-                    MojoResult::Busy => handler.on_error(runloop, token, WaitError::HandleBusy),
+                    MojoResult::Cancelled => {
+                        handler.on_error(self, token, WaitError::HandleClosed);
+                    }
                     MojoResult::FailedPrecondition => {
-                        handler.on_error(runloop, token, WaitError::Unsatisfiable)
+                        handler.on_error(self, token, WaitError::Unsatisfiable);
                     }
                     other => panic!("Unexpected result received after waiting: {}", other),
                 }
-            });
+            }
+
+            // Replace the handler function, or remove the `HandlerInfo` entry
+            // entirely if the handle closed.
+            if wait_set_result.wait_result != MojoResult::Cancelled {
+                // Restore the handler. Note that the handler may have removed
+                // itself, in which case the `handler_info` entry no longer
+                // exists. The borrow checker rightfully complains if we use the
+                // old `handler_info` here: the mutable borrow of `self` for the
+                // handler call consumes the original borrow of `handler_info`.
+                // We re-fetch the entry to restore the handler Fn.
+                if let Some(handler_info) = self.handlers.get_mut(&token) {
+                    handler_info.handler = handler;
+                }
+            } else {
+                self.handlers.remove(&token);
+            }
+
             // In order to quit as soon as possible, we should check to quit after every
             // potential handler call, as any of them could have signaled to quit.
             if self.should_quit {
@@ -522,22 +478,36 @@
     ///
     /// We do NOT dequeue notified handles.
     fn notify_of_expired(&mut self, expired_deadline: system::MojoTimeTicks) {
-        debug_assert!(!self.handlers.is_empty());
+        assert!(!self.handlers.is_empty());
         let mut top = match self.deadlines.peek() {
             Some(info) => info.clone(),
             None => panic!("Should not be in notify_of_expired without at least one deadline!"),
         };
         while expired_deadline >= top.deadline() {
             let next_deadline = top.deadline();
-            self.get_handler_with(
-                top.token(),
-                move |runloop, boxed_handler, token, expected_dl| {
-                    let handler = boxed_handler.as_mut();
-                    if next_deadline == expected_dl {
-                        handler.on_timeout(runloop, token);
+
+            // The handler is mutable, and we need to pass `&mut self` to it as
+            // an argument. To avoid a mutable reference cycle we take the
+            // handler out then restore it afterward.
+            if let Some(handler_info) = self.handlers.get_mut(top.token()) {
+                let mut maybe_handler = handler_info.handler.take();
+                if next_deadline == handler_info.deadline {
+                    if let Some(ref mut handler) = maybe_handler {
+                        handler.on_timeout(self, *top.token());
                     }
-                },
-            );
+                }
+
+                // Restore the handler. Note that the handler may have removed
+                // itself, in which case the `handler_info` entry no longer
+                // exists. The borrow checker rightfully complains if we use the
+                // old `handler_info` here: the mutable borrow of `self` for the
+                // handler call consumes the original borrow of `handler_info`.
+                // We re-fetch the entry to restore the handler Fn.
+                if let Some(handler_info) = self.handlers.get_mut(top.token()) {
+                    handler_info.handler = maybe_handler;
+                }
+            }
+
             // In order to quit as soon as possible, we should check to quit after every
             // potential handler call, as any of them could have signaled to quit.
             if self.should_quit {
@@ -585,7 +555,7 @@
     /// soon as any one handle has its signals satisfied, fails to ever have its
     /// signals satisfied, or reaches its deadline.
     fn wait(&mut self, results_buffer: &mut Vec<system::WaitSetResult>) {
-        debug_assert!(!self.handlers.is_empty());
+        assert!(!(self.handlers.is_empty() && self.tasks.is_empty()));
         self.execute_ready_tasks();
         // If after executing a task we quit or there are no handles,
         // we have no reason to continue.
@@ -612,10 +582,22 @@
                     results_buffer.reserve(capacity);
                 }
             }
-            result => {
-                assert_eq!(result, MojoResult::DeadlineExceeded);
+            MojoResult::DeadlineExceeded => {
                 self.notify_of_expired(deadline);
             }
+            MojoResult::NotFound => {
+                // The WaitSet has no handles. If we have anything in
+                // `handlers`, we're in an inconsistent state and there's a bug
+                // in our implementation: they should always be in the WaitSet.
+                assert!(
+                    self.handlers.is_empty(),
+                    "handle in `handlers` not present in `handle_set`. Maybe it was closed?"
+                );
+
+                // If we truly have nothing to wait on, return.
+                ()
+            }
+            e => panic!("unexpected Mojo error {:?}", e),
         }
     }
 
@@ -629,8 +611,9 @@
         self.should_quit = false;
         let mut buffer: Vec<system::WaitSetResult> =
             Vec::with_capacity(INITIAL_WAIT_SET_NUM_RESULTS);
-        // Loop while we haven't been signaled to quit, and there's something to wait on.
-        while !self.should_quit && !self.handlers.is_empty() {
+        // Loop while we haven't been signaled to quit, and there's something to
+        // run or wait on.
+        while !self.should_quit && !(self.handlers.is_empty() && self.tasks.is_empty()) {
             self.wait(&mut buffer)
         }
         self.running = false;
diff --git a/mojo/public/rust/lib.rs b/mojo/public/rust/lib.rs
index 21cd18e..74303cf9 100644
--- a/mojo/public/rust/lib.rs
+++ b/mojo/public/rust/lib.rs
@@ -96,26 +96,6 @@
         }}
     }
 
-    /// This macro assists in generating flags for
-    /// functions and methods found in mojo::system::wait_set.
-    ///
-    /// See mojo::system::wait_set for the available flags
-    /// that may be passed.
-    ///
-    /// # Examples
-    ///
-    /// # wsflags!(Create::None);
-    /// # wsflags!(Add::None);
-    #[macro_export]
-    macro_rules! wsflags {
-        ( $( $flag:path ),* ) => {{
-            use $crate::system::wait_set::*;
-            $(
-                ($flag as u32)
-            )|*
-        }}
-    }
-
     /// This macro assists in generating MojoSignals to be
     /// used in wait() and wait_many(), part of mojo::system::core.
     ///
diff --git a/mojo/public/rust/support.cc b/mojo/public/rust/support.cc
deleted file mode 100644
index 2ff047c..0000000
--- a/mojo/public/rust/support.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2021 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.
-
-// The old Mojo SDK had a different API than Chromium's Mojo right now. The Rust
-// bindings refer to several functions that no longer exist in the core C API.
-// However, most of the functionality exists, albeit in a different form, in the
-// C++ bindings. This file re-implements the old C API functions in terms of the
-// new C++ helpers to ease the transition. In the long term, the Rust bindings
-// must be updated properly for the changes to Mojo.
-
-#include "mojo/public/rust/support.h"
-
-#include <stdint.h>
-#include <limits>
-#include <memory>
-#include <unordered_map>
-#include <vector>
-
-#include "mojo/public/c/system/types.h"
-#include "mojo/public/cpp/system/handle.h"
-#include "mojo/public/cpp/system/wait.h"
-#include "mojo/public/cpp/system/wait_set.h"
-
-namespace {
-
-// Adapter used to reimplement the C WaitSet in terms of the C++ mojo::WaitSet.
-struct WaitSetAdapter {
-  mojo::WaitSet wait_set;
-  std::unordered_map<MojoHandle, std::uint64_t> handle_to_cookie;
-  std::unordered_map<std::uint64_t, MojoHandle> cookie_to_handle;
-};
-
-}  // namespace
-
-extern "C" {
-
-MojoResult MojoCreateWaitSet(const MojoCreateWaitSetOptions*,
-                             MojoWaitSetHandle* handle) {
-  auto adapter = std::make_unique<WaitSetAdapter>();
-  *handle = reinterpret_cast<std::size_t>(adapter.release());
-  return MOJO_RESULT_OK;
-}
-
-MojoResult MojoWaitSetAdd(MojoWaitSetHandle wait_set_handle,
-                          MojoHandle handle,
-                          MojoHandleSignals signals,
-                          uint64_t cookie,
-                          const MojoWaitSetAddOptions*) {
-  auto* adapter = reinterpret_cast<WaitSetAdapter*>(wait_set_handle);
-  MojoResult result =
-      adapter->wait_set.AddHandle(mojo::Handle(handle), signals);
-  if (result != MOJO_RESULT_OK)
-    return result;
-  adapter->handle_to_cookie[handle] = cookie;
-  adapter->cookie_to_handle[cookie] = handle;
-  return MOJO_RESULT_OK;
-}
-
-MojoResult MojoWaitSetRemove(MojoWaitSetHandle wait_set_handle,
-                             uint64_t cookie) {
-  auto* adapter = reinterpret_cast<WaitSetAdapter*>(wait_set_handle);
-  auto handle_it = adapter->cookie_to_handle.find(cookie);
-  if (handle_it == adapter->cookie_to_handle.end())
-    return MOJO_RESULT_NOT_FOUND;
-
-  MojoResult result =
-      adapter->wait_set.RemoveHandle(mojo::Handle(handle_it->second));
-  if (result != MOJO_RESULT_OK)
-    return result;
-
-  adapter->handle_to_cookie.erase(handle_it->second);
-  adapter->cookie_to_handle.erase(handle_it);
-  return MOJO_RESULT_OK;
-}
-
-MojoResult MojoWaitSetWait(MojoWaitSetHandle wait_set_handle,
-                           uint32_t* num_results,
-                           MojoWaitSetResult* results) {
-  size_t max_results = *num_results;
-  std::vector<mojo::Handle> ready_handles(max_results);
-  std::vector<MojoResult> ready_results(max_results);
-  std::vector<MojoHandleSignalsState> signals_states(max_results);
-
-  size_t num_ready_handles = max_results;
-
-  auto* adapter = reinterpret_cast<WaitSetAdapter*>(wait_set_handle);
-  adapter->wait_set.Wait(nullptr, &num_ready_handles, ready_handles.data(),
-                         ready_results.data(), signals_states.data());
-
-  for (std::size_t i = 0; i < num_ready_handles; ++i) {
-    results[i].cookie = adapter->handle_to_cookie.at(ready_handles[i].value());
-    results[i].wait_result = ready_results[i];
-    results[i].reserved = 0;
-    results[i].signals_state = signals_states[i];
-  }
-
-  *num_results = num_ready_handles;
-
-  return MOJO_RESULT_OK;
-}
-
-}  // extern "C"
diff --git a/mojo/public/rust/support.h b/mojo/public/rust/support.h
deleted file mode 100644
index 94e8bf0..0000000
--- a/mojo/public/rust/support.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2022 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.
-
-// The old Mojo SDK had a different API than Chromium's Mojo right now. The Rust
-// bindings refer to several functions that no longer exist in the core C API.
-// However, most of the functionality exists, albeit in a different form, in the
-// C++ bindings. This file re-implements the old C API functions in terms of the
-// new C++ helpers to ease the transition. In the long term, the Rust bindings
-// must be updated properly for the changes to Mojo.
-
-#ifndef MOJO_PUBLIC_RUST_SUPPORT_H_
-#define MOJO_PUBLIC_RUST_SUPPORT_H_
-
-#include <stdint.h>
-
-#include "mojo/public/c/system/macros.h"
-#include "mojo/public/c/system/types.h"
-
-typedef uint32_t MojoCreateWaitSetFlags;
-typedef uint32_t MojoWaitSetAddFlags;
-typedef uintptr_t MojoWaitSetHandle;
-
-struct MOJO_ALIGNAS(8) MojoCreateWaitSetOptions {
-  uint32_t struct_size;
-  MojoCreateWaitSetFlags flags;
-};
-
-struct MOJO_ALIGNAS(8) MojoWaitSetAddOptions {
-  uint32_t struct_size;
-  MojoWaitSetAddFlags flags;
-};
-
-struct MOJO_ALIGNAS(8) MojoWaitSetResult {
-  uint64_t cookie;
-  MojoResult wait_result;
-  uint32_t reserved;
-  struct MojoHandleSignalsState signals_state;
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Similar to the above, wait sets could wait for one of several handles to be
-// signalled. Unlike WaitMany they maintained a set of handles in their state.
-// They are long gone as first-class objects of the Mojo API. Previously they
-// were owned through MojoHandle just like pipes and buffers. Here this is
-// changed to support casting between wait set handles and pointers.
-//
-// Reimplementing these was a bit more complex since the new C++ API is similar
-// but different in many respects. For example, the old API referred to handles
-// in the set by 64-bit integer handles. The C++ WaitSet does not, so we need to
-// maintain maps in both directions.
-
-MojoResult MojoCreateWaitSet(const struct MojoCreateWaitSetOptions*,
-                             MojoWaitSetHandle* wait_set_handle);
-
-MojoResult MojoWaitSetAdd(MojoWaitSetHandle wait_set_handle,
-                          MojoHandle handle,
-                          MojoHandleSignals signals,
-                          uint64_t cookie,
-                          const struct MojoWaitSetAddOptions*);
-
-MojoResult MojoWaitSetRemove(MojoWaitSetHandle wait_set_handle,
-                             uint64_t cookie);
-
-MojoResult MojoWaitSetWait(MojoWaitSetHandle wait_set_handle,
-                           uint32_t* num_results,
-                           struct MojoWaitSetResult* results);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // MOJO_PUBLIC_RUST_SUPPORT_H_
diff --git a/mojo/public/rust/system/ffi.rs b/mojo/public/rust/system/ffi.rs
index 8e4d0166..a0a2076 100644
--- a/mojo/public/rust/system/ffi.rs
+++ b/mojo/public/rust/system/ffi.rs
@@ -39,7 +39,6 @@
     pub use raw_ffi::MojoCreateMessagePipeFlags;
     pub use raw_ffi::MojoCreateSharedBufferFlags;
     pub use raw_ffi::MojoCreateTrapFlags;
-    pub use raw_ffi::MojoCreateWaitSetFlags;
     pub use raw_ffi::MojoDuplicateBufferHandleFlags;
     pub use raw_ffi::MojoEndReadDataFlags;
     pub use raw_ffi::MojoEndWriteDataFlags;
@@ -57,8 +56,6 @@
     pub use raw_ffi::MojoTrapEventFlags;
     pub use raw_ffi::MojoTrapEventHandler;
     pub use raw_ffi::MojoTriggerCondition;
-    pub use raw_ffi::MojoWaitSetAddFlags;
-    pub use raw_ffi::MojoWaitSetHandle;
     pub use raw_ffi::MojoWriteDataFlags;
     pub use raw_ffi::MojoWriteMessageFlags;
     pub type MojoResultCode = raw_ffi::MojoResult;
@@ -154,8 +151,6 @@
 declare_mojo_options!(MojoAddTriggerOptions, flags: MojoAddTriggerFlags);
 declare_mojo_options!(MojoRemoveTriggerOptions, flags: MojoRemoveTriggerFlags);
 declare_mojo_options!(MojoArmTrapOptions, flags: MojoArmTrapFlags);
-declare_mojo_options!(MojoCreateWaitSetOptions, flags: MojoCreateWaitSetFlags);
-declare_mojo_options!(MojoWaitSetAddOptions, flags: MojoWaitSetAddFlags);
 
 pub use raw_ffi::MojoAddTrigger;
 pub use raw_ffi::MojoAppendMessageData;
@@ -168,7 +163,6 @@
 pub use raw_ffi::MojoCreateMessagePipe;
 pub use raw_ffi::MojoCreateSharedBuffer;
 pub use raw_ffi::MojoCreateTrap;
-pub use raw_ffi::MojoCreateWaitSet;
 pub use raw_ffi::MojoDestroyMessage;
 pub use raw_ffi::MojoDuplicateBufferHandle;
 pub use raw_ffi::MojoEndReadData;
@@ -182,8 +176,5 @@
 pub use raw_ffi::MojoReadMessage;
 pub use raw_ffi::MojoRemoveTrigger;
 pub use raw_ffi::MojoUnmapBuffer;
-pub use raw_ffi::MojoWaitSetAdd;
-pub use raw_ffi::MojoWaitSetRemove;
-pub use raw_ffi::MojoWaitSetWait;
 pub use raw_ffi::MojoWriteData;
 pub use raw_ffi::MojoWriteMessage;
diff --git a/mojo/public/rust/system/mojo_types.rs b/mojo/public/rust/system/mojo_types.rs
index 5fd009c1..12a9a3b2 100644
--- a/mojo/public/rust/system/mojo_types.rs
+++ b/mojo/public/rust/system/mojo_types.rs
@@ -14,7 +14,6 @@
 //! a whole because it is intended to be used that way. It contains
 //! all of the basic types needed by all system-level Mojo bindings.
 
-use crate::system::ffi::raw_ffi;
 use crate::system::ffi::types::{self, *};
 use std::fmt;
 use std::u64;
@@ -22,7 +21,6 @@
 pub use types::MojoHandle;
 pub use types::MojoMessageHandle;
 pub use types::MojoTimeTicks;
-pub use types::MojoWaitSetHandle;
 
 /// Represents a deadline for wait() calls.
 pub type MojoDeadline = u64;
@@ -39,6 +37,8 @@
 pub type GetMessageFlags = u32;
 pub type AddFlags = u32;
 
+pub use crate::system::wait_set::WaitSetResult;
+
 /// MojoResult represents anything that can happen
 /// as a result of performing some operation in Mojo.
 ///
@@ -235,33 +235,3 @@
     // ???
     QuotaExceeded = 1 << 5,
 }
-
-/// The result struct used by the wait_set module
-/// to return wait result information. Should remain
-/// semantically identical to the implementation of
-/// this struct in wait_set.h in the C bindings.
-///
-/// This struct should never be constructed by anything
-/// but the Mojo system in MojoWaitSetWait.
-#[repr(transparent)]
-pub struct WaitSetResult(raw_ffi::MojoWaitSetResult);
-
-impl WaitSetResult {
-    /// Getter for the cookie corresponding to the handle
-    /// which just finished waiting.
-    pub fn cookie(&self) -> u64 {
-        self.0.cookie
-    }
-
-    /// Getter for the wait result.
-    pub fn result(&self) -> MojoResult {
-        MojoResult::from_code(self.0.wait_result)
-    }
-
-    /// Getter for the signals state that comes with any
-    /// wait result.
-    pub fn state<'a>(&'a self) -> &'a SignalsState {
-        // SAFETY: `SignalsState` is a repr(transparent) wrapper for `MojoHandleSignalsState`.
-        unsafe { &*(&self.0.signals_state as *const MojoHandleSignalsState as *const SignalsState) }
-    }
-}
diff --git a/mojo/public/rust/system/wait_set.rs b/mojo/public/rust/system/wait_set.rs
index 43de174..86fed3e 100644
--- a/mojo/public/rust/system/wait_set.rs
+++ b/mojo/public/rust/system/wait_set.rs
@@ -2,108 +2,231 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-use std::ptr;
+use std::collections::{hash_map, HashMap};
+use std::sync::{Arc, Condvar, Mutex};
 
-use crate::system::ffi::{self, raw_ffi};
 use crate::system::handle::Handle;
 use crate::system::mojo_types;
-use crate::system::mojo_types::MojoResult;
+use crate::system::mojo_types::{MojoResult, SignalsState};
+use crate::system::trap::{Trap, TrapEvent, TriggerCondition, TriggerId};
 
-#[repr(u32)]
-/// Create flags for wait sets
-pub enum Create {
-    None = 0,
+/// Identifies a handle added to `WaitSet`.
+#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
+pub struct WaitSetCookie(pub u64);
+
+/// Represents a single ready handle.
+#[derive(Clone, Copy, Debug)]
+pub struct WaitSetResult {
+    /// Cookie corresponding to a handle that is ready.
+    pub cookie: WaitSetCookie,
+    /// Wait result, like from `Trap`:
+    /// * MojoResult::Okay: a signal was satisfied.
+    /// * MojoResult::FailedPrecondition: a signal can never be satisfied again.
+    /// * MojoResult::Cancelled: the handle was closed.
+    pub wait_result: MojoResult,
+    /// The latest known signals on the ready handle. if `wait_result` is
+    /// `MojoResult::Okay` then it is guaranteed to contain at least one signal
+    /// specified in `WaitSet::add`.
+    pub signals_state: SignalsState,
 }
 
-#[repr(u32)]
-/// Add flags for wait sets
-pub enum Add {
-    None = 0,
-}
-
-/// This struct represents a handle to a wait set in the Mojo system.
+/// Provides synchronous waiting on a dynamic set of handles.
 ///
-/// The primary purpose of a wait set is to provide an abstraction for
-/// efficiently waiting asynchronously (and cooperatively) on a set of
-/// handles which are registered with it.
+/// Similar to `Trap`, a set of handles paired with signals to watch for can be
+/// dynamically added and removed. Unlike `Trap`, which gives asynchronous
+/// callbacks when an event happens, `WaitSet` provides a `wait_on_set` method
+/// which synchronously returns events, waiting if necessary.
 pub struct WaitSet {
-    handle: mojo_types::MojoWaitSetHandle,
+    // The Mojo primitive that gives us notifications on handles. We register
+    // handles paired with signals we're interested in and a context object.
+    trap: Trap<Context, fn(event: &TrapEvent, context: &Context)>,
+    // `trap` vends `TriggerId` to identify one (handle, trigger condition) pair
+    // registered with it. We give a "cookie" to our client for each handle, so
+    // we need to map this client-facing cookie to the trap's `TriggerId`.
+    cookies: HashMap<WaitSetCookie, TriggerId>,
+    // Contains state necessary to store received events and wait synchronously.
+    // Ownership is shared with the `Context` objects we give to `trap`.
+    state: Arc<State>,
+}
+
+struct State {
+    // Maintain the most recent result for each signalled handle. Only contains
+    // results of handles for which we've received a callback.
+    results: Mutex<HashMap<WaitSetCookie, WaitSetResult>>,
+    // Enables putting the thread to sleep while waiting for an event.
+    cond: Condvar,
+}
+
+// Passed to the `Trap`. These exist 1:1 with handles added to the set.
+struct Context {
+    state: Arc<State>,
+    cookie: WaitSetCookie,
 }
 
 impl WaitSet {
-    /// Creates a new WaitSet object in the Mojo system, and returns a wrapper
-    /// for it. If creation fails, returns the result code.
-    pub fn new(flags: mojo_types::CreateFlags) -> Result<WaitSet, MojoResult> {
-        let mut handle = 0;
-        let opts = ffi::MojoCreateWaitSetOptions::new(flags);
-        let raw_opts = opts.inner_ptr();
-        let r = MojoResult::from_code(unsafe {
-            ffi::MojoCreateWaitSet(raw_opts, &mut handle as *mut _)
-        });
-        if r != MojoResult::Okay { Err(r) } else { Ok(WaitSet { handle: handle }) }
+    /// Create a new WaitSet or returns an error code if the `Trap` could not be
+    /// created.
+    pub fn new() -> Result<WaitSet, MojoResult> {
+        Ok(WaitSet {
+            trap: Trap::new(Self::event_handler as _)?,
+            cookies: HashMap::new(),
+            state: Arc::new(State { results: Mutex::new(HashMap::new()), cond: Condvar::new() }),
+        })
     }
 
-    /// Adds a handle to the underlying wait set.
+    /// Add a handle to set, watching for `signals`.
     ///
-    /// The handle that is added may go invalid, at which point the result
-    /// returned from wait_on_set for this handle will be `Cancelled'.
+    /// If the handle is closed it is implicitly removed from the set. A
+    /// `WaitSetResult` of type `MojoResult::Cancelled` will be returned on the
+    /// next call to `wait_on_set`.
     ///
-    /// One can pass in a unique cookie value which is used to identify the
-    /// handle in the wait result. Currently there are no supported flags,
-    /// but the argument is kept for future usage.
+    /// `cookie` must be a unique (but arbitrary) value to identify the handle.
+    /// `WaitSetResult`s returned by `wait_on_set` contain the handle's cookie.
     pub fn add(
         &mut self,
         handle: &dyn Handle,
         signals: mojo_types::HandleSignals,
-        cookie: u64,
-        flags: mojo_types::AddFlags,
+        cookie: WaitSetCookie,
     ) -> MojoResult {
-        let opts = ffi::MojoWaitSetAddOptions::new(flags);
-        let raw_opts = opts.inner_ptr();
-        MojoResult::from_code(unsafe {
-            ffi::MojoWaitSetAdd(
-                self.handle,
-                handle.get_native_handle(),
-                signals.get_bits(),
-                cookie,
-                raw_opts,
-            )
-        })
+        let cookie_entry = match self.cookies.entry(cookie) {
+            hash_map::Entry::Occupied(_) => return MojoResult::AlreadyExists,
+            hash_map::Entry::Vacant(e) => e,
+        };
+
+        let context = Context { state: self.state.clone(), cookie };
+
+        match self.trap.add_trigger(
+            handle.get_native_handle(),
+            signals,
+            TriggerCondition::SignalsSatisfied,
+            context,
+        ) {
+            Ok(token) => {
+                // Insert the cookie *after* adding the trigger. Only `remove`
+                // and `wait_on_set` rely on the entry, not the handler function
+                // which doesn't have access to `self` anyway. We take `&mut
+                // self` so we are mutually exclusive with `wait_on_set` and
+                // `remove`. Hence, it is OK to do this.
+                cookie_entry.insert(token);
+                MojoResult::Okay
+            }
+            Err(e) => e,
+        }
     }
 
-    /// Removes a handle from the underlying wait set by cookie value.
-    pub fn remove(&mut self, cookie: u64) -> MojoResult {
-        MojoResult::from_code(unsafe { ffi::MojoWaitSetRemove(self.handle, cookie) })
+    /// Remove the handle identified by `cookie` from the set. No results for
+    /// this handle will ever be returned by subsequent calls to `wait_on_set`.
+    pub fn remove(&mut self, cookie: WaitSetCookie) -> MojoResult {
+        let token = match self.cookies.remove(&cookie) {
+            Some(token) => token,
+            None => return MojoResult::NotFound,
+        };
+
+        match self.trap.remove_trigger(token) {
+            // Gracefully handle if the trigger auto-deregistered (e.g. the
+            // handle was closed).
+            MojoResult::NotFound => MojoResult::Okay,
+            // Removing a trigger will fire an event, even if the trap is not
+            // armed. We filter in `wait_on_set` based on `self.cookies` to
+            // avoid returning events for `cookie`.
+            MojoResult::Okay => MojoResult::Okay,
+            e => unreachable!("unexpected Mojo error {:?}", e),
+        }
     }
 
-    /// Waits on this wait set.
+    /// Wait on this wait set.
     ///
     /// The conditions for the wait to end include:
     /// * A handle has its requested signals satisfied.
-    /// * A handle is determined to never be able to have its requested
-    ///   signals satisfied.
-    /// * The deadline expires.
-    /// * This wait set handle becomes invalid (Fatal error in this bindings).
+    /// * A handle is determined to never be able to have its requested signals
+    ///   satisfied.
+    /// * A handle is closed.
     ///
-    /// On a successful wait, we return the maximum number of results that could
-    /// possibly be returned (similar to the total number of registered handles).
-    /// Additionally, populates the output vector with the results of each handle
-    /// that completed waiting.
-    ///
-    /// On a failed wait, we return the result code.
-    pub fn wait_on_set(&self, output: &mut Vec<mojo_types::WaitSetResult>) -> MojoResult {
-        assert!((output.capacity() as u64) <= ((1 as u64) << 32));
-        let mut num_results = output.capacity() as u32;
-        let mut output_ptr = output.as_mut_ptr() as *mut raw_ffi::MojoWaitSetResult;
-        if num_results == 0 {
-            output_ptr = ptr::null_mut();
+    /// `output` is cleared, then populated with results for each ready handle
+    /// on success. `MojoResult` is returned indicating success or failure
+    /// (which can only happen if the `Trap` fails to arm for unknown reasons).
+    pub fn wait_on_set(&self, output: &mut Vec<WaitSetResult>) -> MojoResult {
+        output.clear();
+
+        {
+            // Take the lock for the results. Unwrap because we cannot recover
+            // from a poisoned mutex.
+            let mut results_guard = self.state.results.lock().unwrap();
+            let results: &mut HashMap<WaitSetCookie, WaitSetResult> = &mut results_guard;
+
+            // If there were already results (that weren't filtered out) we just
+            // return them.
+            if !results.is_empty() {
+                self.process_results(results, output);
+                if !output.is_empty() {
+                    return MojoResult::Okay;
+                }
+            }
         }
-        let r = MojoResult::from_code(unsafe {
-            ffi::MojoWaitSetWait(self.handle, &mut num_results as *mut u32, output_ptr)
-        });
-        unsafe {
-            output.set_len(num_results as usize);
+
+        // Now we've unlocked the mutex and can arm the trap. We must loop: we
+        // filter results for handles explicitly removed. If we are left with no
+        // events, we still want to wait.
+        //
+        // NOTE: there's an edge case where we can receive a Cancelled event in
+        // between our check above and arming. In this case we may leave the
+        // trap armed after returning from this function. This is not ideal but
+        // it is safe since our `event_handler` only pushes a new value to our
+        // internal results list. The `Trap` type also safely handles if its
+        // drop() is never called. There is no way to work around this edge case
+        // with the Mojo trap API.
+
+        assert!(output.is_empty());
+        while output.is_empty() {
+            match self.trap.arm() {
+                MojoResult::Okay | MojoResult::FailedPrecondition => (),
+                MojoResult::NotFound => return MojoResult::NotFound,
+                e => unreachable!("unexpected Mojo error {:?}", e),
+            };
+
+            let mut results_guard = self
+                .state
+                .cond
+                .wait_while(self.state.results.lock().unwrap(), |r| r.is_empty())
+                .unwrap();
+            let results: &mut HashMap<WaitSetCookie, WaitSetResult> = &mut results_guard;
+            self.process_results(results, output);
         }
-        r
+
+        MojoResult::Okay
+    }
+
+    // Helper function to report the latest `WaitSetResult` received by the trap
+    // handler for each handle entry. Filters out events corresponding to
+    // `remove` calls, which `Trap` sends for each `remove_trigger` call.
+    fn process_results(
+        &self,
+        results: &mut HashMap<WaitSetCookie, WaitSetResult>,
+        output: &mut Vec<WaitSetResult>,
+    ) {
+        // Report results, filtering those with no `self.cookies` entry which
+        // means the handle was removed.
+        output.extend(results.values().filter(|result| self.cookies.contains_key(&result.cookie)));
+        results.clear();
+    }
+
+    fn event_handler(event: &TrapEvent, context: &Context) {
+        let mut results_guard = context.state.results.lock().unwrap();
+        let results: &mut HashMap<WaitSetCookie, WaitSetResult> = &mut results_guard;
+        // Simply transcribe and insert the event. Removal events are processed
+        // on the waiting task in a `wait_on_set` call. Note that the owning
+        // `WaitSet` may not even contain the cookie: a handle may be closed
+        // between `Trap::add_trigger` and inserting into `WaitSet::cookies`.
+        // That is OK since only `wait_on_set` relies on the entry. `add` and
+        // `wait_on_set` are mutually exclusive because `add` takes `&mut self`
+        results.insert(
+            context.cookie,
+            WaitSetResult {
+                cookie: context.cookie,
+                wait_result: event.result(),
+                signals_state: event.signals_state(),
+            },
+        );
+        context.state.cond.notify_all();
     }
 }
diff --git a/mojo/public/rust/system/wrapper.h b/mojo/public/rust/system/wrapper.h
index b718b0b..3e0aaec6 100644
--- a/mojo/public/rust/system/wrapper.h
+++ b/mojo/public/rust/system/wrapper.h
@@ -6,6 +6,5 @@
 #define MOJO_PUBLIC_RUST_SYSTEM_WRAPPER_H_
 
 #include "mojo/public/c/system/core.h"
-#include "mojo/public/rust/support.h"
 
 #endif  // MOJO_PUBLIC_RUST_SYSTEM_WRAPPER_H_
diff --git a/mojo/public/rust/tests/integration.rs b/mojo/public/rust/tests/integration.rs
index 788cca5..7ac55d1 100644
--- a/mojo/public/rust/tests/integration.rs
+++ b/mojo/public/rust/tests/integration.rs
@@ -23,6 +23,7 @@
         // Client and server handles
         let client = IntegrationTestInterfaceClient::new(endpt0);
         let server = IntegrationTestInterfaceServer::with_version(endpt1, 0);
+
         // Client thread
         let handle = thread::spawn(move || {
             // Send request
diff --git a/mojo/public/rust/tests/run_loop.rs b/mojo/public/rust/tests/run_loop.rs
index 5c46175..f5994e0 100644
--- a/mojo/public/rust/tests/run_loop.rs
+++ b/mojo/public/rust/tests/run_loop.rs
@@ -44,7 +44,9 @@
     }
 }
 
-struct HandlerExpectError {}
+struct HandlerExpectError {
+    was_called: Rc<Cell<bool>>,
+}
 
 impl Handler for HandlerExpectError {
     fn on_ready(&mut self, _runloop: &mut RunLoop, _token: Token) {
@@ -56,6 +58,7 @@
     fn on_error(&mut self, runloop: &mut RunLoop, token: Token, error: WaitError) {
         assert_eq!(error, WaitError::Unsatisfiable);
         runloop.deregister(token);
+        self.was_called.set(true);
     }
 }
 
@@ -68,8 +71,8 @@
     fn on_timeout(&mut self, _runloop: &mut RunLoop, _token: Token) {
         panic!("Timed-out when expected error");
     }
-    fn on_error(&mut self, _runloop: &mut RunLoop, _token: Token, _error: WaitError) {
-        panic!("Error when expected ready");
+    fn on_error(&mut self, _runloop: &mut RunLoop, _token: Token, error: WaitError) {
+        assert_eq!(error, WaitError::HandleClosed);
     }
 }
 
@@ -214,7 +217,6 @@
         let _ = runloop.post_task(
             move |runloop| {
                 let r2 = r.clone();
-                let tk = token.clone();
                 if (*r).get() < 10 {
                     let _ = runloop.post_task(
                         move |_runloop| {
@@ -227,7 +229,7 @@
                     if quit {
                         runloop.quit();
                     } else {
-                        runloop.deregister(tk);
+                        runloop.deregister(token);
                     }
                 }
             },
@@ -237,8 +239,8 @@
     fn on_timeout(&mut self, _runloop: &mut RunLoop, _token: Token) {
         panic!("Timed-out when expected error");
     }
-    fn on_error(&mut self, _runloop: &mut RunLoop, _token: Token, _error: WaitError) {
-        panic!("Error when expected ready");
+    fn on_error(&mut self, _runloop: &mut RunLoop, _token: Token, error: WaitError) {
+        assert_eq!(error, WaitError::HandleClosed);
     }
 }
 
@@ -258,10 +260,10 @@
 
     // Verifies that generated tokens are unique.
     fn tokens() {
-        let (_endpt0, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
         let mut vec = Vec::new();
         run_loop::with_current(|runloop| {
             for _ in 0..10 {
+                let (_endpt0, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
                 vec.push(runloop.register(&endpt1, signals!(Signals::None), 0, HandlerExpectReady {}));
             }
             for i in 0..10 {
@@ -288,12 +290,18 @@
         // Drop the first endpoint immediately
         let (_, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
         run_loop::with_current(|runloop| {
-            let _ = runloop.register(&endpt1, signals!(Signals::Readable), 0, HandlerExpectError {});
+            let was_called = Rc::new(Cell::new(false));
+            let _ = runloop.register(&endpt1, signals!(Signals::Readable), 0,
+                HandlerExpectError {
+                    was_called: was_called.clone(),
+            });
             runloop.run();
+            assert!(was_called.get(), "on_error was not called");
         });
     }
 
-    // Verifies that the handler's "on_ready" function is called which only quits.
+    // Verifies that the handler's "on_ready" function is called which only
+    // quits.
     fn notify_ready_quit() {
         let (_endpt0, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
         run_loop::with_current(|runloop| {
@@ -345,11 +353,28 @@
     // Tests adding a simple task that adds a handler.
     fn simple_task() {
         run_loop::with_current(|runloop| {
-            let _ = runloop.post_task(|runloop| {
-                let (_, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
-                let _ = runloop.register(&endpt1, signals!(Signals::Readable), 0, HandlerExpectError {});
-            }, 0);
+            let was_called = Rc::new(Cell::new(false));
+            // The inner closure cannot take `was_called` by reference since we
+            // cannot prove it lives long enough to the borrow checker. It must
+            // be cloned first.
+            let was_called_clone = was_called.clone();
+            let (_, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
+            // If `endpt1` is moved into the task closure, it is dropped at the
+            // end of its call. This means we won't get the signal we're looking
+            // for: we'll just get a notification that the handle was closed.
+            // Make it live longer by wrapping it in an Rc.
+            let endpt1 = Rc::new(endpt1);
+            let endpt1_clone = endpt1.clone();
+            let _ = runloop.post_task(move |runloop: &mut RunLoop| {
+                let _ = runloop.register(&*endpt1_clone, signals!(Signals::Readable), 0,
+                    HandlerExpectError {
+                        was_called: was_called_clone,
+                    });
+            }, 0).unwrap();
             runloop.run();
+
+            // Ensure we got the `on_error` call for the unsatisfiable signal.
+            assert!(was_called.get(), "on_error was not called");
         });
     }
 
@@ -376,6 +401,11 @@
     }
 
     // Tests using a handler that adds a bunch of tasks.
+    //
+    // This test is disabled because it posts tasks which call `RunLoop::quit`,
+    // some of which get left on the `RunLoop` after the test ends. These
+    // interfere with later tests on the same thread.
+    #[ignore]
     fn nested_tasks_quit() {
         let (_endpt0, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
         let r = Rc::new(Cell::new(0));
@@ -385,4 +415,38 @@
             assert!((*r).get() >= 10);
         });
     }
+
+    fn close_handle() {
+        let (_endpt0, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
+        run_loop::with_current(|runloop| {
+            let _ = runloop.register(&endpt1, signals!(Signals::Writable), 0, HandlerQuit {});
+            drop(endpt1);
+            runloop.run();
+        })
+    }
+
+    // Tests that `RunLoop::run` will run posted tasks even if there's no
+    // handles to wait on.
+    fn post_tasks_without_handles() {
+        let outer_called = Rc::new(Cell::new(false));
+        let outer_called_clone = outer_called.clone();
+        let inner_called = Rc::new(Cell::new(false));
+        let inner_called_clone = inner_called.clone();
+
+        run_loop::with_current(move |runloop| {
+            // Post a task, and then post another task from within the first.
+            // This is to check RunLoop will run all the tasks it can before
+            // quitting.
+            runloop.post_task(move |runloop| {
+                outer_called_clone.set(true);
+                runloop.post_task(move |_| {
+                    inner_called_clone.set(true);
+                }, 0).unwrap();
+            }, 0).unwrap();
+            runloop.run();
+        });
+
+        assert!(outer_called.get());
+        assert!(inner_called.get());
+    }
 }
diff --git a/mojo/public/rust/tests/system.rs b/mojo/public/rust/tests/system.rs
index e837ff4..7f2b883 100644
--- a/mojo/public/rust/tests/system.rs
+++ b/mojo/public/rust/tests/system.rs
@@ -190,15 +190,16 @@
     }
 
     fn wait_set() {
-        let mut set = wait_set::WaitSet::new(wsflags!(Create::None)).unwrap();
+        let mut set = wait_set::WaitSet::new().unwrap();
         let (endpt0, endpt1) = message_pipe::create(mpflags!(Create::None)).unwrap();
+        let cookie1 = wait_set::WaitSetCookie(245);
+        let cookie2 = wait_set::WaitSetCookie(123);
         let signals = signals!(Signals::Readable);
-        let flags = wsflags!(Add::None);
-        assert_eq!(set.add(&endpt0, signals, 245, flags), mojo::MojoResult::Okay);
-        assert_eq!(set.add(&endpt0, signals, 245, flags), mojo::MojoResult::AlreadyExists);
-        assert_eq!(set.remove(245), mojo::MojoResult::Okay);
-        assert_eq!(set.remove(245), mojo::MojoResult::NotFound);
-        assert_eq!(set.add(&endpt0, signals, 123, flags), mojo::MojoResult::Okay);
+        assert_eq!(set.add(&endpt0, signals, cookie1), mojo::MojoResult::Okay);
+        assert_eq!(set.add(&endpt0, signals, cookie1), mojo::MojoResult::AlreadyExists);
+        assert_eq!(set.remove(cookie1), mojo::MojoResult::Okay);
+        assert_eq!(set.remove(cookie1), mojo::MojoResult::NotFound);
+        assert_eq!(set.add(&endpt0, signals, cookie2), mojo::MojoResult::Okay);
         thread::spawn(move || {
             let hello = "hello".to_string().into_bytes();
             let write_result = endpt1.write(&hello, Vec::new(), mpflags!(Write::None));
@@ -208,9 +209,9 @@
         let result = set.wait_on_set(&mut output);
         assert_eq!(result, mojo::MojoResult::Okay);
         assert_eq!(output.len(), 1);
-        assert_eq!(output[0].cookie(), 123);
-        assert_eq!(output[0].result(), mojo::MojoResult::Okay);
-        assert!(output[0].state().satisfied().is_readable());
+        assert_eq!(output[0].cookie, cookie2);
+        assert_eq!(output[0].wait_result, mojo::MojoResult::Okay);
+        assert!(output[0].signals_state.satisfied().is_readable());
     }
 
     fn trap_signals_on_readable_unwritable() {
diff --git a/mojo/public/rust/tests/util/mod.rs b/mojo/public/rust/tests/util/mod.rs
index fdb2fd8..12fc6f3 100644
--- a/mojo/public/rust/tests/util/mod.rs
+++ b/mojo/public/rust/tests/util/mod.rs
@@ -16,7 +16,7 @@
 /// This macro sets up tests by adding in Mojo embedder
 /// initialization.
 macro_rules! tests {
-    ( $( $( #[ $attr:meta ] )* fn $i:ident() $b:block)* ) => {
+    { $( $( #[ $attr:meta ] )* fn $i:ident() $b:block)* } => {
         $(
             #[test]
             $(
diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn
index 835c379..3b048cab 100644
--- a/pdf/BUILD.gn
+++ b/pdf/BUILD.gn
@@ -71,7 +71,6 @@
       "accessibility.cc",
       "accessibility.h",
       "chunk_stream.h",
-      "content_restriction.h",
       "document_attachment_info.cc",
       "document_attachment_info.h",
       "document_layout.cc",
@@ -158,6 +157,7 @@
     deps = [
       ":accessibility",
       ":buildflags",
+      ":content_restriction",
       ":features",
       ":ppapi_migration",
       "//base",
@@ -201,6 +201,7 @@
 
     deps = [
       ":accessibility",
+      ":content_restriction",
       ":internal",
       ":pdf",
       ":ppapi_migration",
@@ -210,6 +211,11 @@
     ]
   }
 
+  source_set("content_restriction") {
+    # Exists separately to expose this header for testing.
+    public = [ "content_restriction.h" ]
+  }
+
   source_set("accessibility") {
     visibility = [
       ":*",
@@ -271,8 +277,6 @@
       "pdf_view_web_plugin.cc",
       "post_message_receiver.cc",
       "post_message_receiver.h",
-      "post_message_sender.cc",
-      "post_message_sender.h",
       "v8_value_converter.h",
     ]
 
@@ -297,7 +301,6 @@
       "//third_party/blink/public/common:headers",
       "//ui/base/cursor",
       "//ui/base/cursor/mojom:cursor_type",
-      "//ui/display",
       "//ui/events/blink",
       "//v8",
     ]
@@ -386,6 +389,7 @@
       ":accessibility",
       ":assert_enums",
       ":buildflags",
+      ":content_restriction",
       ":features",
       ":internal",
       ":pdf",
diff --git a/pdf/DEPS b/pdf/DEPS
index 5e76c9b7..969ef6f 100644
--- a/pdf/DEPS
+++ b/pdf/DEPS
@@ -9,7 +9,6 @@
   "+third_party/blink/public",
   "+third_party/skia/include/core",
   "+ui/base",
-  "+ui/display",
   "+ui/events",
   "+ui/gfx",
   "+v8/include",
diff --git a/pdf/content_restriction.h b/pdf/content_restriction.h
index f42be8cb..3341b5b 100644
--- a/pdf/content_restriction.h
+++ b/pdf/content_restriction.h
@@ -8,11 +8,8 @@
 namespace chrome_pdf {
 
 // Used for disabling browser commands because of restrictions on how the data
-// is to be used (i.e. can't copy/print).
-// TODO(crbug.com/702993): Must be kept in sync with `ContentRestriction` in
-// chrome/common/content_restriction.h. While there's a transitive static
-// assertion that the enums match, a direct static assertion should be added
-// when `PP_ContentRestriction` is removed.
+// is to be used (i.e. can't copy/print). Must be kept in sync with
+// `ContentRestriction` in chrome/common/content_restriction.h.
 enum ContentRestriction {
   kContentRestrictionCopy = 1 << 0,
   kContentRestrictionCut = 1 << 1,
diff --git a/pdf/pdf_view_web_plugin.cc b/pdf/pdf_view_web_plugin.cc
index c9ce9bf..c23af6e7 100644
--- a/pdf/pdf_view_web_plugin.cc
+++ b/pdf/pdf_view_web_plugin.cc
@@ -41,7 +41,6 @@
 #include "pdf/pdf_init.h"
 #include "pdf/pdfium/pdfium_engine.h"
 #include "pdf/post_message_receiver.h"
-#include "pdf/post_message_sender.h"
 #include "pdf/ppapi_migration/result_codes.h"
 #include "pdf/ppapi_migration/url_loader.h"
 #include "pdf/ui/document_properties.h"
@@ -55,21 +54,15 @@
 #include "third_party/blink/public/mojom/input/focus_type.mojom-shared.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_input_event_result.h"
-#include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_text_input_type.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/platform/web_url_error.h"
-#include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/public/platform/web_url_response.h"
-#include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/public/web/web_associated_url_loader.h"
 #include "third_party/blink/public/web/web_associated_url_loader_options.h"
 #include "third_party/blink/public/web/web_document.h"
-#include "third_party/blink/public/web/web_element.h"
 #include "third_party/blink/public/web/web_frame.h"
-#include "third_party/blink/public/web/web_frame_widget.h"
-#include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/public/web/web_local_frame_client.h"
 #include "third_party/blink/public/web/web_plugin_container.h"
 #include "third_party/blink/public/web/web_plugin_params.h"
@@ -82,7 +75,6 @@
 #include "ui/base/cursor/cursor.h"
 #include "ui/base/cursor/mojom/cursor_type.mojom-shared.h"
 #include "ui/base/text/bytes_formatting.h"
-#include "ui/display/screen_info.h"
 #include "ui/events/base_event_utils.h"
 #include "ui/events/blink/blink_event_util.h"
 #include "ui/events/keycodes/keyboard_codes.h"
@@ -148,149 +140,6 @@
   THREAD_CHECKER(thread_checker_);
 };
 
-class BlinkContainerWrapper final : public PdfViewWebPlugin::ContainerWrapper {
- public:
-  BlinkContainerWrapper(blink::WebPluginContainer* container,
-                        V8ValueConverter* v8_value_converter)
-      : container_(container),
-        post_message_sender_(container_, v8_value_converter) {
-    DCHECK(container_);
-    DCHECK(v8_value_converter);
-  }
-  BlinkContainerWrapper(const BlinkContainerWrapper&) = delete;
-  BlinkContainerWrapper& operator=(const BlinkContainerWrapper&) = delete;
-  ~BlinkContainerWrapper() override = default;
-
-  void Invalidate() override { container_->Invalidate(); }
-
-  void RequestTouchEventType(
-      blink::WebPluginContainer::TouchEventRequestType request_type) override {
-    container_->RequestTouchEventType(request_type);
-  }
-
-  void ReportFindInPageMatchCount(int identifier,
-                                  int total,
-                                  bool final_update) override {
-    container_->ReportFindInPageMatchCount(identifier, total, final_update);
-  }
-
-  void ReportFindInPageSelection(int identifier, int index) override {
-    container_->ReportFindInPageSelection(identifier, index);
-  }
-
-  void ReportFindInPageTickmarks(
-      const std::vector<gfx::Rect>& tickmarks) override {
-    blink::WebLocalFrame* frame = GetFrame();
-    if (frame) {
-      frame->SetTickmarks(blink::WebElement(),
-                          blink::WebVector<gfx::Rect>(tickmarks));
-    }
-  }
-
-  float DeviceScaleFactor() override {
-    // Do not reply on the device scale returned by
-    // `container_->DeviceScaleFactor()`, since it doesn't always reflect the
-    // real screen's device scale. Instead, get the real device scale from the
-    // top-level `blink::WebLocalFrame`'s screen info.
-    blink::WebWidget* widget = GetFrame()->LocalRoot()->FrameWidget();
-    return widget->GetOriginalScreenInfo().device_scale_factor;
-  }
-
-  gfx::PointF GetScrollPosition() override {
-    // Note that `blink::WebLocalFrame::GetScrollOffset()` actually returns a
-    // scroll position (a point relative to the top-left corner).
-    return GetFrame()->GetScrollOffset();
-  }
-
-  void PostMessage(base::Value::Dict message) override {
-    post_message_sender_.Post(std::move(message));
-  }
-
-  void UsePluginAsFindHandler() override {
-    container_->UsePluginAsFindHandler();
-  }
-
-  void SetReferrerForRequest(blink::WebURLRequest& request,
-                             const blink::WebURL& referrer_url) override {
-    GetFrame()->SetReferrerForRequest(request, referrer_url);
-  }
-
-  void Alert(const blink::WebString& message) override {
-    blink::WebLocalFrame* frame = GetFrame();
-    if (frame)
-      frame->Alert(message);
-  }
-
-  bool Confirm(const blink::WebString& message) override {
-    blink::WebLocalFrame* frame = GetFrame();
-    return frame && frame->Confirm(message);
-  }
-
-  blink::WebString Prompt(const blink::WebString& message,
-                          const blink::WebString& default_value) override {
-    blink::WebLocalFrame* frame = GetFrame();
-    return frame ? frame->Prompt(message, default_value) : blink::WebString();
-  }
-
-  void TextSelectionChanged(const blink::WebString& selection_text,
-                            uint32_t offset,
-                            const gfx::Range& range) override {
-    // Focus the plugin's containing frame before changing the text selection.
-    // TODO(crbug.com/1234559): Would it make more sense not to change the text
-    // selection at all in this case? Maybe we only have this problem because we
-    // support a "selectAll" message.
-    blink::WebLocalFrame* frame = GetFrame();
-    frame->View()->SetFocusedFrame(frame);
-
-    frame->TextSelectionChanged(selection_text, offset, range);
-  }
-
-  std::unique_ptr<blink::WebAssociatedURLLoader> CreateAssociatedURLLoader(
-      const blink::WebAssociatedURLLoaderOptions& options) override {
-    return GetFrame()->CreateAssociatedURLLoader(options);
-  }
-
-  void UpdateTextInputState() override {
-    // `widget` is null in Print Preview.
-    auto* widget = GetFrame()->FrameWidget();
-    if (widget)
-      widget->UpdateTextInputState();
-  }
-
-  void UpdateSelectionBounds() override {
-    // `widget` is null in Print Preview.
-    auto* widget = GetFrame()->FrameWidget();
-    if (widget)
-      widget->UpdateSelectionBounds();
-  }
-
-  std::string GetEmbedderOriginString() override {
-    auto* frame = GetFrame();
-    if (!frame)
-      return {};
-
-    auto* parent_frame = frame->Parent();
-    if (!parent_frame)
-      return {};
-
-    return GURL(parent_frame->GetSecurityOrigin().ToString().Utf8()).spec();
-  }
-
-  blink::WebLocalFrame* GetFrame() override {
-    return container_->GetDocument().GetFrame();
-  }
-
-  blink::WebLocalFrameClient* GetWebLocalFrameClient() override {
-    return GetFrame()->Client();
-  }
-
-  blink::WebPluginContainer* Container() override { return container_; }
-
- private:
-  const raw_ptr<blink::WebPluginContainer> container_;
-  PostMessageSender post_message_sender_;
-};
-
 }  // namespace
 
 std::unique_ptr<PdfAccessibilityDataHandler>
@@ -316,31 +165,28 @@
 PdfViewWebPlugin::~PdfViewWebPlugin() = default;
 
 bool PdfViewWebPlugin::Initialize(blink::WebPluginContainer* container) {
+  DCHECK(container);
+  client_->SetPluginContainer(container);
+
   DCHECK_EQ(container->Plugin(), this);
-  return InitializeCommon(
-      std::make_unique<BlinkContainerWrapper>(container, client_.get()),
-      /*engine_override=*/nullptr);
+  return InitializeCommon(/*engine_override=*/nullptr);
 }
 
 bool PdfViewWebPlugin::InitializeForTesting(
-    std::unique_ptr<ContainerWrapper> container_wrapper,
     std::unique_ptr<PDFiumEngine> engine,
     std::unique_ptr<UrlLoader> loader) {
   test_loader_ = std::move(loader);
-  return InitializeCommon(std::move(container_wrapper), std::move(engine));
+  return InitializeCommon(std::move(engine));
 }
 
 bool PdfViewWebPlugin::InitializeCommon(
-    std::unique_ptr<ContainerWrapper> container_wrapper,
     std::unique_ptr<PDFiumEngine> engine_override) {
-  container_wrapper_ = std::move(container_wrapper);
-
   // Allow the plugin to handle touch events.
-  container_wrapper_->RequestTouchEventType(
+  client_->RequestTouchEventType(
       blink::WebPluginContainer::kTouchEventRequestTypeRaw);
 
   // Allow the plugin to handle find requests.
-  container_wrapper_->UsePluginAsFindHandler();
+  client_->UsePluginAsFindHandler();
 
   absl::optional<ParsedParams> params = ParseWebPluginParams(initial_params_);
 
@@ -363,16 +209,15 @@
   base::debug::SetCrashKeyString(subresource_url, params->original_url);
 
   PerProcessInitializer::GetInstance().Acquire();
-  InitializeBase(
-      engine_override
-          ? std::move(engine_override)
-          : std::make_unique<PDFiumEngine>(this, params->script_option),
-      /*embedder_origin=*/container_wrapper_->GetEmbedderOriginString(),
-      /*src_url=*/params->src_url,
-      /*original_url=*/params->original_url,
-      /*full_frame=*/params->full_frame,
-      /*background_color=*/params->background_color,
-      /*has_edits=*/params->has_edits);
+  InitializeBase(engine_override ? std::move(engine_override)
+                                 : std::make_unique<PDFiumEngine>(
+                                       this, params->script_option),
+                 /*embedder_origin=*/client_->GetEmbedderOriginString(),
+                 /*src_url=*/params->src_url,
+                 /*original_url=*/params->original_url,
+                 /*full_frame=*/params->full_frame,
+                 /*background_color=*/params->background_color,
+                 /*has_edits=*/params->has_edits);
 
   SendSetSmoothScrolling();
 
@@ -391,20 +236,20 @@
 }
 
 void PdfViewWebPlugin::Destroy() {
-  if (container_wrapper_) {
+  if (client_->PluginContainer()) {
     // Explicitly destroy the PDFEngine during destruction as it may call back
     // into this object.
     DestroyPreviewEngine();
     DestroyEngine();
     PerProcessInitializer::GetInstance().Release();
-    container_wrapper_.reset();
+    client_->SetPluginContainer(nullptr);
   }
 
   delete this;
 }
 
 blink::WebPluginContainer* PdfViewWebPlugin::Container() const {
-  return container_wrapper_ ? container_wrapper_->Container() : nullptr;
+  return client_->PluginContainer();
 }
 
 v8::Local<v8::Object> PdfViewWebPlugin::V8ScriptableObject(
@@ -480,9 +325,9 @@
   if (window_rect.IsEmpty())
     return;
 
-  OnViewportChanged(window_rect, container_wrapper_->DeviceScaleFactor());
+  OnViewportChanged(window_rect, client_->DeviceScaleFactor());
 
-  gfx::PointF scroll_position = container_wrapper_->GetScrollPosition();
+  gfx::PointF scroll_position = client_->GetScrollPosition();
   // Convert back to CSS pixels.
   scroll_position.Scale(1.0f / device_scale());
   UpdateScroll(scroll_position);
@@ -492,8 +337,8 @@
                                    blink::mojom::FocusType focus_type) {
   if (has_focus_ != focused) {
     engine()->UpdateFocus(focused);
-    container_wrapper_->UpdateTextInputState();
-    container_wrapper_->UpdateSelectionBounds();
+    client_->UpdateTextInputState();
+    client_->UpdateSelectionBounds();
   }
   has_focus_ = focused;
 
@@ -666,7 +511,7 @@
   find_identifier_ = -1;
   engine()->StopFind();
   tickmarks_.clear();
-  container_wrapper_->ReportFindInPageTickmarks(tickmarks_);
+  client_->ReportFindInPageTickmarks(tickmarks_);
 }
 
 bool PdfViewWebPlugin::CanRotateView() {
@@ -748,11 +593,10 @@
   // be a NotifyNumberOfFindResultsChanged notification pending from engine.
   // Just ignore them.
   if (find_identifier_ != -1) {
-    container_wrapper_->ReportFindInPageMatchCount(find_identifier_, total,
-                                                   final_result);
+    client_->ReportFindInPageMatchCount(find_identifier_, total, final_result);
   }
 
-  container_wrapper_->ReportFindInPageTickmarks(tickmarks_);
+  client_->ReportFindInPageTickmarks(tickmarks_);
 
   if (final_result)
     return;
@@ -766,12 +610,11 @@
 }
 
 void PdfViewWebPlugin::NotifySelectedFindResultChanged(int current_find_index) {
-  if (find_identifier_ == -1 || !container_wrapper_)
+  if (find_identifier_ == -1 || !client_->PluginContainer())
     return;
 
   DCHECK_GE(current_find_index, -1);
-  container_wrapper_->ReportFindInPageSelection(find_identifier_,
-                                                current_find_index + 1);
+  client_->ReportFindInPageSelection(find_identifier_, current_find_index + 1);
 }
 
 void PdfViewWebPlugin::CaretChanged(const gfx::Rect& caret_rect) {
@@ -780,16 +623,16 @@
 }
 
 void PdfViewWebPlugin::Alert(const std::string& message) {
-  container_wrapper_->Alert(blink::WebString::FromUTF8(message));
+  client_->Alert(blink::WebString::FromUTF8(message));
 }
 
 bool PdfViewWebPlugin::Confirm(const std::string& message) {
-  return container_wrapper_->Confirm(blink::WebString::FromUTF8(message));
+  return client_->Confirm(blink::WebString::FromUTF8(message));
 }
 
 std::string PdfViewWebPlugin::Prompt(const std::string& question,
                                      const std::string& default_answer) {
-  return container_wrapper_
+  return client_
       ->Prompt(blink::WebString::FromUTF8(question),
                blink::WebString::FromUTF8(default_answer))
       .Utf8();
@@ -811,8 +654,8 @@
 
 void PdfViewWebPlugin::SetSelectedText(const std::string& selected_text) {
   selected_text_ = blink::WebString::FromUTF8(selected_text);
-  container_wrapper_->TextSelectionChanged(
-      selected_text_, /*offset=*/0, gfx::Range(0, selected_text_.length()));
+  client_->TextSelectionChanged(selected_text_, /*offset=*/0,
+                                gfx::Range(0, selected_text_.length()));
 }
 
 bool PdfViewWebPlugin::IsValidLink(const std::string& url) {
@@ -833,30 +676,30 @@
 }
 
 bool PdfViewWebPlugin::IsValid() const {
-  return container_wrapper_ && container_wrapper_->GetFrame();
+  return client_->HasFrame();
 }
 
 blink::WebURL PdfViewWebPlugin::CompleteURL(
     const blink::WebString& partial_url) const {
   DCHECK(IsValid());
-  return Container()->GetDocument().CompleteURL(partial_url);
+  return client_->CompleteURL(partial_url);
 }
 
 net::SiteForCookies PdfViewWebPlugin::SiteForCookies() const {
   DCHECK(IsValid());
-  return Container()->GetDocument().SiteForCookies();
+  return client_->SiteForCookies();
 }
 
 void PdfViewWebPlugin::SetReferrerForRequest(
     blink::WebURLRequest& request,
     const blink::WebURL& referrer_url) {
-  container_wrapper_->SetReferrerForRequest(request, referrer_url);
+  client_->SetReferrerForRequest(request, referrer_url);
 }
 
 std::unique_ptr<blink::WebAssociatedURLLoader>
 PdfViewWebPlugin::CreateAssociatedURLLoader(
     const blink::WebAssociatedURLLoaderOptions& options) {
-  return container_wrapper_->CreateAssociatedURLLoader(options);
+  return client_->CreateAssociatedURLLoader(options);
 }
 
 void PdfViewWebPlugin::OnMessage(const base::Value::Dict& message) {
@@ -864,7 +707,7 @@
 }
 
 void PdfViewWebPlugin::InvalidatePluginContainer() {
-  container_wrapper_->Invalidate();
+  client_->Invalidate();
 }
 
 void PdfViewWebPlugin::UpdateSnapshot(sk_sp<SkImage> snapshot) {
@@ -933,7 +776,7 @@
 }
 
 void PdfViewWebPlugin::SendMessage(base::Value::Dict message) {
-  container_wrapper_->PostMessage(std::move(message));
+  client_->PostMessage(std::move(message));
 }
 
 void PdfViewWebPlugin::SaveAs() {
@@ -948,7 +791,7 @@
 void PdfViewWebPlugin::SetFormTextFieldInFocus(bool in_focus) {
   text_input_type_ = in_focus ? blink::WebTextInputType::kWebTextInputTypeText
                               : blink::WebTextInputType::kWebTextInputTypeNone;
-  container_wrapper_->UpdateTextInputState();
+  client_->UpdateTextInputState();
 }
 
 void PdfViewWebPlugin::SetAccessibilityDocInfo(AccessibilityDocInfo doc_info) {
@@ -995,7 +838,7 @@
 }
 
 void PdfViewWebPlugin::PluginDidStartLoading() {
-  auto* client = container_wrapper_->GetWebLocalFrameClient();
+  auto* client = client_->GetWebLocalFrameClient();
   if (!client)
     return;
 
@@ -1003,7 +846,7 @@
 }
 
 void PdfViewWebPlugin::PluginDidStopLoading() {
-  auto* client = container_wrapper_->GetWebLocalFrameClient();
+  auto* client = client_->GetWebLocalFrameClient();
   if (!client)
     return;
 
@@ -1117,7 +960,7 @@
 }
 
 void PdfViewWebPlugin::OnInvokePrintDialog() {
-  client_->Print(Container()->GetElement());
+  client_->Print();
 }
 
 void PdfViewWebPlugin::OnSetAccessibilityDocInfo(
diff --git a/pdf/pdf_view_web_plugin.h b/pdf/pdf_view_web_plugin.h
index 5e1449e..6506ae8 100644
--- a/pdf/pdf_view_web_plugin.h
+++ b/pdf/pdf_view_web_plugin.h
@@ -32,8 +32,6 @@
 
 namespace blink {
 class WebAssociatedURLLoader;
-class WebElement;
-class WebLocalFrame;
 class WebLocalFrameClient;
 class WebURL;
 class WebURLRequest;
@@ -46,6 +44,10 @@
 class Rect;
 }  // namespace gfx
 
+namespace net {
+class SiteForCookies;
+}  // namespace net
+
 namespace printing {
 class MetafileSkia;
 }  // namespace printing
@@ -63,9 +65,30 @@
                                public PostMessageReceiver::Client,
                                public PdfAccessibilityActionHandler {
  public:
-  class ContainerWrapper {
+  // Provides services from the plugin's container.
+  class Client : public V8ValueConverter {
    public:
-    virtual ~ContainerWrapper() = default;
+    virtual ~Client() = default;
+
+    virtual base::WeakPtr<Client> GetWeakPtr() = 0;
+
+    // Passes the plugin container to the client. This is first called in
+    // `Initialize()`, and cleared to null in `Destroy()`. The container may
+    // also be null for testing.
+    virtual void SetPluginContainer(blink::WebPluginContainer* container) = 0;
+
+    // Returns the plugin container set by `SetPluginContainer()`.
+    virtual blink::WebPluginContainer* PluginContainer() = 0;
+
+    // Returrns the document's site for cookies.
+    virtual net::SiteForCookies SiteForCookies() const = 0;
+
+    // Resolves `partial_url` relative to the document's base URL.
+    virtual blink::WebURL CompleteURL(
+        const blink::WebString& partial_url) const = 0;
+
+    // Enqueues a "message" event carrying `message` to the plugin embedder.
+    virtual void PostMessage(base::Value::Dict message) {}
 
     // Invalidates the entire web plugin container and schedules a paint of the
     // page in it.
@@ -94,9 +117,6 @@
     // Gets the scroll position.
     virtual gfx::PointF GetScrollPosition() = 0;
 
-    // Enqueues a "message" event carrying `message` to the plugin embedder.
-    virtual void PostMessage(base::Value::Dict message) = 0;
-
     // Tells the embedder to allow the plugin to handle find requests.
     virtual void UsePluginAsFindHandler() = 0;
 
@@ -133,27 +153,15 @@
     // Gets the embedder's origin as a serialized string.
     virtual std::string GetEmbedderOriginString() = 0;
 
-    // Returns the local frame to which the web plugin container belongs.
-    virtual blink::WebLocalFrame* GetFrame() = 0;
+    // Returns whether the plugin container's frame exists.
+    virtual bool HasFrame() const = 0;
 
     // Returns the local frame's client (render frame). May be null in unit
     // tests.
     virtual blink::WebLocalFrameClient* GetWebLocalFrameClient() = 0;
 
-    // Returns the blink web plugin container pointer that's wrapped inside this
-    // object. Returns nullptr if this object is for test only.
-    virtual blink::WebPluginContainer* Container() = 0;
-  };
-
-  // Allows for dependency injections into `PdfViewWebPlugin`.
-  class Client : public V8ValueConverter {
-   public:
-    virtual ~Client() = default;
-
-    virtual base::WeakPtr<Client> GetWeakPtr() = 0;
-
-    // Prints the given `element`.
-    virtual void Print(const blink::WebElement& element) {}
+    // Prints the plugin element.
+    virtual void Print() {}
 
     // Sends over a string to be recorded by user metrics as a computed action.
     // When you use this, you need to also update the rules for extracting known
@@ -281,10 +289,9 @@
   void HandleAccessibilityAction(
       const AccessibilityActionData& action_data) override;
 
-  // Initializes the plugin using the `container_wrapper` and `engine` provided
-  // by tests. Lets CreateUrlLoaderInternal() return `loader` on its first call.
-  bool InitializeForTesting(std::unique_ptr<ContainerWrapper> container_wrapper,
-                            std::unique_ptr<PDFiumEngine> engine,
+  // Initializes the plugin using the `engine` provided by tests. Lets
+  // `CreateUrlLoaderInternal()` return `loader` on its first call.
+  bool InitializeForTesting(std::unique_ptr<PDFiumEngine> engine,
                             std::unique_ptr<UrlLoader> loader);
 
   const gfx::Rect& GetPluginRectForTesting() const { return plugin_rect(); }
@@ -325,8 +332,7 @@
 
   // Passing in a null `engine_override` allows InitializeCommon() to create a
   // PDFiumEngine normally. Otherwise, `engine_override` is used.
-  bool InitializeCommon(std::unique_ptr<ContainerWrapper> container_wrapper,
-                        std::unique_ptr<PDFiumEngine> engine_override);
+  bool InitializeCommon(std::unique_ptr<PDFiumEngine> engine_override);
 
   // Sends whether to do smooth scrolling.
   void SendSetSmoothScrolling();
@@ -414,8 +420,6 @@
 
   blink::WebPluginParams initial_params_;
 
-  std::unique_ptr<ContainerWrapper> container_wrapper_;
-
   v8::Persistent<v8::Object> scriptable_receiver_;
 
   // The current image snapshot.
diff --git a/pdf/pdf_view_web_plugin_unittest.cc b/pdf/pdf_view_web_plugin_unittest.cc
index 22c2596e3..c9edb2d2 100644
--- a/pdf/pdf_view_web_plugin_unittest.cc
+++ b/pdf/pdf_view_web_plugin_unittest.cc
@@ -18,9 +18,11 @@
 #include "base/test/bind.h"
 #include "base/test/values_test_util.h"
 #include "base/time/time.h"
+#include "base/values.h"
 #include "cc/paint/paint_canvas.h"
 #include "cc/test/pixel_comparator.h"
 #include "cc/test/pixel_test_utils.h"
+#include "net/cookies/site_for_cookies.h"
 #include "pdf/paint_ready_rect.h"
 #include "pdf/test/test_helpers.h"
 #include "pdf/test/test_pdfium_engine.h"
@@ -33,6 +35,7 @@
 #include "third_party/blink/public/common/input/web_pointer_properties.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_text_input_type.h"
+#include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/public/web/web_associated_url_loader.h"
 #include "third_party/blink/public/web/web_plugin_container.h"
@@ -146,23 +149,41 @@
   return web_event;
 }
 
-class FakeContainerWrapper : public PdfViewWebPlugin::ContainerWrapper {
+class FakePdfViewWebPluginClient : public PdfViewWebPlugin::Client {
  public:
-  explicit FakeContainerWrapper(PdfViewWebPlugin* web_plugin)
-      : web_plugin_(web_plugin) {
+  void SetPlugin(PdfViewWebPlugin* web_plugin) {
+    web_plugin_ = web_plugin;
+
     ON_CALL(*this, UpdateTextInputState)
         .WillByDefault(Invoke(
-            this, &FakeContainerWrapper::UpdateTextInputStateFromPlugin));
-
+            this, &FakePdfViewWebPluginClient::UpdateTextInputStateFromPlugin));
     UpdateTextInputStateFromPlugin();
   }
 
-  FakeContainerWrapper(const FakeContainerWrapper&) = delete;
-  FakeContainerWrapper& operator=(const FakeContainerWrapper&) = delete;
-  ~FakeContainerWrapper() override = default;
+  // PdfViewWebPlugin::Client:
+  MOCK_METHOD(std::unique_ptr<base::Value>,
+              FromV8Value,
+              (v8::Local<v8::Value>, v8::Local<v8::Context>),
+              (override));
 
-  // PdfViewWebPlugin::ContainerWrapper:
-  void Invalidate() override {}
+  MOCK_METHOD(base::WeakPtr<Client>, GetWeakPtr, (), (override));
+
+  MOCK_METHOD(void,
+              SetPluginContainer,
+              (blink::WebPluginContainer*),
+              (override));
+  MOCK_METHOD(blink::WebPluginContainer*, PluginContainer, (), (override));
+
+  MOCK_METHOD(net::SiteForCookies, SiteForCookies, (), (const override));
+
+  MOCK_METHOD(blink::WebURL,
+              CompleteURL,
+              (const blink::WebString&),
+              (const override));
+
+  MOCK_METHOD(void, PostMessage, (base::Value::Dict), (override));
+
+  MOCK_METHOD(void, Invalidate, (), (override));
 
   MOCK_METHOD(void,
               RequestTouchEventType,
@@ -182,8 +203,6 @@
 
   MOCK_METHOD(gfx::PointF, GetScrollPosition, (), (override));
 
-  MOCK_METHOD(void, PostMessage, (base::Value::Dict), (override));
-
   MOCK_METHOD(void, UsePluginAsFindHandler, (), (override));
 
   MOCK_METHOD(void,
@@ -218,17 +237,12 @@
     return "chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/";
   }
 
-  blink::WebLocalFrame* GetFrame() override { return nullptr; }
+  MOCK_METHOD(bool, HasFrame, (), (const override));
 
   blink::WebLocalFrameClient* GetWebLocalFrameClient() override {
     return nullptr;
   }
 
-  blink::WebPluginContainer* Container() override {
-    ADD_FAILURE();
-    return nullptr;
-  }
-
   blink::WebTextInputType widget_text_input_type() const {
     return widget_text_input_type_;
   }
@@ -246,26 +260,6 @@
   blink::WebTextInputType widget_text_input_type_;
 
   raw_ptr<PdfViewWebPlugin> web_plugin_;
-};
-
-class FakePdfViewWebPluginClient : public PdfViewWebPlugin::Client {
- public:
-  FakePdfViewWebPluginClient() = default;
-  FakePdfViewWebPluginClient(const FakePdfViewWebPluginClient&) = delete;
-  FakePdfViewWebPluginClient& operator=(const FakePdfViewWebPluginClient&) =
-      delete;
-  ~FakePdfViewWebPluginClient() override = default;
-
-  // PdfViewWebPlugin::Client:
-  MOCK_METHOD(std::unique_ptr<base::Value>,
-              FromV8Value,
-              (v8::Local<v8::Value>, v8::Local<v8::Context>),
-              (override));
-  MOCK_METHOD(v8::Local<v8::Value>,
-              ToV8Value,
-              (const base::Value&, v8::Local<v8::Context>),
-              (override));
-  MOCK_METHOD(base::WeakPtr<Client>, GetWeakPtr, (), (override));
 
  private:
   base::WeakPtrFactory<FakePdfViewWebPluginClient> weak_factory_{this};
@@ -317,6 +311,8 @@
     plugin_ =
         std::unique_ptr<PdfViewWebPlugin, PluginDeleter>(new PdfViewWebPlugin(
             std::move(client), std::move(unbound_remote), params));
+
+    client_ptr_->SetPlugin(plugin_.get());
   }
 
   void TearDown() override { plugin_.reset(); }
@@ -330,19 +326,10 @@
   void SetUp() override {
     PdfViewWebPluginWithoutInitializeTest::SetUp();
 
-    auto wrapper =
-        std::make_unique<NiceMock<FakeContainerWrapper>>(plugin_.get());
-    wrapper_ptr_ = wrapper.get();
     auto engine = CreateEngine();
     engine_ptr_ = engine.get();
-    EXPECT_TRUE(plugin_->InitializeForTesting(
-        std::move(wrapper), std::move(engine), CreateLoader()));
-  }
-
-  void TearDown() override {
-    wrapper_ptr_ = nullptr;
-
-    PdfViewWebPluginWithoutInitializeTest::TearDown();
+    EXPECT_TRUE(
+        plugin_->InitializeForTesting(std::move(engine), CreateLoader()));
   }
 
   // Allow derived test classes to create their own custom TestPDFiumEngine.
@@ -386,8 +373,7 @@
                                           const gfx::Rect& window_rect) {
     // The plugin container's device scale must be set before calling
     // UpdateGeometry().
-    ASSERT_TRUE(wrapper_ptr_);
-    wrapper_ptr_->set_device_scale(device_scale);
+    client_ptr_->set_device_scale(device_scale);
     plugin_->UpdateGeometry(window_rect, window_rect, window_rect,
                             /*is_visible=*/true);
   }
@@ -448,22 +434,19 @@
   }
 
   raw_ptr<TestPDFiumEngine> engine_ptr_;
-  raw_ptr<FakeContainerWrapper> wrapper_ptr_;
 
   // Provides the cc::PaintCanvas for painting.
   gfx::Canvas canvas_{kCanvasSize, /*image_scale=*/1.0f, /*is_opaque=*/true};
 };
 
 TEST_F(PdfViewWebPluginWithoutInitializeTest, Initialize) {
-  auto wrapper =
-      std::make_unique<NiceMock<FakeContainerWrapper>>(plugin_.get());
   auto engine = std::make_unique<NiceMock<TestPDFiumEngine>>(plugin_.get());
-  EXPECT_CALL(*wrapper,
+  EXPECT_CALL(*client_ptr_,
               RequestTouchEventType(
                   blink::WebPluginContainer::kTouchEventRequestTypeRaw));
 
-  EXPECT_TRUE(plugin_->InitializeForTesting(
-      std::move(wrapper), std::move(engine), /*loader=*/nullptr));
+  EXPECT_TRUE(
+      plugin_->InitializeForTesting(std::move(engine), /*loader=*/nullptr));
 }
 
 TEST_F(PdfViewWebPluginTest, UpdateGeometrySetsPluginRect) {
@@ -505,7 +488,7 @@
 TEST_F(PdfViewWebPluginTest, UpdateGeometryScroll) {
   SetDocumentDimensions({100, 200});
 
-  EXPECT_CALL(*wrapper_ptr_, GetScrollPosition)
+  EXPECT_CALL(*client_ptr_, GetScrollPosition)
       .WillRepeatedly(Return(gfx::PointF(4.0f, 6.0f)));
   EXPECT_CALL(*engine_ptr_, ScrolledToXPosition(4));
   EXPECT_CALL(*engine_ptr_, ScrolledToYPosition(6));
@@ -679,7 +662,7 @@
 };
 
 TEST_F(PdfViewWebPluginMouseEventsTest, HandleInputEvent) {
-  wrapper_ptr_->set_device_scale(kDeviceScale);
+  client_ptr_->set_device_scale(kDeviceScale);
   UpdatePluginGeometry(kDeviceScale, gfx::Rect(20, 20));
 
   ui::Cursor dummy_cursor;
@@ -780,7 +763,7 @@
   ASSERT_TRUE(plugin_->SelectionAsMarkup().IsEmpty());
 
   static constexpr char kSelectedText[] = "1234";
-  EXPECT_CALL(*wrapper_ptr_,
+  EXPECT_CALL(*client_ptr_,
               TextSelectionChanged(blink::WebString::FromUTF8(kSelectedText), 0,
                                    gfx::Range(0, 4)));
 
@@ -790,7 +773,7 @@
   EXPECT_EQ(kSelectedText, plugin_->SelectionAsMarkup().Utf8());
 
   static constexpr char kEmptyText[] = "";
-  EXPECT_CALL(*wrapper_ptr_,
+  EXPECT_CALL(*client_ptr_,
               TextSelectionChanged(blink::WebString::FromUTF8(kEmptyText), 0,
                                    gfx::Range(0, 0)));
   plugin_->SetSelectedText(kEmptyText);
@@ -801,41 +784,41 @@
 
 TEST_F(PdfViewWebPluginTest, FormTextFieldFocusChangeUpdatesTextInputType) {
   ASSERT_EQ(blink::WebTextInputType::kWebTextInputTypeNone,
-            wrapper_ptr_->widget_text_input_type());
+            client_ptr_->widget_text_input_type());
 
   MockFunction<void()> checkpoint;
   {
     InSequence sequence;
-    EXPECT_CALL(*wrapper_ptr_, UpdateTextInputState);
+    EXPECT_CALL(*client_ptr_, UpdateTextInputState);
     EXPECT_CALL(checkpoint, Call);
-    EXPECT_CALL(*wrapper_ptr_, UpdateTextInputState);
+    EXPECT_CALL(*client_ptr_, UpdateTextInputState);
     EXPECT_CALL(checkpoint, Call);
-    EXPECT_CALL(*wrapper_ptr_, UpdateTextInputState);
+    EXPECT_CALL(*client_ptr_, UpdateTextInputState);
     EXPECT_CALL(checkpoint, Call);
-    EXPECT_CALL(*wrapper_ptr_, UpdateTextInputState);
+    EXPECT_CALL(*client_ptr_, UpdateTextInputState);
   }
 
   plugin_->FormFieldFocusChange(PDFEngine::FocusFieldType::kText);
   EXPECT_EQ(blink::WebTextInputType::kWebTextInputTypeText,
-            wrapper_ptr_->widget_text_input_type());
+            client_ptr_->widget_text_input_type());
 
   checkpoint.Call();
 
   plugin_->FormFieldFocusChange(PDFEngine::FocusFieldType::kNoFocus);
   EXPECT_EQ(blink::WebTextInputType::kWebTextInputTypeNone,
-            wrapper_ptr_->widget_text_input_type());
+            client_ptr_->widget_text_input_type());
 
   checkpoint.Call();
 
   plugin_->FormFieldFocusChange(PDFEngine::FocusFieldType::kText);
   EXPECT_EQ(blink::WebTextInputType::kWebTextInputTypeText,
-            wrapper_ptr_->widget_text_input_type());
+            client_ptr_->widget_text_input_type());
 
   checkpoint.Call();
 
   plugin_->FormFieldFocusChange(PDFEngine::FocusFieldType::kNonText);
   EXPECT_EQ(blink::WebTextInputType::kWebTextInputTypeNone,
-            wrapper_ptr_->widget_text_input_type());
+            client_ptr_->widget_text_input_type());
 }
 
 TEST_F(PdfViewWebPluginTest, SearchString) {
@@ -866,8 +849,8 @@
     InSequence sequence;
 
     // Focus false -> true: Triggers updates.
-    EXPECT_CALL(*wrapper_ptr_, UpdateTextInputState);
-    EXPECT_CALL(*wrapper_ptr_, UpdateSelectionBounds);
+    EXPECT_CALL(*client_ptr_, UpdateTextInputState);
+    EXPECT_CALL(*client_ptr_, UpdateSelectionBounds);
     EXPECT_CALL(checkpoint, Call(1));
 
     // Focus true -> true: No updates.
@@ -876,16 +859,16 @@
     // Focus true -> false: Triggers updates. `UpdateTextInputState` is called
     // twice because it also gets called due to
     // `PDFiumEngine::UpdateFocus(false)`.
-    EXPECT_CALL(*wrapper_ptr_, UpdateTextInputState).Times(2);
-    EXPECT_CALL(*wrapper_ptr_, UpdateSelectionBounds);
+    EXPECT_CALL(*client_ptr_, UpdateTextInputState).Times(2);
+    EXPECT_CALL(*client_ptr_, UpdateSelectionBounds);
     EXPECT_CALL(checkpoint, Call(3));
 
     // Focus false -> false: No updates.
     EXPECT_CALL(checkpoint, Call(4));
 
     // Focus false -> true: Triggers updates.
-    EXPECT_CALL(*wrapper_ptr_, UpdateTextInputState);
-    EXPECT_CALL(*wrapper_ptr_, UpdateSelectionBounds);
+    EXPECT_CALL(*client_ptr_, UpdateTextInputState);
+    EXPECT_CALL(*client_ptr_, UpdateSelectionBounds);
   }
 
   // The focus type does not matter in this test.
@@ -918,8 +901,8 @@
   const std::vector<gfx::Rect> tickmarks = {gfx::Rect(1, 2), gfx::Rect(3, 4)};
   plugin_->UpdateTickMarks(tickmarks);
 
-  EXPECT_CALL(*wrapper_ptr_, ReportFindInPageTickmarks(tickmarks));
-  EXPECT_CALL(*wrapper_ptr_, ReportFindInPageMatchCount(123, 5, true));
+  EXPECT_CALL(*client_ptr_, ReportFindInPageTickmarks(tickmarks));
+  EXPECT_CALL(*client_ptr_, ReportFindInPageMatchCount(123, 5, true));
   plugin_->NotifyNumberOfFindResultsChanged(/*total=*/5, /*final_result=*/true);
 }
 
@@ -945,8 +928,8 @@
 
 TEST_F(PdfViewWebPluginWithoutDocInfoTest, DocumentLoadCompletePostMessages) {
   const base::Value::Dict expect_metadata = CreateExpectedNoMetadataResponse();
-  EXPECT_CALL(*wrapper_ptr_, PostMessage);
-  EXPECT_CALL(*wrapper_ptr_, PostMessage(Eq(std::ref(expect_metadata))));
+  EXPECT_CALL(*client_ptr_, PostMessage);
+  EXPECT_CALL(*client_ptr_, PostMessage(Eq(std::ref(expect_metadata))));
   plugin_->DocumentLoadComplete();
 }
 
@@ -1108,10 +1091,10 @@
   const base::Value::Dict expect_bookmarks =
       CreateExpectedBookmarksResponse(engine_ptr_->GetBookmarks());
   const base::Value::Dict expect_metadata = CreateExpectedMetadataResponse();
-  EXPECT_CALL(*wrapper_ptr_, PostMessage);
-  EXPECT_CALL(*wrapper_ptr_, PostMessage(Eq(std::ref(expect_attachments))));
-  EXPECT_CALL(*wrapper_ptr_, PostMessage(Eq(std::ref(expect_bookmarks))));
-  EXPECT_CALL(*wrapper_ptr_, PostMessage(Eq(std::ref(expect_metadata))));
+  EXPECT_CALL(*client_ptr_, PostMessage);
+  EXPECT_CALL(*client_ptr_, PostMessage(Eq(std::ref(expect_attachments))));
+  EXPECT_CALL(*client_ptr_, PostMessage(Eq(std::ref(expect_bookmarks))));
+  EXPECT_CALL(*client_ptr_, PostMessage(Eq(std::ref(expect_metadata))));
   plugin_->DocumentLoadComplete();
 }
 
diff --git a/pdf/post_message_sender.cc b/pdf/post_message_sender.cc
deleted file mode 100644
index 2e9d470..0000000
--- a/pdf/post_message_sender.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2021 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 "pdf/post_message_sender.h"
-
-#include <memory>
-
-#include "base/check_op.h"
-#include "base/values.h"
-#include "pdf/v8_value_converter.h"
-#include "third_party/blink/public/web/blink.h"
-#include "third_party/blink/public/web/web_document.h"
-#include "third_party/blink/public/web/web_dom_message_event.h"
-#include "third_party/blink/public/web/web_local_frame.h"
-#include "third_party/blink/public/web/web_plugin_container.h"
-#include "third_party/blink/public/web/web_serialized_script_value.h"
-#include "v8/include/v8.h"
-
-namespace chrome_pdf {
-
-PostMessageSender::PostMessageSender(blink::WebPluginContainer* container,
-                                     V8ValueConverter* v8_value_converter)
-    : v8_value_converter_(v8_value_converter),
-      isolate_(blink::MainThreadIsolate()),
-      container_(container) {
-  DCHECK(container_);
-}
-
-PostMessageSender::~PostMessageSender() = default;
-
-// TODO(crbug.com/1109796): This method is currently called from the renderer
-// main thread, but will be called from a dedicated plugin thread in the future.
-// When that happens, the body of this method needs to be posted to the main
-// thread as a task because that's where the Blink and V8 interactions need to
-// occur.
-void PostMessageSender::Post(base::Value::Dict message) {
-  v8::Isolate::Scope isolate_scope(isolate_);
-  v8::HandleScope handle_scope(isolate_);
-  v8::Local<v8::Context> context =
-      container_->GetDocument().GetFrame()->MainWorldScriptContext();
-  DCHECK_EQ(isolate_, context->GetIsolate());
-  v8::Context::Scope context_scope(context);
-
-  v8::Local<v8::Value> converted_message =
-      v8_value_converter_->ToV8Value(base::Value(std::move(message)), context);
-
-  container_->EnqueueMessageEvent(
-      blink::WebSerializedScriptValue::Serialize(isolate_, converted_message));
-}
-
-}  // namespace chrome_pdf
diff --git a/pdf/post_message_sender.h b/pdf/post_message_sender.h
deleted file mode 100644
index 4114d3d..0000000
--- a/pdf/post_message_sender.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2021 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 PDF_POST_MESSAGE_SENDER_H_
-#define PDF_POST_MESSAGE_SENDER_H_
-
-#include "base/memory/raw_ptr.h"
-#include "base/values.h"
-#include "v8/include/v8-forward.h"
-
-namespace blink {
-class WebPluginContainer;
-}  // namespace blink
-
-namespace chrome_pdf {
-
-class V8ValueConverter;
-
-// Manages messages sent from the plugin to its embedder.
-class PostMessageSender final {
- public:
-  PostMessageSender(blink::WebPluginContainer* container,
-                    V8ValueConverter* v8_value_converter);
-  PostMessageSender(const PostMessageSender&) = delete;
-  PostMessageSender& operator=(const PostMessageSender&) = delete;
-  ~PostMessageSender();
-
-  // Enqueues a "message" event carrying `message` to the plugin embedder.
-  void Post(base::Value::Dict message);
-
- private:
-  const raw_ptr<V8ValueConverter> v8_value_converter_;
-
-  const raw_ptr<v8::Isolate> isolate_;
-
-  raw_ptr<blink::WebPluginContainer> const container_;
-};
-
-}  // namespace chrome_pdf
-
-#endif  // PDF_POST_MESSAGE_SENDER_H_
diff --git a/pdf/v8_value_converter.h b/pdf/v8_value_converter.h
index 4b36afe..93f44f0 100644
--- a/pdf/v8_value_converter.h
+++ b/pdf/v8_value_converter.h
@@ -25,8 +25,6 @@
   virtual std::unique_ptr<base::Value> FromV8Value(
       v8::Local<v8::Value> value,
       v8::Local<v8::Context> context) = 0;
-  virtual v8::Local<v8::Value> ToV8Value(const base::Value& value,
-                                         v8::Local<v8::Context> context) = 0;
 
  protected:
   ~V8ValueConverter() = default;
diff --git a/sandbox/policy/mac/BUILD.gn b/sandbox/policy/mac/BUILD.gn
index 5d7de59..8a4d9b2b 100644
--- a/sandbox/policy/mac/BUILD.gn
+++ b/sandbox/policy/mac/BUILD.gn
@@ -16,6 +16,7 @@
   "ppapi.sb",
   "print_compositor.sb",
   "renderer.sb",
+  "screen_ai.sb",
   "speech_recognition.sb",
   "utility.sb",
 ]
diff --git a/sandbox/policy/mac/sandbox_mac.mm b/sandbox/policy/mac/sandbox_mac.mm
index 34f8b003..35d1091 100644
--- a/sandbox/policy/mac/sandbox_mac.mm
+++ b/sandbox/policy/mac/sandbox_mac.mm
@@ -24,6 +24,7 @@
 #include "sandbox/policy/mac/print_backend.sb.h"
 #include "sandbox/policy/mac/print_compositor.sb.h"
 #include "sandbox/policy/mac/renderer.sb.h"
+#include "sandbox/policy/mac/screen_ai.sb.h"
 #include "sandbox/policy/mac/speech_recognition.sb.h"
 #include "sandbox/policy/mac/utility.sb.h"
 #include "sandbox/policy/mojom/sandbox.mojom.h"
@@ -80,6 +81,9 @@
     case sandbox::mojom::Sandbox::kPrintCompositor:
       profile += kSeatbeltPolicyString_print_compositor;
       break;
+    case sandbox::mojom::Sandbox::kScreenAI:
+      profile += kSeatbeltPolicyString_screen_ai;
+      break;
     case sandbox::mojom::Sandbox::kSpeechRecognition:
       profile += kSeatbeltPolicyString_speech_recognition;
       break;
diff --git a/sandbox/policy/mac/screen_ai.sb b/sandbox/policy/mac/screen_ai.sb
new file mode 100644
index 0000000..09888bef
--- /dev/null
+++ b/sandbox/policy/mac/screen_ai.sb
@@ -0,0 +1,10 @@
+; Copyright 2022 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.
+
+; --- The contents of common.sb implicitly included here. ---
+
+; Required to load the libscreen_ai.so binary downloaded by the component
+; updater.
+(define screen-ai-component-path "SCREEN_AI_COMPONENT_PATH")
+(allow file-read* (subpath (param screen-ai-component-path)))
diff --git a/storage/browser/quota/quota_manager_impl.cc b/storage/browser/quota/quota_manager_impl.cc
index cb3bb99..10a41dd 100644
--- a/storage/browser/quota/quota_manager_impl.cc
+++ b/storage/browser/quota/quota_manager_impl.cc
@@ -201,14 +201,12 @@
         base::BindOnce(&UsageAndQuotaInfoGatherer::OnBarrierComplete,
                        weak_factory_.GetWeakPtr()));
 
-    const std::string& host = storage_key_.origin().host();
-
     manager()->GetQuotaSettings(
         base::BindOnce(&UsageAndQuotaInfoGatherer::OnGotSettings,
                        weak_factory_.GetWeakPtr(), barrier));
-    manager()->GetHostUsageWithBreakdown(
-        host, type_,
-        base::BindOnce(&UsageAndQuotaInfoGatherer::OnGotHostUsage,
+    manager()->GetStorageKeyUsageWithBreakdown(
+        storage_key_, type_,
+        base::BindOnce(&UsageAndQuotaInfoGatherer::OnGotStorageKeyUsage,
                        weak_factory_.GetWeakPtr(), barrier));
 
     // Determine host_quota differently depending on type.
@@ -216,15 +214,17 @@
       manager()->GetStorageCapacity(
           base::BindOnce(&UsageAndQuotaInfoGatherer::OnGotCapacity,
                          weak_factory_.GetWeakPtr(), barrier));
-      SetDesiredHostQuota(barrier, blink::mojom::QuotaStatusCode::kOk,
-                          kNoLimit);
+      SetDesiredStorageKeyQuota(barrier, blink::mojom::QuotaStatusCode::kOk,
+                                kNoLimit);
     } else if (type_ == StorageType::kSyncable) {
-      SetDesiredHostQuota(barrier, blink::mojom::QuotaStatusCode::kOk,
-                          kSyncableStorageDefaultHostQuota);
+      SetDesiredStorageKeyQuota(barrier, blink::mojom::QuotaStatusCode::kOk,
+                                kSyncableStorageDefaultHostQuota);
     } else if (type_ == StorageType::kPersistent) {
+      const std::string& host = storage_key_.origin().host();
       manager()->GetPersistentHostQuota(
-          host, base::BindOnce(&UsageAndQuotaInfoGatherer::SetDesiredHostQuota,
-                               weak_factory_.GetWeakPtr(), barrier));
+          host,
+          base::BindOnce(&UsageAndQuotaInfoGatherer::SetDesiredStorageKeyQuota,
+                         weak_factory_.GetWeakPtr(), barrier));
     } else {
       DCHECK_EQ(StorageType::kTemporary, type_);
       // For temporary storage,  OnGotSettings will set the host quota.
@@ -246,30 +246,33 @@
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     weak_factory_.InvalidateWeakPtrs();
 
-    int64_t host_quota = quota_override_size_.has_value()
-                             ? quota_override_size_.value()
-                             : desired_host_quota_;
+    int64_t storage_key_quota = quota_override_size_.has_value()
+                                    ? quota_override_size_.value()
+                                    : desired_storage_key_quota_;
 
     if (is_unlimited_) {
       int64_t temp_pool_free_space =
           std::max(static_cast<int64_t>(0),
                    available_space_ - settings_.must_remain_available);
-      // Constrain the desired |host_quota| to something that fits.
-      if (host_quota > temp_pool_free_space) {
-        host_quota = available_space_ + host_usage_;
+      // Constrain the desired |storage_key_quota| to something that fits.
+      if (storage_key_quota > temp_pool_free_space) {
+        storage_key_quota = available_space_ + storage_key_usage_;
       }
     }
 
-    std::move(callback_).Run(blink::mojom::QuotaStatusCode::kOk, host_usage_,
-                             host_quota, is_override_enabled_,
-                             std::move(host_usage_breakdown_));
+    std::move(callback_).Run(blink::mojom::QuotaStatusCode::kOk,
+                             storage_key_usage_, storage_key_quota,
+                             is_override_enabled_,
+                             std::move(storage_key_usage_breakdown_));
     if (type_ == StorageType::kTemporary && !is_incognito_ &&
         !is_unlimited_) {
-      UMA_HISTOGRAM_MBYTES("Quota.QuotaForOrigin", host_quota);
-      UMA_HISTOGRAM_MBYTES("Quota.UsageByOrigin", host_usage_);
-      if (host_quota > 0) {
-        UMA_HISTOGRAM_PERCENTAGE("Quota.PercentUsedByOrigin",
-            std::min(100, static_cast<int>((host_usage_ * 100) / host_quota)));
+      UMA_HISTOGRAM_MBYTES("Quota.QuotaForOrigin", storage_key_quota);
+      UMA_HISTOGRAM_MBYTES("Quota.UsageByOrigin", storage_key_usage_);
+      if (storage_key_quota > 0) {
+        UMA_HISTOGRAM_PERCENTAGE(
+            "Quota.PercentUsedByOrigin",
+            std::min(100, static_cast<int>((storage_key_usage_ * 100) /
+                                           storage_key_quota)));
       }
     }
     DeleteSoon();
@@ -289,11 +292,12 @@
     settings_ = settings;
     barrier_closure.Run();
     if (type_ == StorageType::kTemporary && !is_unlimited_) {
-      int64_t host_quota = is_session_only_
-                               ? settings.session_only_per_host_quota
-                               : settings.per_host_quota;
-      SetDesiredHostQuota(std::move(barrier_closure),
-                          blink::mojom::QuotaStatusCode::kOk, host_quota);
+      int64_t storage_key_quota = is_session_only_
+                                      ? settings.session_only_per_host_quota
+                                      : settings.per_host_quota;
+      SetDesiredStorageKeyQuota(std::move(barrier_closure),
+                                blink::mojom::QuotaStatusCode::kOk,
+                                storage_key_quota);
     }
   }
 
@@ -310,9 +314,9 @@
     std::move(barrier_closure).Run();
   }
 
-  void OnGotHostUsage(base::OnceClosure barrier_closure,
-                      int64_t usage,
-                      blink::mojom::UsageBreakdownPtr usage_breakdown) {
+  void OnGotStorageKeyUsage(base::OnceClosure barrier_closure,
+                            int64_t usage,
+                            blink::mojom::UsageBreakdownPtr usage_breakdown) {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     DCHECK(barrier_closure);
     DCHECK_GE(usage, -1);
@@ -324,19 +328,19 @@
     DCHECK_GE(usage_breakdown->serviceWorkerCache, 0);
     DCHECK_GE(usage_breakdown->webSql, 0);
 
-    host_usage_ = usage;
-    host_usage_breakdown_ = std::move(usage_breakdown);
+    storage_key_usage_ = usage;
+    storage_key_usage_breakdown_ = std::move(usage_breakdown);
     std::move(barrier_closure).Run();
   }
 
-  void SetDesiredHostQuota(base::OnceClosure barrier_closure,
-                           blink::mojom::QuotaStatusCode status,
-                           int64_t quota) {
+  void SetDesiredStorageKeyQuota(base::OnceClosure barrier_closure,
+                                 blink::mojom::QuotaStatusCode status,
+                                 int64_t quota) {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     DCHECK(barrier_closure);
     DCHECK_GE(quota, 0);
 
-    desired_host_quota_ = quota;
+    desired_storage_key_quota_ = quota;
     std::move(barrier_closure).Run();
   }
 
@@ -350,11 +354,11 @@
   const bool is_incognito_;
   int64_t available_space_ = 0;
   int64_t total_space_ = 0;
-  int64_t desired_host_quota_ = 0;
-  int64_t host_usage_ = 0;
+  int64_t desired_storage_key_quota_ = 0;
+  int64_t storage_key_usage_ = 0;
   const bool is_override_enabled_;
   absl::optional<int64_t> quota_override_size_;
-  blink::mojom::UsageBreakdownPtr host_usage_breakdown_;
+  blink::mojom::UsageBreakdownPtr storage_key_usage_breakdown_;
   QuotaSettings settings_;
   SEQUENCE_CHECKER(sequence_checker_);
 
@@ -1656,6 +1660,19 @@
   usage_tracker->GetHostUsageWithBreakdown(host, std::move(callback));
 }
 
+void QuotaManagerImpl::GetStorageKeyUsageWithBreakdown(
+    const blink::StorageKey& storage_key,
+    StorageType type,
+    UsageWithBreakdownCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  EnsureDatabaseOpened();
+
+  UsageTracker* usage_tracker = GetUsageTracker(type);
+  DCHECK(usage_tracker);
+  usage_tracker->GetStorageKeyUsageWithBreakdown(storage_key,
+                                                 std::move(callback));
+}
+
 void QuotaManagerImpl::GetBucketUsageWithBreakdown(
     const BucketLocator& bucket,
     UsageWithBreakdownCallback callback) {
diff --git a/storage/browser/quota/quota_manager_impl.h b/storage/browser/quota/quota_manager_impl.h
index a98d0f2..23c636b 100644
--- a/storage/browser/quota/quota_manager_impl.h
+++ b/storage/browser/quota/quota_manager_impl.h
@@ -387,6 +387,9 @@
   void GetHostUsageWithBreakdown(const std::string& host,
                                  blink::mojom::StorageType type,
                                  UsageWithBreakdownCallback callback);
+  void GetStorageKeyUsageWithBreakdown(const blink::StorageKey& storage_key,
+                                       blink::mojom::StorageType type,
+                                       UsageWithBreakdownCallback callback);
   void GetBucketUsageWithBreakdown(const BucketLocator& bucket,
                                    UsageWithBreakdownCallback callback);
 
diff --git a/storage/browser/quota/quota_manager_unittest.cc b/storage/browser/quota/quota_manager_unittest.cc
index 549a2b2..025c0f5 100644
--- a/storage/browser/quota/quota_manager_unittest.cc
+++ b/storage/browser/quota/quota_manager_unittest.cc
@@ -96,6 +96,11 @@
   int64_t usage;
 };
 
+struct UsageWithBreakdown {
+  int64_t usage;
+  blink::mojom::UsageBreakdownPtr breakdown;
+};
+
 // Returns a deterministic value for the amount of available disk space.
 int64_t GetAvailableDiskSpaceForTest() {
   return kAvailableSpaceForApp + kMustRemainAvailableForSystem;
@@ -360,6 +365,16 @@
     run_loop.Run();
   }
 
+  UsageWithBreakdown GetStorageKeyUsageWithBreakdown(
+      const blink::StorageKey& storage_key,
+      StorageType type) {
+    base::test::TestFuture<int64_t, blink::mojom::UsageBreakdownPtr> future;
+    quota_manager_impl_->GetStorageKeyUsageWithBreakdown(storage_key, type,
+                                                         future.GetCallback());
+    auto result = future.Take();
+    return {std::get<0>(result), std::move(std::get<1>(result))};
+  }
+
   void RunAdditionalUsageAndQuotaTask(const StorageKey& storage_key,
                                       StorageType type) {
     quota_manager_impl_->GetUsageAndQuota(
@@ -1046,6 +1061,13 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(0, usage());
 
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+             .usage);
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+             .usage);
+
   auto global_usage_result = GetGlobalUsage(kTemp);
   EXPECT_EQ(global_usage_result.usage, 0);
   EXPECT_EQ(global_usage_result.unlimited_usage, 0);
@@ -1073,6 +1095,13 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(0, usage());
 
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+             .usage);
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+             .usage);
+
   auto global_usage_result = GetGlobalUsage(kTemp);
   EXPECT_EQ(global_usage_result.usage, 0);
   EXPECT_EQ(global_usage_result.unlimited_usage, 0);
@@ -1103,7 +1132,11 @@
   auto result =
       GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com/"), kTemp);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20);
+  EXPECT_EQ(result.usage, 10);
+  result =
+      GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com:8080/"), kTemp);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 20);
 
   // The host's quota should be its full portion of the global quota
   // since there's plenty of diskspace.
@@ -1111,7 +1144,11 @@
 
   result = GetUsageAndQuotaForWebApps(ToStorageKey("http://bar.com/"), kTemp);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 5 + 7);
+  EXPECT_EQ(result.usage, 5);
+  EXPECT_EQ(result.quota, kPerHostQuota);
+  result = GetUsageAndQuotaForWebApps(ToStorageKey("https://bar.com/"), kTemp);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 7);
   EXPECT_EQ(result.quota, kPerHostQuota);
 }
 
@@ -1144,7 +1181,12 @@
   auto result =
       GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com/"), kTemp);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 1 + 128);
+  EXPECT_EQ(result.usage, 1);
+  EXPECT_EQ(result.quota, kPerHostQuota);
+
+  result = GetUsageAndQuotaForWebApps(ToStorageKey("https://foo.com/"), kTemp);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 128);
   EXPECT_EQ(result.quota, kPerHostQuota);
 
   result = GetUsageAndQuotaForWebApps(ToStorageKey("http://bar.com/"), kPerm);
@@ -1240,6 +1282,16 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(0, usage());
   EXPECT_TRUE(usage_breakdown_expected.Equals(usage_breakdown()));
+
+  auto usage =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp);
+  EXPECT_EQ(0, usage.usage);
+  EXPECT_TRUE(usage_breakdown_expected.Equals(*usage.breakdown));
+
+  usage =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm);
+  EXPECT_EQ(0, usage.usage);
+  EXPECT_TRUE(usage_breakdown_expected.Equals(*usage.breakdown));
 }
 
 TEST_F(QuotaManagerImplTest, GetUsageWithBreakdown_MultiStorageKeys) {
@@ -1259,14 +1311,24 @@
       blink::mojom::UsageBreakdown();
   GetUsageAndQuotaWithBreakdown(ToStorageKey("http://foo.com/"), kTemp);
   EXPECT_EQ(QuotaStatusCode::kOk, status());
-  EXPECT_EQ(10 + 20, usage());
-  usage_breakdown_expected.fileSystem = 10 + 20;
+  EXPECT_EQ(10, usage());
+  usage_breakdown_expected.fileSystem = 10;
+  EXPECT_TRUE(usage_breakdown_expected.Equals(usage_breakdown()));
+  GetUsageAndQuotaWithBreakdown(ToStorageKey("http://foo.com:8080/"), kTemp);
+  EXPECT_EQ(QuotaStatusCode::kOk, status());
+  EXPECT_EQ(20, usage());
+  usage_breakdown_expected.fileSystem = 20;
   EXPECT_TRUE(usage_breakdown_expected.Equals(usage_breakdown()));
 
   GetUsageAndQuotaWithBreakdown(ToStorageKey("http://bar.com/"), kTemp);
   EXPECT_EQ(QuotaStatusCode::kOk, status());
-  EXPECT_EQ(5 + 7, usage());
-  usage_breakdown_expected.fileSystem = 5 + 7;
+  EXPECT_EQ(5, usage());
+  usage_breakdown_expected.fileSystem = 5;
+  EXPECT_TRUE(usage_breakdown_expected.Equals(usage_breakdown()));
+  GetUsageAndQuotaWithBreakdown(ToStorageKey("https://bar.com/"), kTemp);
+  EXPECT_EQ(QuotaStatusCode::kOk, status());
+  EXPECT_EQ(7, usage());
+  usage_breakdown_expected.fileSystem = 7;
   EXPECT_TRUE(usage_breakdown_expected.Equals(usage_breakdown()));
 }
 
@@ -1294,8 +1356,14 @@
       blink::mojom::UsageBreakdown();
   GetUsageAndQuotaWithBreakdown(ToStorageKey("http://foo.com/"), kTemp);
   EXPECT_EQ(QuotaStatusCode::kOk, status());
-  EXPECT_EQ(1 + 128, usage());
+  EXPECT_EQ(1, usage());
   usage_breakdown_expected.fileSystem = 1;
+  usage_breakdown_expected.webSql = 0;
+  EXPECT_TRUE(usage_breakdown_expected.Equals(usage_breakdown()));
+  GetUsageAndQuotaWithBreakdown(ToStorageKey("https://foo.com/"), kTemp);
+  EXPECT_EQ(QuotaStatusCode::kOk, status());
+  EXPECT_EQ(128, usage());
+  usage_breakdown_expected.fileSystem = 0;
   usage_breakdown_expected.webSql = 128;
   EXPECT_TRUE(usage_breakdown_expected.Equals(usage_breakdown()));
 
@@ -1335,7 +1403,10 @@
   auto result =
       GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com/"), type);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20);
+  EXPECT_EQ(result.usage, 10);
+  result = GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com:1/"), type);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 20);
 
   client->ModifyStorageKeyAndNotify(ToStorageKey("http://foo.com/"), type, 30);
   client->ModifyStorageKeyAndNotify(ToStorageKey("http://foo.com:1/"), type,
@@ -1347,8 +1418,12 @@
 
   result = GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com/"), type);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20 + 30 - 5 + 1);
+  EXPECT_EQ(result.usage, 10 + 30);
   int foo_usage = result.usage;
+  result = GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com:1/"), type);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 20 - 5);
+  int foo1_usage = result.usage;
 
   client->ModifyStorageKeyAndNotify(ToStorageKey("http://bar.com/"), type, 40);
 
@@ -1360,7 +1435,7 @@
   EXPECT_EQ(result.usage, 40);
 
   auto global_usage_result = GetGlobalUsage(type);
-  EXPECT_EQ(global_usage_result.usage, foo_usage + 40);
+  EXPECT_EQ(global_usage_result.usage, foo_usage + foo1_usage + 40 + 1);
   EXPECT_EQ(global_usage_result.unlimited_usage, 0);
 }
 
@@ -1388,7 +1463,12 @@
   auto result =
       GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com/"), kTemp);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20);
+  EXPECT_EQ(result.usage, 10);
+  EXPECT_EQ(result.quota, kPerHostQuota);
+  result =
+      GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com:8080/"), kTemp);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 20);
   EXPECT_EQ(result.quota, kPerHostQuota);
 
   set_additional_callback_count(0);
@@ -1397,7 +1477,7 @@
   RunAdditionalUsageAndQuotaTask(ToStorageKey("http://bar.com/"), kTemp);
   task_environment_.RunUntilIdle();
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20);
+  EXPECT_EQ(result.usage, 10);
   EXPECT_EQ(result.quota, kPerHostQuota);
   EXPECT_EQ(2, additional_callback_count());
 }
@@ -1695,7 +1775,18 @@
   auto result =
       GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com/"), kPerm);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20 + 13 + 19);
+  EXPECT_EQ(result.usage, 10);
+  EXPECT_EQ(result.quota, 100);
+
+  result =
+      GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com:8080/"), kPerm);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 20);
+  EXPECT_EQ(result.quota, 100);
+
+  result = GetUsageAndQuotaForWebApps(ToStorageKey("https://foo.com/"), kPerm);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 13);
   EXPECT_EQ(result.quota, 100);
 }
 
@@ -1720,7 +1811,12 @@
   auto result =
       GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com/"), kPerm);
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20);
+  EXPECT_EQ(result.usage, 10);
+  EXPECT_EQ(result.quota, 100);
+  result =
+      GetUsageAndQuotaForWebApps(ToStorageKey("http://foo.com:8080/"), kPerm);
+  EXPECT_EQ(result.status, QuotaStatusCode::kOk);
+  EXPECT_EQ(result.usage, 20);
   EXPECT_EQ(result.quota, 100);
 
   set_additional_callback_count(0);
@@ -1729,7 +1825,7 @@
   RunAdditionalUsageAndQuotaTask(ToStorageKey("http://bar.com/"), kPerm);
   task_environment_.RunUntilIdle();
   EXPECT_EQ(result.status, QuotaStatusCode::kOk);
-  EXPECT_EQ(result.usage, 10 + 20);
+  EXPECT_EQ(result.usage, 10);
   EXPECT_EQ(additional_callback_count(), 2);
 }
 
@@ -1791,6 +1887,19 @@
 
   GetHostUsageWithBreakdown("buz.com", kTemp);
   EXPECT_EQ(usage(), 4000 + 50000);
+
+  EXPECT_EQ(
+      1, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+             .usage);
+  EXPECT_EQ(20, GetStorageKeyUsageWithBreakdown(
+                    ToStorageKey("http://foo.com:1/"), kPerm)
+                    .usage);
+  EXPECT_EQ(4000, GetStorageKeyUsageWithBreakdown(
+                      ToStorageKey("https://buz.com/"), kTemp)
+                      .usage);
+  EXPECT_EQ(50000, GetStorageKeyUsageWithBreakdown(
+                       ToStorageKey("http://buz.com/"), kTemp)
+                       .usage);
 }
 
 TEST_F(QuotaManagerImplTest, GetUsage_WithModification) {
@@ -1832,11 +1941,25 @@
   GetHostUsageWithBreakdown("buz.com", kTemp);
   EXPECT_EQ(usage(), 4000 + 50000);
 
+  EXPECT_EQ(4000, GetStorageKeyUsageWithBreakdown(
+                      ToStorageKey("https://buz.com/"), kTemp)
+                      .usage);
+  EXPECT_EQ(50000, GetStorageKeyUsageWithBreakdown(
+                       ToStorageKey("http://buz.com/"), kTemp)
+                       .usage);
+
   client->ModifyStorageKeyAndNotify(ToStorageKey("http://buz.com/"), kTemp,
                                     900000000);
 
   GetHostUsageWithBreakdown("buz.com", kTemp);
   EXPECT_EQ(usage(), 4000 + 50000 + 900000000);
+
+  EXPECT_EQ(4000, GetStorageKeyUsageWithBreakdown(
+                      ToStorageKey("https://buz.com/"), kTemp)
+                      .usage);
+  EXPECT_EQ(50000 + 900000000, GetStorageKeyUsageWithBreakdown(
+                                   ToStorageKey("http://buz.com/"), kTemp)
+                                   .usage);
 }
 
 TEST_F(QuotaManagerImplTest, GetUsage_WithBucketModification) {
@@ -1879,6 +2002,10 @@
   GetHostUsageWithBreakdown("bar.com", kTemp);
   EXPECT_EQ(usage(), 100);
 
+  EXPECT_EQ(100, GetStorageKeyUsageWithBreakdown(
+                     ToStorageKey("http://bar.com/"), kTemp)
+                     .usage);
+
   auto bar_temp_bucket =
       GetBucket(ToStorageKey("http://bar.com/"), "logs", kTemp);
   ASSERT_TRUE(bar_temp_bucket.ok());
@@ -1886,11 +2013,16 @@
 
   GetHostUsageWithBreakdown("bar.com", kTemp);
   EXPECT_EQ(usage(), 100 + 900000000);
+
+  EXPECT_EQ(100 + 900000000, GetStorageKeyUsageWithBreakdown(
+                                 ToStorageKey("http://bar.com/"), kTemp)
+                                 .usage);
 }
 
 TEST_F(QuotaManagerImplTest, GetUsage_WithDeleteBucket) {
   static const ClientBucketData kData[] = {
       {"http://foo.com/", kDefaultBucketName, kTemp, 1},
+      {"http://foo.com/", "secondbucket", kTemp, 10000},
       {"http://foo.com:1/", kDefaultBucketName, kTemp, 20},
       {"http://foo.com/", kDefaultBucketName, kPerm, 300},
       {"http://bar.com/", kDefaultBucketName, kTemp, 4000},
@@ -1908,6 +2040,13 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   int64_t predelete_host_pers = usage();
 
+  const int64_t predelete_storage_key_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_storage_key_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage;
+
   auto bucket =
       GetBucket(ToStorageKey("http://foo.com/"), kDefaultBucketName, kTemp);
   EXPECT_TRUE(bucket.ok());
@@ -1924,6 +2063,15 @@
 
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(predelete_host_pers, usage());
+
+  EXPECT_EQ(
+      predelete_storage_key_tmp - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_storage_key_pers,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage);
 }
 
 TEST_F(QuotaManagerImplTest, GetStorageCapacity) {
@@ -1935,7 +2083,8 @@
 TEST_F(QuotaManagerImplTest, EvictBucketData) {
   static const ClientBucketData kData1[] = {
       {"http://foo.com/", kDefaultBucketName, kTemp, 1},
-      {"http://foo.com:1/", "logs", kTemp, 20},
+      {"http://foo.com:1/", "logs", kTemp, 800000},
+      {"http://foo.com/", "logs", kTemp, 20},
       {"http://foo.com/", kDefaultBucketName, kPerm, 300},
       {"http://bar.com/", kDefaultBucketName, kTemp, 4000},
   };
@@ -1962,6 +2111,13 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   int64_t predelete_host_pers = usage();
 
+  const int64_t predelete_storage_key_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_storage_key_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage;
+
   for (const ClientBucketData& data : kData1) {
     quota_manager_impl()->NotifyStorageAccessed(ToStorageKey(data.origin),
                                                 data.type, base::Time::Now());
@@ -1993,24 +2149,41 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(predelete_host_pers, usage());
 
+  EXPECT_EQ(
+      predelete_storage_key_tmp - (1 + 50000),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_storage_key_pers,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage);
+
   // Non default bucket eviction.
-  bucket = GetBucket(ToStorageKey("http://foo.com:1"), "logs", kTemp);
+  bucket = GetBucket(ToStorageKey("http://foo.com"), "logs", kTemp);
   ASSERT_TRUE(bucket.ok());
 
   ASSERT_EQ(EvictBucketData(bucket->ToBucketLocator()), QuotaStatusCode::kOk);
 
-  bucket = GetBucket(ToStorageKey("http://foo.com:1"), "logs", kTemp);
+  bucket = GetBucket(ToStorageKey("http://foo.com"), "logs", kTemp);
   EXPECT_EQ(bucket.error(), QuotaError::kNotFound);
 
   global_usage_result = GetGlobalUsage(kTemp);
-  EXPECT_EQ(predelete_global_tmp - (1 + 20 + 50000 + 6000),
-            global_usage_result.usage);
+  EXPECT_EQ(predelete_global_tmp - (1 + 20 + 50000), global_usage_result.usage);
 
   GetHostUsageWithBreakdown("foo.com", kTemp);
-  EXPECT_EQ(predelete_host_tmp - (1 + 20 + 50000 + 6000), usage());
+  EXPECT_EQ(predelete_host_tmp - (1 + 20 + 50000), usage());
 
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(predelete_host_pers, usage());
+
+  EXPECT_EQ(
+      predelete_storage_key_tmp - (1 + 20 + 50000),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_storage_key_pers,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage);
 }
 
 TEST_F(QuotaManagerImplTest, EvictBucketDataHistogram) {
@@ -2081,6 +2254,16 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(300, usage());
 
+  EXPECT_EQ(
+      1, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+             .usage);
+  EXPECT_EQ(20, GetStorageKeyUsageWithBreakdown(
+                    ToStorageKey("http://foo.com:1/"), kTemp)
+                    .usage);
+  EXPECT_EQ(300, GetStorageKeyUsageWithBreakdown(
+                     ToStorageKey("http://foo.com/"), kPerm)
+                     .usage);
+
   for (const ClientBucketData& data : kData)
     NotifyStorageAccessed(ToStorageKey(data.origin), data.type);
   task_environment_.RunUntilIdle();
@@ -2124,6 +2307,16 @@
 
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(300, usage());
+
+  EXPECT_EQ(
+      1, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+             .usage);
+  EXPECT_EQ(0, GetStorageKeyUsageWithBreakdown(
+                   ToStorageKey("http://foo.com:1/"), kTemp)
+                   .usage);
+  EXPECT_EQ(300, GetStorageKeyUsageWithBreakdown(
+                     ToStorageKey("http://foo.com/"), kPerm)
+                     .usage);
 }
 
 TEST_F(QuotaManagerImplTest, GetEvictionRoundInfo) {
@@ -2172,6 +2365,13 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   int64_t predelete_host_pers = usage();
 
+  const int64_t predelete_storage_key_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_storage_key_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage;
+
   EXPECT_EQ(DeleteHostData(std::string(), kTemp), QuotaStatusCode::kOk);
 
   global_usage_result = GetGlobalUsage(kTemp);
@@ -2183,6 +2383,15 @@
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(predelete_host_pers, usage());
 
+  EXPECT_EQ(
+      predelete_storage_key_tmp,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_storage_key_pers,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage);
+
   EXPECT_EQ(DeleteHostData("foo.com", kTemp), QuotaStatusCode::kOk);
 
   global_usage_result = GetGlobalUsage(kTemp);
@@ -2193,6 +2402,15 @@
 
   GetHostUsageWithBreakdown("foo.com", kPerm);
   EXPECT_EQ(predelete_host_pers, usage());
+
+  EXPECT_EQ(
+      predelete_storage_key_tmp - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_storage_key_pers,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage);
 }
 
 TEST_F(QuotaManagerImplTest, DeleteHostDataMultiple) {
@@ -2231,6 +2449,25 @@
   GetHostUsageWithBreakdown("bar.com", kPerm);
   const int64_t predelete_bar_pers = usage();
 
+  const int64_t predelete_sk_foo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_sfoo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("https://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_foo1_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com:1/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_bar_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_foo_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage;
+  const int64_t predelete_sk_bar_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kPerm)
+          .usage;
+
   EXPECT_EQ(DeleteHostData("foo.com", kTemp), QuotaStatusCode::kOk);
   EXPECT_EQ(DeleteHostData("bar.com", kTemp), QuotaStatusCode::kOk);
   EXPECT_EQ(DeleteHostData("foo.com", kTemp), QuotaStatusCode::kOk);
@@ -2265,6 +2502,29 @@
 
   GetHostUsageWithBreakdown("bar.com", kPerm);
   EXPECT_EQ(predelete_bar_pers, usage());
+
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - (1 + 50000),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_sk_sfoo_tmp - (80),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("https://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_sk_foo1_tmp - (20 + 6000),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com:1/"), kTemp)
+          .usage);
+  EXPECT_EQ(
+      predelete_sk_bar_tmp - (4000 + 9),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(predelete_sk_foo_pers, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("http://foo.com/"), kPerm)
+                                       .usage);
+  EXPECT_EQ(predelete_sk_bar_pers, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("http://bar.com/"), kPerm)
+                                       .usage);
 }
 
 TEST_F(QuotaManagerImplTest, DeleteHostDataMultipleClientsDifferentTypes) {
@@ -2296,6 +2556,16 @@
   GetHostUsageWithBreakdown("bar.com", kTemp);
   const int64_t predelete_bar_tmp = usage();
 
+  const int64_t predelete_sk_foo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_foo1_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com:1/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_bar_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kTemp)
+          .usage;
+
   global_usage_result = GetGlobalUsage(kPerm);
   EXPECT_EQ(global_usage_result.usage, (1000 + 10 + 1));
 
@@ -2305,6 +2575,16 @@
   GetHostUsageWithBreakdown("bar.com", kPerm);
   EXPECT_EQ(1000, usage());
 
+  EXPECT_EQ(
+      1, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+             .usage);
+  EXPECT_EQ(10, GetStorageKeyUsageWithBreakdown(
+                    ToStorageKey("http://foo.com:1/"), kPerm)
+                    .usage);
+  EXPECT_EQ(1000, GetStorageKeyUsageWithBreakdown(
+                      ToStorageKey("http://bar.com/"), kPerm)
+                      .usage);
+
   EXPECT_EQ(DeleteHostData("foo.com", kPerm), QuotaStatusCode::kOk);
   EXPECT_EQ(DeleteHostData("bar.com", kPerm), QuotaStatusCode::kOk);
 
@@ -2332,6 +2612,16 @@
   GetHostUsageWithBreakdown("bar.com", kTemp);
   EXPECT_EQ(predelete_bar_tmp, usage());
 
+  EXPECT_EQ(predelete_sk_foo_tmp, GetStorageKeyUsageWithBreakdown(
+                                      ToStorageKey("http://foo.com/"), kTemp)
+                                      .usage);
+  EXPECT_EQ(predelete_sk_foo1_tmp, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("http://foo.com:1/"), kTemp)
+                                       .usage);
+  EXPECT_EQ(predelete_sk_bar_tmp, GetStorageKeyUsageWithBreakdown(
+                                      ToStorageKey("http://bar.com/"), kTemp)
+                                      .usage);
+
   global_usage_result = GetGlobalUsage(kPerm);
   EXPECT_EQ(global_usage_result.usage, 0);
 
@@ -2340,6 +2630,16 @@
 
   GetHostUsageWithBreakdown("bar.com", kPerm);
   EXPECT_EQ(0, usage());
+
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+             .usage);
+  EXPECT_EQ(0, GetStorageKeyUsageWithBreakdown(
+                   ToStorageKey("http://foo.com:1/"), kPerm)
+                   .usage);
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kPerm)
+             .usage);
 }
 
 TEST_F(QuotaManagerImplTest, DeleteBucketNoClients) {
@@ -2395,6 +2695,25 @@
   GetHostUsageWithBreakdown("bar.com", kPerm);
   const int64_t predelete_bar_pers = usage();
 
+  const int64_t predelete_sk_foo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_sfoo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("https://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_foo1_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com:1/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_bar_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_foo_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage;
+  const int64_t predelete_sk_bar_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kPerm)
+          .usage;
+
   for (const ClientBucketData& data : kData1) {
     quota_manager_impl()->NotifyStorageAccessed(ToStorageKey(data.origin),
                                                 data.type, base::Time::Now());
@@ -2436,6 +2755,27 @@
 
   GetHostUsageWithBreakdown("bar.com", kPerm);
   EXPECT_EQ(predelete_bar_pers, usage());
+
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - (1 + 50000),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(predelete_sk_sfoo_tmp, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("https://foo.com/"), kTemp)
+                                       .usage);
+  EXPECT_EQ(predelete_sk_foo1_tmp, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("http://foo.com:1/"), kTemp)
+                                       .usage);
+  EXPECT_EQ(
+      predelete_sk_bar_tmp - (4000 + 9),
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kTemp)
+          .usage);
+  EXPECT_EQ(predelete_sk_foo_pers, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("http://foo.com/"), kPerm)
+                                       .usage);
+  EXPECT_EQ(predelete_sk_bar_pers, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("http://bar.com/"), kPerm)
+                                       .usage);
 }
 
 TEST_F(QuotaManagerImplTest, DeleteBucketDataMultipleClientsDifferentTypes) {
@@ -2484,6 +2824,25 @@
   GetHostUsageWithBreakdown("bar.com", kPerm);
   const int64_t predelete_bar_pers = usage();
 
+  const int64_t predelete_sk_foo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_sfoo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("https://foo.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_foo1_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com:1/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_bar_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kTemp)
+          .usage;
+  const int64_t predelete_sk_foo_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage;
+  const int64_t predelete_sk_bar_pers =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kPerm)
+          .usage;
+
   for (const ClientBucketData& data : kData1) {
     quota_manager_impl()->NotifyStorageAccessed(ToStorageKey(data.origin),
                                                 data.type, base::Time::Now());
@@ -2519,6 +2878,19 @@
   GetHostUsageWithBreakdown("bar.com", kTemp);
   EXPECT_EQ(predelete_bar_tmp, usage());
 
+  EXPECT_EQ(predelete_sk_foo_tmp, GetStorageKeyUsageWithBreakdown(
+                                      ToStorageKey("http://foo.com/"), kTemp)
+                                      .usage);
+  EXPECT_EQ(predelete_sk_sfoo_tmp, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("https://foo.com/"), kTemp)
+                                       .usage);
+  EXPECT_EQ(predelete_sk_foo1_tmp, GetStorageKeyUsageWithBreakdown(
+                                       ToStorageKey("http://foo.com:1/"), kTemp)
+                                       .usage);
+  EXPECT_EQ(predelete_sk_bar_tmp, GetStorageKeyUsageWithBreakdown(
+                                      ToStorageKey("http://bar.com/"), kTemp)
+                                      .usage);
+
   global_usage_result = GetGlobalUsage(kPerm);
   EXPECT_EQ(global_usage_result.usage, predelete_global_pers - (1 + 1000));
 
@@ -2527,6 +2899,15 @@
 
   GetHostUsageWithBreakdown("bar.com", kPerm);
   EXPECT_EQ(predelete_bar_pers - 1000, usage());
+
+  EXPECT_EQ(
+      predelete_sk_foo_pers - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kPerm)
+          .usage);
+  EXPECT_EQ(
+      predelete_sk_bar_pers - 1000,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kPerm)
+          .usage);
 }
 
 TEST_F(QuotaManagerImplTest, FindAndDeleteBucketData) {
@@ -2564,6 +2945,13 @@
   GetHostUsageWithBreakdown("bar.com", kTemp);
   ASSERT_EQ((9 + 4000), usage());
 
+  ASSERT_EQ((1 + 50000), GetStorageKeyUsageWithBreakdown(
+                             ToStorageKey("http://foo.com/"), kTemp)
+                             .usage);
+  ASSERT_EQ((9 + 4000), GetStorageKeyUsageWithBreakdown(
+                            ToStorageKey("http://bar.com/"), kTemp)
+                            .usage);
+
   // Delete bucket for "http://foo.com/".
   EXPECT_EQ(FindAndDeleteBucketData(foo_bucket->storage_key, foo_bucket->name),
             QuotaStatusCode::kOk);
@@ -2578,6 +2966,9 @@
 
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(0, usage());
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+             .usage);
 
   // Delete bucket for "http://bar.com/".
   EXPECT_EQ(FindAndDeleteBucketData(bar_bucket->storage_key, bar_bucket->name),
@@ -2593,6 +2984,9 @@
 
   GetHostUsageWithBreakdown("bar.com", kTemp);
   EXPECT_EQ(0, usage());
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://bar.com/"), kTemp)
+             .usage);
 }
 
 TEST_F(QuotaManagerImplTest, FindAndDeleteBucketDataWithDBError) {
@@ -2607,6 +3001,9 @@
   // Check usage data before deletion.
   GetHostUsageWithBreakdown("foo.com", kTemp);
   ASSERT_EQ(123, usage());
+  ASSERT_EQ(123, GetStorageKeyUsageWithBreakdown(
+                     ToStorageKey("http://foo.com/"), kTemp)
+                     .usage);
 
   // Bucket lookup uses the `buckets_by_storage_key` index. So, we can corrupt
   // any other index, and SQLite will only detect the corruption when trying to
@@ -2628,6 +3025,9 @@
 
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(0, usage());
+  EXPECT_EQ(
+      0, GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+             .usage);
 }
 
 TEST_F(QuotaManagerImplTest, GetHostUsageForInternals) {
@@ -2944,25 +3344,44 @@
 
   GetHostUsageWithBreakdown("foo.com", kTemp);
   const int64_t predelete_foo_tmp = usage();
+  const int64_t predelete_sk_foo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
 
   DeleteBucketData(foo_bucket->ToBucketLocator(),
                    {QuotaClientType::kFileSystem});
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(predelete_foo_tmp - 1, usage());
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
 
   DeleteBucketData(foo_bucket->ToBucketLocator(),
                    {QuotaClientType::kServiceWorkerCache});
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - 2 - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
 
   DeleteBucketData(foo_bucket->ToBucketLocator(), {QuotaClientType::kDatabase});
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage());
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - 4 - 2 - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
 
   DeleteBucketData(foo_bucket->ToBucketLocator(),
                    {QuotaClientType::kIndexedDatabase});
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - 8 - 4 - 2 - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
 }
 
 TEST_F(QuotaManagerImplTest, DeleteMultipleClientTypesSingleBucket) {
@@ -2998,16 +3417,30 @@
   GetHostUsageWithBreakdown("foo.com", kTemp);
   const int64_t predelete_foo_tmp = usage();
 
+  const int64_t predelete_sk_foo_tmp =
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage;
+
   DeleteBucketData(foo_bucket->ToBucketLocator(),
                    {QuotaClientType::kFileSystem, QuotaClientType::kDatabase});
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(predelete_foo_tmp - 4 - 1, usage());
 
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - 4 - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
+
   DeleteBucketData(foo_bucket->ToBucketLocator(),
                    {QuotaClientType::kServiceWorkerCache,
                     QuotaClientType::kIndexedDatabase});
   GetHostUsageWithBreakdown("foo.com", kTemp);
   EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
+
+  EXPECT_EQ(
+      predelete_sk_foo_tmp - 8 - 4 - 2 - 1,
+      GetStorageKeyUsageWithBreakdown(ToStorageKey("http://foo.com/"), kTemp)
+          .usage);
 }
 
 TEST_F(QuotaManagerImplTest, GetUsageAndQuota_Incognito) {
diff --git a/testing/buildbot/OWNERS b/testing/buildbot/OWNERS
index e38644c0..7024c91 100644
--- a/testing/buildbot/OWNERS
+++ b/testing/buildbot/OWNERS
@@ -6,7 +6,6 @@
 file://infra/OWNERS
 
 jam@chromium.org
-jochen@chromium.org
 sky@chromium.org
 
 # For Weblayer skew tests related reviews
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 38785e0..9367e2321 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -8243,12 +8243,12 @@
           "--test-runner-outdir",
           ".",
           "--client-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--client-version=102",
+          "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android30.textpb"
@@ -8258,11 +8258,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_client_from_102"
+            "weblayer_skew_tests with_client_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_client_from_102",
+        "name": "weblayer_skew_tests with_client_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -8272,8 +8272,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -8319,7 +8319,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_client_from_102"
+        "variant_id": "with_client_from_103"
       },
       {
         "args": [
@@ -8755,10 +8755,10 @@
           "--client-outdir",
           ".",
           "--implementation-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--impl-version=102",
+          "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android30.textpb"
@@ -8768,11 +8768,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_impl_from_102"
+            "weblayer_skew_tests with_impl_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_impl_from_102",
+        "name": "weblayer_skew_tests with_impl_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -8782,8 +8782,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -8829,7 +8829,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_impl_from_102"
+        "variant_id": "with_impl_from_103"
       },
       {
         "args": [
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index ecbad5c..60768ab13 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -46217,12 +46217,12 @@
           "--test-runner-outdir",
           ".",
           "--client-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--client-version=102",
+          "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android29.textpb"
@@ -46232,11 +46232,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_client_from_102"
+            "weblayer_skew_tests with_client_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_client_from_102",
+        "name": "weblayer_skew_tests with_client_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -46246,8 +46246,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -46293,7 +46293,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_client_from_102"
+        "variant_id": "with_client_from_103"
       },
       {
         "args": [
@@ -46729,10 +46729,10 @@
           "--client-outdir",
           ".",
           "--implementation-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--impl-version=102",
+          "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android29.textpb"
@@ -46742,11 +46742,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_impl_from_102"
+            "weblayer_skew_tests with_impl_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_impl_from_102",
+        "name": "weblayer_skew_tests with_impl_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -46756,8 +46756,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -46803,7 +46803,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_impl_from_102"
+        "variant_id": "with_impl_from_103"
       },
       {
         "args": [
@@ -47241,12 +47241,12 @@
           "--test-runner-outdir",
           ".",
           "--client-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--client-version=102",
+          "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android23.textpb"
@@ -47256,11 +47256,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests_with_chrome with_client_from_102"
+            "weblayer_skew_tests_with_chrome with_client_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests_with_chrome with_client_from_102",
+        "name": "weblayer_skew_tests_with_chrome with_client_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -47270,8 +47270,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -47317,7 +47317,7 @@
         },
         "test": "weblayer_skew_tests_with_chrome",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/",
-        "variant_id": "with_client_from_102"
+        "variant_id": "with_client_from_103"
       },
       {
         "args": [
@@ -47753,10 +47753,10 @@
           "--client-outdir",
           ".",
           "--implementation-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--impl-version=102",
+          "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android23.textpb"
@@ -47766,11 +47766,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests_with_chrome with_impl_from_102"
+            "weblayer_skew_tests_with_chrome with_impl_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests_with_chrome with_impl_from_102",
+        "name": "weblayer_skew_tests_with_chrome with_impl_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -47780,8 +47780,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -47827,7 +47827,7 @@
         },
         "test": "weblayer_skew_tests_with_chrome",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/",
-        "variant_id": "with_impl_from_102"
+        "variant_id": "with_impl_from_103"
       },
       {
         "args": [
@@ -48333,12 +48333,12 @@
           "--test-runner-outdir",
           ".",
           "--client-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--client-version=102",
+          "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android27.textpb"
@@ -48348,11 +48348,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_client_from_102"
+            "weblayer_skew_tests with_client_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_client_from_102",
+        "name": "weblayer_skew_tests with_client_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -48362,8 +48362,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -48409,7 +48409,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_client_from_102"
+        "variant_id": "with_client_from_103"
       },
       {
         "args": [
@@ -48845,10 +48845,10 @@
           "--client-outdir",
           ".",
           "--implementation-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--impl-version=102",
+          "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android27.textpb"
@@ -48858,11 +48858,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_impl_from_102"
+            "weblayer_skew_tests with_impl_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_impl_from_102",
+        "name": "weblayer_skew_tests with_impl_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -48872,8 +48872,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -48919,7 +48919,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_impl_from_102"
+        "variant_id": "with_impl_from_103"
       },
       {
         "args": [
@@ -49425,12 +49425,12 @@
           "--test-runner-outdir",
           ".",
           "--client-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--client-version=102",
+          "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android28.textpb"
@@ -49440,11 +49440,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_client_from_102"
+            "weblayer_skew_tests with_client_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_client_from_102",
+        "name": "weblayer_skew_tests with_client_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -49454,8 +49454,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -49501,7 +49501,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_client_from_102"
+        "variant_id": "with_client_from_103"
       },
       {
         "args": [
@@ -49937,10 +49937,10 @@
           "--client-outdir",
           ".",
           "--implementation-outdir",
-          "../../weblayer_instrumentation_test_M102/out/Release",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--impl-version=102",
+          "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android28.textpb"
@@ -49950,11 +49950,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_skew_tests with_impl_from_102"
+            "weblayer_skew_tests with_impl_from_103"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_skew_tests with_impl_from_102",
+        "name": "weblayer_skew_tests with_impl_from_103",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -49964,8 +49964,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/weblayer-x86",
-              "location": "weblayer_instrumentation_test_M102",
-              "revision": "version:102.0.5005.52"
+              "location": "weblayer_instrumentation_test_M103",
+              "revision": "version:103.0.5060.3"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -50011,7 +50011,7 @@
         },
         "test": "weblayer_skew_tests",
         "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/",
-        "variant_id": "with_impl_from_102"
+        "variant_id": "with_impl_from_103"
       },
       {
         "args": [
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 1d1f7b71..b784c5b1 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5759,6 +5759,134 @@
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
       },
       {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.59/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 101.0.4951.59",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v101.0.4951.59",
+              "revision": "version:101.0.4951.59"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 101.0.4951.59"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.5005.22/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 102.0.5005.22",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v102.0.5005.22",
+              "revision": "version:102.0.5005.22"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 102.0.5005.22"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5045.0/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5045.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5045.0",
+              "revision": "version:103.0.5045.0"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5045.0"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5059.0/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5059.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5059.0",
+              "revision": "version:103.0.5059.0"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5059.0"
+      },
+      {
         "isolate_profile_data": true,
         "merge": {
           "args": [],
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 37b8afc2..62ff6b8 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -87812,6 +87812,114 @@
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
       },
       {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.59/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 101.0.4951.59",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v101.0.4951.59",
+              "revision": "version:101.0.4951.59"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 101.0.4951.59"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.5005.22/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 102.0.5005.22",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v102.0.5005.22",
+              "revision": "version:102.0.5005.22"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 102.0.5005.22"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5045.0/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5045.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5045.0",
+              "revision": "version:103.0.5045.0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5045.0"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5059.0/test_ash_chrome"
+        ],
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5059.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5059.0",
+              "revision": "version:103.0.5059.0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5059.0"
+      },
+      {
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -89304,6 +89412,134 @@
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
       },
       {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.59/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 101.0.4951.59",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v101.0.4951.59",
+              "revision": "version:101.0.4951.59"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 101.0.4951.59"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.5005.22/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 102.0.5005.22",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v102.0.5005.22",
+              "revision": "version:102.0.5005.22"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 102.0.5005.22"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5045.0/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5045.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5045.0",
+              "revision": "version:103.0.5045.0"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5045.0"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5059.0/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5059.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5059.0",
+              "revision": "version:103.0.5059.0"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5059.0"
+      },
+      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -91009,6 +91245,134 @@
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
       },
       {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v101.0.4951.59/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 101.0.4951.59",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v101.0.4951.59",
+              "revision": "version:101.0.4951.59"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 101.0.4951.59"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v102.0.5005.22/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 102.0.5005.22",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v102.0.5005.22",
+              "revision": "version:102.0.5005.22"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 102.0.5005.22"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5045.0/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5045.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5045.0",
+              "revision": "version:103.0.5045.0"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5045.0"
+      },
+      {
+        "args": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v103.0.5059.0/test_ash_chrome"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "interactive_ui_tests Lacros version skew testing ash 103.0.5059.0",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
+              "location": "lacros_version_skew_tests_v103.0.5059.0",
+              "revision": "version:103.0.5059.0"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-18.04",
+              "ssd": "0"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 3
+        },
+        "test": "interactive_ui_tests",
+        "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
+        "variant_id": "Lacros version skew testing ash 103.0.5059.0"
+      },
+      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index 3ebb8c8..decf63f 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -10968,6 +10968,38 @@
       },
       {
         "args": [
+          "webcodecs",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webcodecs_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "display_attached": "1",
+              "gpu": "8086:3e9b",
+              "os": "Mac-11.5.2"
+            }
+          ],
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
+      },
+      {
+        "args": [
           "webgl_conformance",
           "--show-stdout",
           "--browser=release",
@@ -12604,6 +12636,39 @@
       },
       {
         "args": [
+          "webcodecs",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webcodecs_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "cpu": "arm64",
+              "display_attached": "1",
+              "mac_model": "Macmini9,1",
+              "os": "Mac-11",
+              "pool": "chromium.tests"
+            }
+          ],
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
+      },
+      {
+        "args": [
           "webgl_conformance",
           "--show-stdout",
           "--browser=release",
@@ -13658,6 +13723,38 @@
       },
       {
         "args": [
+          "webcodecs",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webcodecs_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "display_attached": "1",
+              "gpu": "8086:3e9b",
+              "os": "Mac-11.5.2"
+            }
+          ],
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
+      },
+      {
+        "args": [
           "webgl_conformance",
           "--show-stdout",
           "--browser=release",
@@ -17246,6 +17343,40 @@
       },
       {
         "args": [
+          "webcodecs",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webcodecs_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "display_attached": "1",
+              "gpu": "10de:0fe9",
+              "hidpi": "1",
+              "os": "Mac-10.14.6",
+              "pool": "chromium.tests.gpu"
+            }
+          ],
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
+      },
+      {
+        "args": [
           "webgl_conformance",
           "--show-stdout",
           "--browser=release",
diff --git a/testing/buildbot/chromium.json b/testing/buildbot/chromium.json
index fe74b4cd..6faf5fa 100644
--- a/testing/buildbot/chromium.json
+++ b/testing/buildbot/chromium.json
@@ -21,6 +21,12 @@
       "all"
     ]
   },
+  "lacros-arm-archive-rel": {
+    "additional_compile_targets": [
+      "chrome",
+      "lacros_version_metadata"
+    ]
+  },
   "lacros64-archive-rel": {
     "additional_compile_targets": [
       "chrome",
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index cd9595f..10f9293 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -5641,7 +5641,7 @@
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 72
+          "shards": 60
         },
         "test": "browser_tests",
         "test_id_prefix": "ninja://chrome/test:browser_tests/"
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index 6745b37..58a4c7f 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -289,6 +289,55 @@
       }
     ]
   },
+  "android-go-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=android-chrome",
+          "--upload-results",
+          "--test-shard-map-filename=android-go-perf-pgo_map.json"
+        ],
+        "isolate_name": "performance_test_suite_android_clank_chrome",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite_android_clank_chrome"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "device_os": "OMB1.180119.001",
+              "device_os_flavor": "google",
+              "device_type": "gobo",
+              "os": "Android",
+              "pool": "chrome.tests.perf"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 19
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "android-go-processor-perf": {
     "merge": {
       "args": [
@@ -400,6 +449,55 @@
       }
     ]
   },
+  "android-pixel2-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=android-chrome-64-bundle",
+          "--upload-results",
+          "--test-shard-map-filename=android-pixel2-perf-pgo_map.json"
+        ],
+        "isolate_name": "performance_test_suite_android_clank_monochrome_64_32_bundle",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite_android_clank_monochrome_64_32_bundle",
+        "override_compile_targets": [
+          "performance_test_suite_android_clank_monochrome_64_32_bundle"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "device_os": "OPM1.171019.021",
+              "device_os_flavor": "google",
+              "device_type": "walleye",
+              "os": "Android",
+              "pool": "chrome.tests.perf"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 28
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "android-pixel2-processor-perf": {
     "merge": {
       "args": [
@@ -510,6 +608,55 @@
       }
     ]
   },
+  "android-pixel2_webview-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=android-webview-google",
+          "--upload-results",
+          "--test-shard-map-filename=android-pixel2_webview-perf-pgo_map.json"
+        ],
+        "isolate_name": "performance_webview_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_webview_test_suite",
+        "override_compile_targets": [
+          "performance_webview_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "device_os": "OPM1.171019.021",
+              "device_os_flavor": "google",
+              "device_type": "walleye",
+              "os": "Android",
+              "pool": "chrome.tests.perf-webview"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 21
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "android-pixel2_webview-processor-perf": {
     "merge": {
       "args": [
@@ -567,6 +714,55 @@
       }
     ]
   },
+  "android-pixel4-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=android-trichrome-bundle",
+          "--upload-results",
+          "--test-shard-map-filename=android-pixel4-perf-pgo_map.json"
+        ],
+        "isolate_name": "performance_test_suite_android_clank_trichrome_bundle",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite_android_clank_trichrome_bundle",
+        "override_compile_targets": [
+          "performance_test_suite_android_clank_trichrome_bundle"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "device_os": "RP1A.201105.002",
+              "device_os_flavor": "google",
+              "device_type": "flame",
+              "os": "Android",
+              "pool": "chrome.tests.perf"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 28
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "android-pixel4_weblayer-perf": {
     "isolated_scripts": [
       {
@@ -616,6 +812,55 @@
       }
     ]
   },
+  "android-pixel4_weblayer-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=android-weblayer-trichrome-google-bundle",
+          "--upload-results",
+          "--test-shard-map-filename=android-pixel4_weblayer-perf-pgo_map.json"
+        ],
+        "isolate_name": "performance_weblayer_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_weblayer_test_suite",
+        "override_compile_targets": [
+          "performance_weblayer_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "device_os": "RP1A.201105.002",
+              "device_os_flavor": "google",
+              "device_type": "flame",
+              "os": "Android",
+              "pool": "chrome.tests.perf-weblayer"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 4
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "android-pixel4_webview-perf": {
     "isolated_scripts": [
       {
@@ -715,6 +960,56 @@
       }
     ]
   },
+  "android-pixel4a_power-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=android-chrome",
+          "--upload-results",
+          "--test-shard-map-filename=android-pixel4a_power-perf-pgo_map.json",
+          "--experimental-tbmv3-metrics"
+        ],
+        "isolate_name": "performance_test_suite_android_clank_chrome",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite_android_clank_chrome",
+        "override_compile_targets": [
+          "performance_test_suite_android_clank_chrome"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "device_os": "RQ1D.201205.012",
+              "device_os_flavor": "google",
+              "device_type": "sunfish",
+              "os": "Android",
+              "pool": "chrome.tests.pinpoint"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 12
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "android_arm64-builder-perf": {
     "additional_compile_targets": [
       "microdump_stackwalk",
@@ -1243,6 +1538,55 @@
       }
     ]
   },
+  "linux-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=release",
+          "--upload-results",
+          "--test-shard-map-filename=linux-perf-pgo_map.json",
+          "--assert-gpu-compositing"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:1cb3-440.100",
+              "os": "Ubuntu-18.04",
+              "pool": "chrome.tests.perf",
+              "synthetic_product_name": "PowerEdge R230 (Dell Inc.)"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 26
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "linux-perf-rel": {
     "isolated_scripts": [
       {
@@ -1438,6 +1782,56 @@
       }
     ]
   },
+  "mac-laptop_high_end-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=release",
+          "--upload-results",
+          "--test-shard-map-filename=mac-laptop_high_end-perf-pgo_map.json",
+          "--assert-gpu-compositing"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "gpu": "1002:6821-4.0.20-3.2.8",
+              "os": "Mac-11.6.1",
+              "pool": "chrome.tests.perf",
+              "synthetic_product_name": "MacBookPro11,5_x86-64-i7-4870HQ_AMD Radeon R8 M370X 4.0.20 [3.2.8]_Intel Haswell Iris Pro Graphics 5200 4.0.20 [3.2.8]_16384_APPLE SSD SM0512G"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 26
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "mac-laptop_high_end-processor-perf": {
     "merge": {
       "args": [
@@ -1500,6 +1894,56 @@
       }
     ]
   },
+  "mac-laptop_low_end-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=release",
+          "--upload-results",
+          "--test-shard-map-filename=mac-laptop_low_end-perf-pgo_map.json",
+          "--assert-gpu-compositing"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "gpu": "8086:1626",
+              "os": "Mac-10.12.6",
+              "pool": "chrome.tests.perf",
+              "synthetic_product_name": "MacBookAir7,2_x86-64-i5-5350U_Intel Broadwell HD Graphics 6000_8192_APPLE SSD SM0128G"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 26
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "mac-laptop_low_end-processor-perf": {
     "merge": {
       "args": [
@@ -1557,6 +2001,55 @@
       }
     ]
   },
+  "mac-m1_mini_2020-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=release",
+          "--upload-results",
+          "--test-shard-map-filename=mac-m1_mini_2020-perf-pgo_map.json",
+          "--assert-gpu-compositing"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "cpu": "arm",
+              "mac_model": "Macmini9,1",
+              "os": "Mac",
+              "pool": "chrome.tests.perf"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 26
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "win-10-perf": {
     "isolated_scripts": [
       {
@@ -1610,6 +2103,55 @@
       }
     ]
   },
+  "win-10-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=release_x64",
+          "--upload-results",
+          "--test-shard-map-filename=win-10-perf-pgo_map.json",
+          "--assert-gpu-compositing"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-27.20.100.8681",
+              "os": "Windows-10-18363.476",
+              "pool": "chrome.tests.perf",
+              "synthetic_product_name": "OptiPlex 7050 (Dell Inc.)"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 26
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "win-10-processor-perf": {
     "merge": {
       "args": [
@@ -1667,6 +2209,55 @@
       }
     ]
   },
+  "win-10_amd_laptop-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=release_x64",
+          "--upload-results",
+          "--test-shard-map-filename=win-10_amd_laptop-perf-pgo_map.json",
+          "--assert-gpu-compositing"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:1638-30.0.13033.1000",
+              "os": "Windows-10-19043.1052",
+              "pool": "chrome.tests.perf",
+              "synthetic_product_name": "OMEN by HP Laptop 16-c0xxx [ ] (HP)"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 5
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "win-10_laptop_low_end-perf": {
     "isolated_scripts": [
       {
@@ -1719,6 +2310,54 @@
       }
     ]
   },
+  "win-10_laptop_low_end-perf-pgo": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "-v",
+          "--browser=release_x64",
+          "--upload-results",
+          "--test-shard-map-filename=win-10_laptop_low_end-perf-pgo_map.json",
+          "--assert-gpu-compositing"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "performance_test_suite",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:1616-20.19.15.5070",
+              "os": "Windows-10-18363.476",
+              "pool": "chrome.tests.perf"
+            }
+          ],
+          "expiration": 7200,
+          "hard_timeout": 21600,
+          "ignore_task_failure": false,
+          "io_timeout": 21600,
+          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 40
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "requires_simultaneous_shard_dispatch": true,
+          "script": "//testing/trigger_scripts/perf_device_trigger.py"
+        }
+      }
+    ]
+  },
   "win-10_laptop_low_end-processor-perf": {
     "merge": {
       "args": [
diff --git a/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter
index c431cb3d..9d9a41a2 100644
--- a/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter
+++ b/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter
@@ -48,15 +48,6 @@
 # crbug.com/1090942
 -org.chromium.chrome.browser.autofill.settings.AutofillPaymentMethodsFragmentTest.*
 
-# crbug.com/1092987
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testIncognitoToggle_thumbnailFetchCount
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testThumbnailFetchingResult_defaultAspectRatio
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testRecycling_aspectRatioPoint75
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testGridToTabToCurrentLiveDetached
-
-# crbug.com/1096295
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testActivityCanBeGarbageCollectedAfterFinished
-
 # crbug.com/1112812
 -org.chromium.chrome.browser.autofill_assistant.AutofillAssistantAutostartTest.testAutostart
 -org.chromium.chrome.browser.autofill.AutofillUpstreamTest.testSaveCardInfoBarWithEmptyYear
@@ -64,15 +55,6 @@
 # crbug.com/1061178
 -org.chromium.chrome.browser.tasks.tab_management.TabGridDialogTest.testSwipeToDismiss_Dialog
 
-# crbug.com/1077552
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testRenderGrid_Incognito
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testRenderGrid_10WebTabs
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testRenderGrid_10WebTabs_InitialScroll
-
-# crbug.com/1130621
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testShowOnlyOneTabSuggestionMessageCard_withSoftCleanup
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testShowOnlyOneTabSuggestionMessageCard_withHardCleanup
-
 # crbug.com/1146477
 -org.chromium.chrome.browser.autofill.AutofillUpstreamTest.testSaveCardInfoBarWithEmptyMonth
 -org.chromium.chrome.browser.autofill.AutofillUpstreamTest.testSaveCardInfoBarWithEmptyMonthAndYear
diff --git a/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter
index 0f75c2c..a2e9b9b2 100644
--- a/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter
+++ b/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter
@@ -49,7 +49,6 @@
 
 # crbug.com/1061178
 -org.chromium.chrome.browser.tasks.tab_management.TabGridDialogTest.testSwipeToDismiss_Dialog
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testSwipeToDismiss_GTS
 
 # crbug.com/1061198
 -org.chromium.chrome.browser.password_manager.settings.PasswordSettingsTest.testExportMenuDisabled
@@ -98,18 +97,9 @@
 # crbug.com/1063981
 -org.chromium.chrome.browser.toolbar.IdentityDiscControllerTest.testIdentityDiscWithSignInState
 
-# crbug.com/1063984
--org.chromium.chrome.browser.tasks.ReturnToChromeTest.testInitialScrollIndex
-
 # crbug.com/1063987
 -org.chromium.chrome.browser.tasks.tab_management.TabListContainerViewBinderTest.testHidesWithAnimation
 
-# crbug.com/1063991
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testIncognitoToggle_tabCount
-
-# crbug.com/1064058
--org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testRecycling_aspectRatioPoint75
-
 # crbug.com/1067673
 -org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerViewTest.testDismissArticleWithContextMenu
 
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 8571732..52b01ddf 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -597,12 +597,13 @@
         ],
       },
       'Linux ChromiumOS MSan Tests': {
-        # These are very slow on the Chrome OS MSAN trybot for some reason.
+        # These are very slow on the Chrome OS MSAN trybot, most likely because browser_tests on cros has ~40% more tests. Also, these tests
+        # run on ash, which means every test starts and shuts down ash, which most likely explains why it takes longer than on other platforms.
         # crbug.com/865455
         'swarming': {
-          # This should be reverted to 48 before end of April 2022, when the slowdown is fixed.
+          # Fully MSAN instrumented ANGLE + SwiftShader Vulkan libraries offer more thorough coverage, at the cost of further slowdowns
           # crbug.com/1313907
-          'shards': 72,
+          'shards': 60,
         },
         'args': [
           '--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.msan.browser_tests.oobe_negative.filter',
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index b1d0378..4d9b523 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -4246,7 +4246,9 @@
     },
 
     'linux_lacros_chrome_interactive_ui_tests_version_skew': {
-      'interactive_ui_tests': {
+      'interactive_ui_tests version skew': {
+        'name': 'interactive_ui_tests',
+        'test': 'interactive_ui_tests',
         'args': [
           '--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter',
         ],
@@ -6540,6 +6542,7 @@
       'gpu_mediapipe_validating_telemetry_tests',
       'gpu_passthrough_telemetry_tests',
       'gpu_validating_telemetry_tests',
+      'gpu_webcodecs_telemetry_test',
       'gpu_webgl2_conformance_gl_passthrough_telemetry_tests',
       'gpu_webgl2_conformance_metal_passthrough_telemetry_tests',
       'gpu_webgl2_conformance_validating_telemetry_tests',
@@ -7531,6 +7534,14 @@
           'LACROS_VERSION_SKEW_STABLE',
         ]
       },
+      'linux_lacros_chrome_interactive_ui_tests_version_skew': {
+        'variants': [
+          'LACROS_VERSION_SKEW_CANARY',
+          'LACROS_VERSION_SKEW_DEV',
+          'LACROS_VERSION_SKEW_BETA',
+          'LACROS_VERSION_SKEW_STABLE',
+        ]
+      },
     },
 
     'linux_lacros_version_skew_tests': {
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 33644610..2f22d7a 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -468,18 +468,18 @@
       '--client-outdir',
       '.',
       '--implementation-outdir',
-      '../../weblayer_instrumentation_test_M102/out/Release',
+      '../../weblayer_instrumentation_test_M103/out/Release',
       '--test-expectations',
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--impl-version=102',
+      '--impl-version=103',
     ],
-    'identifier': 'with_impl_from_102',
+    'identifier': 'with_impl_from_103',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
-          'location': 'weblayer_instrumentation_test_M102',
-          'revision': 'version:102.0.5005.52',
+          'location': 'weblayer_instrumentation_test_M103',
+          'revision': 'version:103.0.5060.3',
         }
       ],
     },
@@ -612,18 +612,18 @@
       '--client-outdir',
       '.',
       '--implementation-outdir',
-      '../../weblayer_instrumentation_test_M102/out/Release',
+      '../../weblayer_instrumentation_test_M103/out/Release',
       '--test-expectations',
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--impl-version=102',
+      '--impl-version=103',
     ],
-    'identifier': 'with_impl_from_102',
+    'identifier': 'with_impl_from_103',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
-          'location': 'weblayer_instrumentation_test_M102',
-          'revision': 'version:102.0.5005.52',
+          'location': 'weblayer_instrumentation_test_M103',
+          'revision': 'version:103.0.5060.3',
         }
       ],
     },
@@ -754,20 +754,20 @@
       '--test-runner-outdir',
       '.',
       '--client-outdir',
-      '../../weblayer_instrumentation_test_M102/out/Release',
+      '../../weblayer_instrumentation_test_M103/out/Release',
       '--implementation-outdir',
       '.',
       '--test-expectations',
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--client-version=102',
+      '--client-version=103',
     ],
-    'identifier': 'with_client_from_102',
+    'identifier': 'with_client_from_103',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
-          'location': 'weblayer_instrumentation_test_M102',
-          'revision': 'version:102.0.5005.52',
+          'location': 'weblayer_instrumentation_test_M103',
+          'revision': 'version:103.0.5060.3',
         }
       ],
     },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 8ca535715..67209d1 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -385,6 +385,13 @@
           'all',
         ],
       },
+      'lacros-arm-archive-rel': {
+        'additional_compile_targets': [
+          'chrome',
+          'lacros_version_metadata',
+        ],
+        'os_type': 'chromeos',
+      },
       'lacros64-archive-rel': {
         'additional_compile_targets': [
           'chrome',
diff --git a/testing/variations/PRESUBMIT.py b/testing/variations/PRESUBMIT.py
index fe53483..8c59f01 100644
--- a/testing/variations/PRESUBMIT.py
+++ b/testing/variations/PRESUBMIT.py
@@ -236,6 +236,92 @@
     ]
   return []
 
+def _GetStudyConfigFeatures(study_config):
+  """Gets the set of features overridden in a study config."""
+  features = set()
+  for experiment in study_config.get("experiments", []):
+    features.update(experiment.get("enable_features", []))
+    features.update(experiment.get("disable_features", []))
+  return features
+
+def _GetDuplicatedFeatures(study1, study2):
+  """Gets the set of features that are overridden in two overlapping studies."""
+  duplicated_features = set()
+  for study_config1 in study1:
+    features = _GetStudyConfigFeatures(study_config1)
+    platforms = set(study_config1.get("platforms", []))
+    for study_config2 in study2:
+      # If the study configs do not specify any common platform, they do not
+      # overlap, so we can skip them.
+      if platforms.isdisjoint(set(study_config2.get("platforms", []))):
+        continue
+
+      common_features = features & _GetStudyConfigFeatures(study_config2)
+      duplicated_features.update(common_features)
+
+  return duplicated_features
+
+def CheckDuplicatedFeatures(new_json_data, old_json_data, message_type):
+  """Validates that features are not specified in multiple studies.
+
+  Note that a feature may be specified in different studies that do not overlap.
+  For example, if they specify different platforms. In such a case, this will
+  not give a warning/error. However, it is possible that this incorrectly
+  gives an error, as it is possible for studies to have complex filters (e.g.,
+  if they make use of additional filters such as form_factors,
+  is_low_end_device, etc.). In those cases, the PRESUBMIT check can be bypassed.
+  Since this will only check for studies that were changed in this particular
+  commit, bypassing the PRESUBMIT check will not block future commits.
+
+  Args:
+    new_json_data: Parsed JSON object representing the new fieldtrial config.
+    old_json_data: Parsed JSON object representing the old fieldtrial config.
+    message_type: Type of message from |output_api| to return in the case of
+      errors/warnings.
+
+  Returns:
+    A list of |message_type| messages. In the case of all tests passing with no
+    warnings/errors, this will return [].
+  """
+  # Get list of studies that changed.
+  changed_studies = []
+  for study_name in new_json_data:
+    if (study_name not in old_json_data or
+          new_json_data[study_name] != old_json_data[study_name]):
+      changed_studies.append(study_name)
+
+  # A map between a feature name and the name of studies that use it. E.g.,
+  # duplicated_features_to_studies_map["FeatureA"] = {"StudyA", "StudyB"}.
+  # Only features that are defined in multiple studies are added to this map.
+  duplicated_features_to_studies_map = dict()
+
+  # Compare the changed studies against all studies defined.
+  for changed_study_name in changed_studies:
+    for study_name in new_json_data:
+      if changed_study_name == study_name:
+        continue
+
+      duplicated_features = _GetDuplicatedFeatures(
+          new_json_data[changed_study_name], new_json_data[study_name])
+
+      for feature in duplicated_features:
+        if feature not in duplicated_features_to_studies_map:
+          duplicated_features_to_studies_map[feature] = set()
+        duplicated_features_to_studies_map[feature].update(
+            [changed_study_name, study_name])
+
+  if len(duplicated_features_to_studies_map) == 0:
+    return []
+
+  duplicated_features_strings = [
+      "%s (in studies %s)" % (feature, ', '.join(studies))
+      for feature, studies in duplicated_features_to_studies_map.items()
+  ]
+
+  return [
+    message_type('The following feature(s) were specified in multiple '
+                  'studies: %s' % ', '.join(duplicated_features_strings))
+  ]
 
 def CommonChecks(input_api, output_api):
   affected_files = input_api.AffectedFiles(
@@ -262,6 +348,12 @@
       result = CheckPretty(contents, f.LocalPath(), output_api.PresubmitError)
       if result:
         return result
+      result = CheckDuplicatedFeatures(
+          json_data,
+          input_api.json.loads('\n'.join(f.OldContents())),
+          output_api.PresubmitError)
+      if result:
+        return result
     except ValueError:
       return [
           output_api.PresubmitError('Malformed JSON file: %s' % f.LocalPath())
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 5c5f9bf..2a493be 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -62,6 +62,26 @@
             ]
         }
     ],
+    "AnchorElementInteractionPreloader": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_20220428",
+                    "enable_features": [
+                        "AnchorElementInteraction"
+                    ]
+                }
+            ]
+        }
+    ],
     "AndroidContextualSearchM95": [
         {
             "platforms": [
@@ -5262,29 +5282,6 @@
             ]
         }
     ],
-    "OnDemandAPIValidation": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "chromeos_lacros",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled_20220414",
-                    "params": {
-                        "use_page_topics": "true"
-                    },
-                    "enable_features": [
-                        "BatchAnnotationsValidation"
-                    ]
-                }
-            ]
-        }
-    ],
     "OnDemandAT": [
         {
             "platforms": [
@@ -5670,7 +5667,7 @@
             ]
         }
     ],
-    "PartitionConnectionsByNetworkIsolationKey": [
+    "PartitionNetworkStateByDoubleKey": [
         {
             "platforms": [
                 "android",
@@ -5683,8 +5680,9 @@
             ],
             "experiments": [
                 {
-                    "name": "Enabled5",
+                    "name": "Enabled2",
                     "enable_features": [
+                        "ForceIsolationInfoFrameOriginToTopLevelFrame",
                         "PartitionConnectionsByNetworkIsolationKey",
                         "PartitionDomainReliabilityByNetworkIsolationKey",
                         "PartitionExpectCTStateByNetworkIsolationKey",
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index 07b04f3..86cdee74 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -306,7 +306,6 @@
   }
 
   deps = [
-    ":generate_eventhandler_names",
     ":generated_settings_macros",
     "//build:chromeos_buildflags",
     "//components/paint_preview/common",
@@ -1215,28 +1214,6 @@
   }
 }
 
-# Generate a list of event handler attributes, for use by Trusted Types.
-action("generate_eventhandler_names") {
-  script = "//third_party/blink/renderer/build/scripts/run_with_pythonpath.py"
-  real_script = "trustedtypes/generate_eventhandler_names.py"
-  inputs = [
-    web_idl_database_filepath,
-    real_script,
-  ]
-  outputs = [ "$target_gen_dir/trustedtypes/event_handler_names.h" ]
-  deps = [ "//third_party/blink/renderer/bindings:web_idl_database" ]
-  args = [
-    "-I",
-    rebase_path("//third_party/blink/renderer/bindings/scripts",
-                root_build_dir),
-    rebase_path(real_script, root_build_dir),
-    "--webidl",
-    rebase_path(inputs[0], root_build_dir),
-    "--out",
-    rebase_path(outputs[0], root_build_dir),
-  ]
-}
-
 # Fuzzer for blink::TextResourceDecoder.
 fuzzer_test("text_resource_decoder_fuzzer") {
   sources = [
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
index 621389ab..2321002 100644
--- a/third_party/blink/renderer/core/dom/document.h
+++ b/third_party/blink/renderer/core/dom/document.h
@@ -1593,6 +1593,10 @@
     return *root_scroller_controller_;
   }
 
+  AnchorElementInteractionTracker* GetAnchorElementInteractionTracker() const {
+    return anchor_element_interaction_tracker_.Get();
+  }
+
   // Returns true if this document has a frame and it is a main frame.
   // See `Frame::IsMainFrame`.
   bool IsInMainFrame() const;
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 8208fc3..77bf910 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -2292,18 +2292,13 @@
   if (iter != attribute_types->end())
     return iter->value;
 
-  // Since event handlers can be defined on nearly all elements, we will
-  // consider them independently of the specific element they're attached to.
-  //
-  // Note: Element::IsEventHandlerAttribute is different and over-approximates
-  // event-handler-ness, since it is expected to work only for builtin
-  // attributes (like "onclick"), while Trusted Types needs to deal with
-  // whatever users pass into setAttribute (for example "one"). Also, it
-  // requires the actual Attribute rather than the QName, which means
-  // Element::IsEventHandlerAttribute can only be called after an attribute has
-  // been constructed.
-  if (IsTrustedTypesEventHandlerAttribute(q_name))
+  if (q_name.LocalName().StartsWith("on")) {
+    // TODO(jakubvrana): This requires TrustedScript in all attributes
+    // starting with "on", including e.g. "one". We use this pattern elsewhere
+    // (e.g. in IsEventHandlerAttribute) but it's not ideal. Consider using
+    // the event attribute of the resulting AttributeTriggers.
     return SpecificTrustedType::kScript;
+  }
 
   return SpecificTrustedType::kNone;
 }
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager.cc b/third_party/blink/renderer/core/input/pointer_event_manager.cc
index 292a062c..f992e8b 100644
--- a/third_party/blink/renderer/core/input/pointer_event_manager.cc
+++ b/third_party/blink/renderer/core/input/pointer_event_manager.cc
@@ -25,6 +25,7 @@
 #include "third_party/blink/renderer/core/input/touch_action_util.h"
 #include "third_party/blink/renderer/core/layout/hit_test_canvas_result.h"
 #include "third_party/blink/renderer/core/layout/layout_object.h"
+#include "third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h"
 #include "third_party/blink/renderer/core/page/chrome_client.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/page/pointer_lock_controller.h"
@@ -189,6 +190,14 @@
   if (frame_ && frame_->DomWindow())
     event_timing = EventTiming::Create(frame_->DomWindow(), *pointer_event);
 
+  if (event_type == event_type_names::kPointerdown) {
+    AnchorElementInteractionTracker* tracker =
+        frame_->GetDocument()->GetAnchorElementInteractionTracker();
+    if (tracker) {
+      tracker->OnPointerDown(*target, *pointer_event);
+    }
+  }
+
   if (should_filter &&
       !HasPointerEventListener(frame_->GetEventHandlerRegistry()))
     return WebInputEventResult::kNotHandled;
diff --git a/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc b/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc
index 8eb4c5442..29526fd4 100644
--- a/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc
+++ b/third_party/blink/renderer/core/loader/anchor_element_interaction_test.cc
@@ -7,12 +7,14 @@
 #include "base/test/scoped_feature_list.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/public/common/input/web_input_event.h"
+#include "third_party/blink/public/common/input/web_mouse_event.h"
 #include "third_party/blink/public/mojom/loader/anchor_element_interaction_host.mojom-blink.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/html/html_anchor_element.h"
+#include "third_party/blink/renderer/core/input/event_handler.h"
 #include "third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h"
-#include "third_party/blink/renderer/core/loader/anchor_element_listener.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_request.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h"
@@ -49,6 +51,7 @@
         mojom::blink::AnchorElementInteractionHost::Name_,
         WTF::BindRepeating(&AnchorElementInteractionTest::Bind,
                            WTF::Unretained(this)));
+    WebView().MainFrameViewWidget()->Resize(gfx::Size(400, 400));
   }
 
   void TearDown() override {
@@ -65,58 +68,47 @@
     hosts_.push_back(std::move(host));
   }
 
+  void SendMouseDownEvent() {
+    gfx::PointF coordinates(100, 100);
+    WebMouseEvent event(WebInputEvent::Type::kMouseDown, coordinates,
+                        coordinates, WebPointerProperties::Button::kLeft, 0,
+                        WebInputEvent::kLeftButtonDown,
+                        WebInputEvent::GetStaticTimeStampForTests());
+    GetDocument().GetFrame()->GetEventHandler().HandleMousePressEvent(event);
+  }
+
   base::test::ScopedFeatureList feature_list_;
   std::vector<std::unique_ptr<MockAnchorElementInteractionHost>> hosts_;
 };
 
+TEST_F(AnchorElementInteractionTest, SingleAnchor) {
+  String source("https://example.com/p1");
+  SimRequest main_resource(source, "text/html");
+  LoadURL(source);
+  main_resource.Complete(R"HTML(
+    <a href='https://anchor1.com/'>
+      <div style='padding: 0px; width: 400px; height: 400px;'></div>
+    </a>
+  )HTML");
+  SendMouseDownEvent();
+  base::RunLoop().RunUntilIdle();
+  KURL expected_url = KURL("https://anchor1.com/");
+  EXPECT_EQ(1u, hosts_.size());
+  absl::optional<KURL> url_received = hosts_[0]->url_received_;
+  EXPECT_TRUE(url_received.has_value());
+  EXPECT_EQ(expected_url, url_received);
+}
+
 TEST_F(AnchorElementInteractionTest, InvalidHref) {
   String source("https://example.com/p1");
   SimRequest main_resource(source, "text/html");
   LoadURL(source);
   main_resource.Complete(R"HTML(
-    <a id='anchor1' href='about:blank'>example</a>
-    <script>
-      const a = document.getElementById('anchor1');
-      var event = new PointerEvent('pointerdown', {isPrimary: true});
-      a.dispatchEvent(event);
-    </script>
+    <a href='about:blank'>
+      <div style='padding: 0px; width: 400px; height: 400px;'></div>
+    </a>
   )HTML");
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(1u, hosts_.size());
-  absl::optional<KURL> url_received = hosts_[0]->url_received_;
-  EXPECT_FALSE(url_received.has_value());
-}
-
-TEST_F(AnchorElementInteractionTest, NonPointerEventType) {
-  String source("https://example.com/p1");
-  SimRequest main_resource(source, "text/html");
-  LoadURL(source);
-  main_resource.Complete(R"HTML(
-    <a id='anchor1' href='https://anchor1.com/'>example</a>
-    <script>
-      const a = document.getElementById('anchor1');
-      var event = new Event('pointerdown');
-      a.dispatchEvent(event);
-    </script>
-  )HTML");
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(1u, hosts_.size());
-  absl::optional<KURL> url_received = hosts_[0]->url_received_;
-  EXPECT_FALSE(url_received.has_value());
-}
-
-TEST_F(AnchorElementInteractionTest, NonPrimary) {
-  String source("https://example.com/p1");
-  SimRequest main_resource(source, "text/html");
-  LoadURL(source);
-  main_resource.Complete(R"HTML(
-    <a id='anchor1' href='https://anchor1.com/'>example</a>
-    <script>
-      const a = document.getElementById('anchor1');
-      var event = new PointerEvent('pointerdown', {isPrimary: false});
-      a.dispatchEvent(event);
-    </script>
-  )HTML");
+  SendMouseDownEvent();
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(1u, hosts_.size());
   absl::optional<KURL> url_received = hosts_[0]->url_received_;
@@ -128,16 +120,16 @@
   SimRequest main_resource(source, "text/html");
   LoadURL(source);
   main_resource.Complete(R"HTML(
-    <a id='anchor1' href='https://anchor1.com/'>example</a>
-    <script>
-      const a = document.getElementById('anchor1');
-      var event = new PointerEvent('pointerdown', {
-        isPrimary: true,
-        button: 2
-      });
-      a.dispatchEvent(event);
-    </script>
+    <a href='https://anchor1.com/'>
+      <div style='padding: 0px; width: 400px; height: 400px;'></div>
+    </a>
   )HTML");
+  gfx::PointF coordinates(100, 100);
+  WebMouseEvent event(WebInputEvent::Type::kMouseDown, coordinates, coordinates,
+                      WebPointerProperties::Button::kLeft, 0,
+                      WebInputEvent::kRightButtonDown,
+                      WebInputEvent::GetStaticTimeStampForTests());
+  GetDocument().GetFrame()->GetEventHandler().HandleMousePressEvent(event);
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(1u, hosts_.size());
   absl::optional<KURL> url_received = hosts_[0]->url_received_;
@@ -149,14 +141,13 @@
   SimRequest main_resource(source, "text/html");
   LoadURL(source);
   main_resource.Complete(R"HTML(
-    <a id='anchor1' href='https://anchor1.com/'><a id='anchor2'
-      href='https://anchor2.com/'></a></a>
-    <script>
-      const a = document.getElementById('anchor2');
-      var event = new PointerEvent('pointerdown', {isPrimary: true});
-      a.dispatchEvent(event);
-    </script>
+    <a href='https://anchor1.com/'>
+      <a href='https://anchor2.com/'>
+        <div style='padding: 0px; width: 400px; height: 400px;'></div>
+      </a>
+    </a>
   )HTML");
+  SendMouseDownEvent();
   base::RunLoop().RunUntilIdle();
   KURL expected_url = KURL("https://anchor2.com/");
   EXPECT_EQ(1u, hosts_.size());
@@ -165,19 +156,19 @@
   EXPECT_EQ(expected_url, url_received);
 }
 
-TEST_F(AnchorElementInteractionTest, NestedDivAnchorElementCheck) {
+TEST_F(AnchorElementInteractionTest, SiblingAnchorElements) {
   String source("https://example.com/p1");
   SimRequest main_resource(source, "text/html");
   LoadURL(source);
   main_resource.Complete(R"HTML(
-    <a id='anchor1' href='https://anchor1.com/'><div
-      id='div1id'></div></a>
-    <script>
-      const a = document.getElementById('div1id');
-      var event = new PointerEvent('pointerdown', {isPrimary: true});
-      a.dispatchEvent(event);
-    </script>
+    <a href='https://anchor1.com/'>
+        <div style='padding: 0px; width: 400px; height: 400px;'></div>
+    </a>
+    <a href='https://anchor2.com/'>
+        <div style='padding: 0px; width: 400px; height: 400px;'></div>
+    </a>
   )HTML");
+  SendMouseDownEvent();
   base::RunLoop().RunUntilIdle();
   KURL expected_url = KURL("https://anchor1.com/");
   EXPECT_EQ(1u, hosts_.size());
@@ -186,57 +177,40 @@
   EXPECT_EQ(expected_url, url_received);
 }
 
-TEST_F(AnchorElementInteractionTest, MultipleNestedAnchorElementCheck) {
+TEST_F(AnchorElementInteractionTest, NoAnchorElement) {
   String source("https://example.com/p1");
   SimRequest main_resource(source, "text/html");
   LoadURL(source);
   main_resource.Complete(R"HTML(
-    <a id='anchor1' href='https://anchor1.com/'><p id='paragraph1id'><div
-      id='div1id'><div id='div2id'></div></div></p></a>
-    <script>
-      const a = document.getElementById('div2id');
-      var event = new PointerEvent('pointerdown', {isPrimary: true});
-      a.dispatchEvent(event);
-    </script>
+    <div style='padding: 0px; width: 400px; height: 400px;'></div>
   )HTML");
-  base::RunLoop().RunUntilIdle();
-  KURL expected_url = KURL("https://anchor1.com/");
-  EXPECT_EQ(1u, hosts_.size());
-  absl::optional<KURL> url_received = hosts_[0]->url_received_;
-  EXPECT_TRUE(url_received.has_value());
-  EXPECT_EQ(expected_url, url_received);
-}
-
-TEST_F(AnchorElementInteractionTest, NoAnchorElementCheck) {
-  String source("https://example.com/p1");
-  SimRequest main_resource(source, "text/html");
-  LoadURL(source);
-  main_resource.Complete(R"HTML(
-    <div id='div1id'></div>
-    <script>
-      const a = document.getElementById('div2id');
-      var event = new PointerEvent('pointerdown', {isPrimary: true});
-      a.dispatchEvent(event);
-    </script>
-  )HTML");
+  SendMouseDownEvent();
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(1u, hosts_.size());
   absl::optional<KURL> url_received = hosts_[0]->url_received_;
   EXPECT_FALSE(url_received.has_value());
 }
 
-TEST_F(AnchorElementInteractionTest, OneAnchorElementCheck) {
+TEST_F(AnchorElementInteractionTest, TouchEvent) {
   String source("https://example.com/p1");
   SimRequest main_resource(source, "text/html");
   LoadURL(source);
   main_resource.Complete(R"HTML(
-    <a id="anchor1" href="https://anchor1.com/">foo</a>
-    <script>
-      const a = document.getElementById('anchor1');
-      var event = new PointerEvent('pointerdown', {isPrimary: true});
-      a.dispatchEvent(event);
-    </script>
+    <a href='https://anchor1.com/'>
+      <div style='padding: 0px; width: 400px; height: 400px;'></div>
+    </a>
   )HTML");
+
+  WebPointerEvent event(
+      WebInputEvent::Type::kPointerDown,
+      WebPointerProperties(1, WebPointerProperties::PointerType::kTouch,
+                           WebPointerProperties::Button::kLeft,
+                           gfx::PointF(100, 100), gfx::PointF(100, 100)),
+      1, 1);
+  GetDocument().GetFrame()->GetEventHandler().HandlePointerEvent(
+      event, Vector<WebPointerEvent>(), Vector<WebPointerEvent>());
+  GetDocument().GetFrame()->GetEventHandler().DispatchBufferedTouchEvents();
+
   base::RunLoop().RunUntilIdle();
   KURL expected_url = KURL("https://anchor1.com/");
   EXPECT_EQ(1u, hosts_.size());
diff --git a/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.cc b/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.cc
index 04daab3..d1ff5a2a 100644
--- a/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.cc
+++ b/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.cc
@@ -5,12 +5,13 @@
 #include "third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/public/common/input/web_pointer_properties.h"
 #include "third_party/blink/public/mojom/loader/anchor_element_interaction_host.mojom-blink.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/event_type_names.h"
+#include "third_party/blink/renderer/core/events/pointer_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
-#include "third_party/blink/renderer/core/loader/anchor_element_listener.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
 
 namespace blink {
@@ -18,16 +19,6 @@
 AnchorElementInteractionTracker::AnchorElementInteractionTracker(
     Document& document)
     : interaction_host_(document.GetExecutionContext()) {
-  base::RepeatingCallback<void(const KURL&)> callback =
-      WTF::BindRepeating(&AnchorElementInteractionTracker::OnPointerDown,
-                         WrapWeakPersistent(this));
-
-  anchor_element_listener_ =
-      MakeGarbageCollected<AnchorElementListener>(callback);
-
-  document.addEventListener(event_type_names::kPointerdown,
-                            anchor_element_listener_, true);
-
   document.GetFrame()->GetBrowserInterfaceBroker().GetInterface(
       interaction_host_.BindNewPipeAndPassReceiver(
           document.GetExecutionContext()->GetTaskRunner(
@@ -35,7 +26,6 @@
 }
 
 void AnchorElementInteractionTracker::Trace(Visitor* visitor) const {
-  visitor->Trace(anchor_element_listener_);
   visitor->Trace(interaction_host_);
 }
 
@@ -44,8 +34,50 @@
   return base::FeatureList::IsEnabled(features::kAnchorElementInteraction);
 }
 
-void AnchorElementInteractionTracker::OnPointerDown(const KURL& url) {
+void AnchorElementInteractionTracker::OnPointerDown(
+    EventTarget& target,
+    const PointerEvent& pointer_event) {
+  if (!target.ToNode()) {
+    return;
+  }
+  if (!pointer_event.isPrimary()) {
+    return;
+  }
+  // TODO(crbug.com/1297312): Check if user changed the default mouse settings
+  if (pointer_event.button() !=
+          static_cast<int>(WebPointerProperties::Button::kLeft) &&
+      pointer_event.button() !=
+          static_cast<int>(WebPointerProperties::Button::kMiddle)) {
+    return;
+  }
+  HTMLAnchorElement* anchor = FirstAnchorElementIncludingSelf(target.ToNode());
+  if (!anchor) {
+    return;
+  }
+  KURL url = GetHrefEligibleForPreloading(*anchor);
+  if (url.IsEmpty()) {
+    return;
+  }
   interaction_host_->OnPointerDown(url);
 }
 
+HTMLAnchorElement*
+AnchorElementInteractionTracker::FirstAnchorElementIncludingSelf(Node* node) {
+  HTMLAnchorElement* anchor = nullptr;
+  while (node && !anchor) {
+    anchor = DynamicTo<HTMLAnchorElement>(node);
+    node = node->parentNode();
+  }
+  return anchor;
+}
+
+KURL AnchorElementInteractionTracker::GetHrefEligibleForPreloading(
+    const HTMLAnchorElement& anchor) {
+  KURL url = anchor.Href();
+  if (url.ProtocolIsInHTTPFamily()) {
+    return url;
+  }
+  return KURL();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h b/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h
index 44d8d09..2029987 100644
--- a/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h
+++ b/third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h
@@ -6,22 +6,25 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_ANCHOR_ELEMENT_INTERACTION_TRACKER_H_
 
 #include "third_party/blink/public/mojom/loader/anchor_element_interaction_host.mojom-blink.h"
+#include "third_party/blink/renderer/core/html/html_anchor_element.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
 #include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
 
 namespace blink {
 
-class AnchorElementListener;
 class Document;
+class EventTarget;
+class HTMLAnchorElement;
 class KURL;
+class Node;
+class PointerEvent;
 
-// Creates an event listener for mousedown events anywhere on a document.
-// If there is one, the listener will retrieve the valid href from the anchor
-// element from the event. The tracker will report the href value to the
-// browser process via Mojo. The browser process can use this information
-// to preload (e.g. preconnect the origin) the URL in order to improve
-// performance.
+// Tracks pointerdown events anywhere on a document.  On receiving a pointerdown
+// event, the tracker will retrieve the valid href from the anchor element from
+// the event and will report the href value to the browser process via Mojo. The
+// browser process can use this information to preload (e.g. preconnect to the
+// origin) the URL in order to improve performance.
 class AnchorElementInteractionTracker
     : public GarbageCollected<AnchorElementInteractionTracker> {
  public:
@@ -29,12 +32,17 @@
 
   static bool IsFeatureEnabled();
 
-  void OnPointerDown(const KURL& url);
+  void OnPointerDown(EventTarget& target, const PointerEvent& pointer_event);
 
   void Trace(Visitor* visitor) const;
 
  private:
-  Member<AnchorElementListener> anchor_element_listener_;
+  HTMLAnchorElement* FirstAnchorElementIncludingSelf(Node* node);
+
+  // Gets the `anchor's` href attribute if it is part
+  // of the HTTP family
+  KURL GetHrefEligibleForPreloading(const HTMLAnchorElement& anchor);
+
   HeapMojoRemote<mojom::blink::AnchorElementInteractionHost> interaction_host_;
 };
 
diff --git a/third_party/blink/renderer/core/loader/anchor_element_listener.cc b/third_party/blink/renderer/core/loader/anchor_element_listener.cc
deleted file mode 100644
index 7770745..0000000
--- a/third_party/blink/renderer/core/loader/anchor_element_listener.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2022 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 "third_party/blink/renderer/core/loader/anchor_element_listener.h"
-#include "third_party/blink/public/common/input/web_pointer_properties.h"
-#include "third_party/blink/renderer/core/dom/events/event.h"
-#include "third_party/blink/renderer/core/events/pointer_event.h"
-#include "third_party/blink/renderer/core/html/html_anchor_element.h"
-#include "third_party/blink/renderer/platform/weborigin/kurl.h"
-
-namespace blink {
-
-AnchorElementListener::AnchorElementListener(
-    base::RepeatingCallback<void(const KURL&)> callback)
-    : tracker_callback_(std::move(callback)) {}
-
-void AnchorElementListener::Invoke(ExecutionContext* execution_context,
-                                   Event* event) {
-  if (!event->target()) {
-    return;
-  }
-  if (!event->target()->ToNode()) {
-    return;
-  }
-  if (!event->target()->ToNode()->IsHTMLElement()) {
-    return;
-  }
-  PointerEvent* pointer_event = DynamicTo<PointerEvent>(event);
-  if (!pointer_event) {
-    // Pages are allowed to dispatch any event to the 'pointerdown' type, which
-    // may result in this code running with an |event| that is not of type
-    // PointerEvent.
-    return;
-  }
-  if (!pointer_event->isPrimary()) {
-    return;
-  }
-  // TODO(crbug.com/1297312): Check if user changed the default mouse settings
-  if (pointer_event->button() !=
-          static_cast<int>(WebPointerProperties::Button::kLeft) &&
-      pointer_event->button() !=
-          static_cast<int>(WebPointerProperties::Button::kMiddle)) {
-    return;
-  }
-  Node* node = event->srcElement()->ToNode();
-  HTMLAnchorElement* html_anchor_element =
-      FirstAnchorElementIncludingSelf(node);
-  if (!html_anchor_element) {
-    return;
-  }
-  KURL anchor_url = GetHrefEligibleForPreloading(*html_anchor_element);
-  if (anchor_url.IsEmpty()) {
-    return;
-  }
-  tracker_callback_.Run(anchor_url);
-}
-
-HTMLAnchorElement* AnchorElementListener::FirstAnchorElementIncludingSelf(
-    Node* node) {
-  HTMLAnchorElement* html_anchor_element = nullptr;
-  while (node && !html_anchor_element) {
-    html_anchor_element = DynamicTo<HTMLAnchorElement>(node);
-    node = node->parentNode();
-  }
-  return html_anchor_element;
-}
-
-KURL AnchorElementListener::GetHrefEligibleForPreloading(
-    const HTMLAnchorElement& html_anchor_element) {
-  KURL url = html_anchor_element.Href();
-  if (url.ProtocolIsInHTTPFamily()) {
-    return url;
-  }
-  return KURL("");
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/loader/anchor_element_listener.h b/third_party/blink/renderer/core/loader/anchor_element_listener.h
deleted file mode 100644
index dac0832b..0000000
--- a/third_party/blink/renderer/core/loader/anchor_element_listener.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2022 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 THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_ANCHOR_ELEMENT_LISTENER_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_ANCHOR_ELEMENT_LISTENER_H_
-
-#include "base/callback.h"
-#include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/core/dom/events/native_event_listener.h"
-
-namespace blink {
-
-class Node;
-class Event;
-class HTMLAnchorElement;
-class KURL;
-class ExecutionContext;
-
-// Listens for kPointerdown events, and checks to see if an anchor
-// element is clicked with a valid href to be eligible for preloading.
-class CORE_EXPORT AnchorElementListener : public NativeEventListener {
- public:
-  explicit AnchorElementListener(
-      base::RepeatingCallback<void(const KURL&)> callback);
-
-  void Invoke(ExecutionContext* execution_context, Event* event) override;
-
- private:
-  HTMLAnchorElement* FirstAnchorElementIncludingSelf(Node* node);
-
-  // Gets the `html_anchor_element's` href attribute if it is part
-  // of the HTTP family
-  KURL GetHrefEligibleForPreloading(
-      const HTMLAnchorElement& html_anchor_element);
-
-  base::RepeatingCallback<void(const KURL&)> tracker_callback_;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_ANCHOR_ELEMENT_LISTENER_H_
diff --git a/third_party/blink/renderer/core/loader/build.gni b/third_party/blink/renderer/core/loader/build.gni
index ade2715a..f524f57 100644
--- a/third_party/blink/renderer/core/loader/build.gni
+++ b/third_party/blink/renderer/core/loader/build.gni
@@ -5,8 +5,6 @@
 blink_core_sources_loader = [
   "alternate_signed_exchange_resource_info.cc",
   "alternate_signed_exchange_resource_info.h",
-  "anchor_element_listener.cc",
-  "anchor_element_listener.h",
   "anchor_element_interaction_tracker.cc",
   "anchor_element_interaction_tracker.h",
   "back_forward_cache_loader_helper_impl.cc",
diff --git a/third_party/blink/renderer/core/paint/paint_timing_visualizer.cc b/third_party/blink/renderer/core/paint/paint_timing_visualizer.cc
index 7213162..52b4954 100644
--- a/third_party/blink/renderer/core/paint/paint_timing_visualizer.cc
+++ b/third_party/blink/renderer/core/paint/paint_timing_visualizer.cc
@@ -45,6 +45,8 @@
   DCHECK(object.GetFrame());
   value->SetString("frame", String::FromUTF8(ToTraceValue(object.GetFrame())));
   value->SetBoolean("is_in_main_frame", object.GetFrame()->IsMainFrame());
+  value->SetBoolean("is_in_outermost_main_frame",
+                    object.GetFrame()->IsOutermostMainFrame());
   if (object.GetNode())
     value->SetInteger("dom_node_id", DOMNodeIds::IdForNode(object.GetNode()));
 }
@@ -83,7 +85,7 @@
     LocalFrameView& frame_view) {
   if (!need_recording_viewport)
     return;
-  if (!frame_view.GetFrame().IsMainFrame())
+  if (!frame_view.GetFrame().IsOutermostMainFrame())
     return;
   ScrollableArea* scrollable_area = frame_view.GetScrollableArea();
   DCHECK(scrollable_area);
diff --git a/third_party/blink/renderer/core/trustedtypes/generate_eventhandler_names.py b/third_party/blink/renderer/core/trustedtypes/generate_eventhandler_names.py
deleted file mode 100755
index 2258554..0000000
--- a/third_party/blink/renderer/core/trustedtypes/generate_eventhandler_names.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2022 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 optparse
-import sys
-
-import web_idl
-
-
-# Read the WebIDL database and write a list of all event handler attributes.
-#
-# Reads the WebIDL database (--webidl) and writes a C++ .h file with a macro
-# containing all event handler names (to --out). All attributes declared as
-# EventHandler or On(BeforeUnload|Error)EventHandler types are considered
-# event handlers.
-#
-# The macro is called EVENT_HANDLER_LIST and follows the "X macro" model of
-# macro lists [1], as its used elsewhere [2] in the Chromium code base.
-#
-# [1] https://en.wikipedia.org/wiki/X_Macro
-# [2] https://source.chromium.org/search?q=%5E%23define%5C%20%5BA-Z_%5D*LIST%5C(%20file:v8
-def main(argv):
-    parser = optparse.OptionParser()
-    parser.add_option("--out")
-    parser.add_option("--webidl")
-    options, args = parser.parse_args(argv[1:])
-
-    for option in ("out", "webidl"):
-        if not getattr(options, option):
-            parser.error(f"--{option} is required.")
-    if args:
-        parser.error("No positional arguments supported.")
-
-    event_handlers = set()
-    event_handler_types = ("EventHandler", "OnBeforeUnloadEventHandler",
-                           "OnErrorEventHandler")
-
-    web_idl_database = web_idl.Database.read_from_file(options.webidl)
-    for interface in web_idl_database.interfaces:
-        for attribute in interface.attributes:
-            idl_type = attribute.idl_type
-            if (idl_type.is_typedef
-                    and idl_type.identifier in event_handler_types):
-                event_handlers.add(attribute.identifier)
-
-    license_and_header = """\
-// Copyright 2022 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.
-"""
-
-    with open(options.out, "w") as out:
-        print(license_and_header, file=out)
-        print("// Generated from WebIDL database. Don't edit, just generate.",
-              file=out)
-        print("//", file=out)
-        print(f"// Generator: {argv[0]}", file=out)
-        print("", file=out)
-        print("#define EVENT_HANDLER_LIST(EH) \\", file=out)
-        for event in event_handlers:
-            print(f"  EH({event}) \\", file=out)
-        print("\n", file=out)
-
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv))
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc
index 29988be..04138a1 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc
@@ -19,7 +19,6 @@
 #include "third_party/blink/renderer/core/inspector/exception_metadata.h"
 #include "third_party/blink/renderer/core/inspector/identifiers_factory.h"
 #include "third_party/blink/renderer/core/probe/core_probes.h"
-#include "third_party/blink/renderer/core/trustedtypes/event_handler_names.h"
 #include "third_party/blink/renderer/core/trustedtypes/trusted_html.h"
 #include "third_party/blink/renderer/core/trustedtypes/trusted_script.h"
 #include "third_party/blink/renderer/core/trustedtypes/trusted_type_policy.h"
@@ -194,10 +193,7 @@
      true},
     {"*", "innerHTML", nullptr, SpecificTrustedType::kHTML, false, true},
     {"*", "outerHTML", nullptr, SpecificTrustedType::kHTML, false, true},
-#define FOREACH_EVENT_HANDLER(name) \
-  {"*", #name, nullptr, SpecificTrustedType::kScript, true, false},
-    EVENT_HANDLER_LIST(FOREACH_EVENT_HANDLER)
-#undef FOREACH_EVENT_HANDLER
+    {"*", "on*", nullptr, SpecificTrustedType::kScript, true, false},
 };
 
 // Does a type table entry match a property?
@@ -208,20 +204,22 @@
                     const String& ns) {
   DCHECK_EQ(tag.LowerASCII(), tag);
   return (left.element == tag || !strcmp(left.element, "*")) &&
-         left.property == attr && left.element_namespace == ns &&
-         !left.is_not_property;
+         (left.property == attr ||
+          (!strcmp(left.property, "on*") && attr.StartsWith("on"))) &&
+         left.element_namespace == ns && !left.is_not_property;
 }
 
 // Does a type table entry match an attribute?
 // (Attributes get queried by calling acecssor methods on the DOM. These are
-//  case-insensitive, because DOM.)
+//  case-insensitivem, because DOM.)
 bool EqualsAttribute(decltype(*kTypeTable)& left,
                      const String& tag,
                      const String& attr,
                      const String& ns) {
   DCHECK_EQ(tag.LowerASCII(), tag);
   return (left.element == tag || !strcmp(left.element, "*")) &&
-         CodeUnitCompareIgnoringASCIICase(attr, left.property) == 0 &&
+         (String(left.property).LowerASCII() == attr.LowerASCII() ||
+          (!strcmp(left.property, "on*") && attr.StartsWith("on"))) &&
          left.element_namespace == ns && !left.is_not_attribute;
 }
 
@@ -243,10 +241,10 @@
                                  const String&,
                                  const String&);
 
-SpecificTrustedType FindTypeInTypeTable(const String& tagName,
-                                        const String& propertyName,
-                                        const String& elementNS,
-                                        PropertyEqualsFn equals) {
+String FindTypeInTypeTable(const String& tagName,
+                           const String& propertyName,
+                           const String& elementNS,
+                           PropertyEqualsFn equals) {
   SpecificTrustedType type = SpecificTrustedType::kNone;
   for (auto* it = std::cbegin(kTypeTable); it != std::cend(kTypeTable); it++) {
     if ((*equals)(*it, tagName, propertyName, elementNS)) {
@@ -254,23 +252,15 @@
       break;
     }
   }
-  return type;
-}
-
-String FindTypeNameInTypeTable(const String& tagName,
-                               const String& propertyName,
-                               const String& elementNS,
-                               PropertyEqualsFn equals) {
-  return getTrustedTypeName(
-      FindTypeInTypeTable(tagName, propertyName, elementNS, equals));
+  return getTrustedTypeName(type);
 }
 
 String TrustedTypePolicyFactory::getPropertyType(
     const String& tagName,
     const String& propertyName,
     const String& elementNS) const {
-  return FindTypeNameInTypeTable(tagName.LowerASCII(), propertyName, elementNS,
-                                 &EqualsProperty);
+  return FindTypeInTypeTable(tagName.LowerASCII(), propertyName, elementNS,
+                             &EqualsProperty);
 }
 
 String TrustedTypePolicyFactory::getAttributeType(
@@ -278,8 +268,8 @@
     const String& attributeName,
     const String& tagNS,
     const String& attributeNS) const {
-  return FindTypeNameInTypeTable(tagName.LowerASCII(), attributeName, tagNS,
-                                 &EqualsAttribute);
+  return FindTypeInTypeTable(tagName.LowerASCII(), attributeName, tagNS,
+                             &EqualsAttribute);
 }
 
 String TrustedTypePolicyFactory::getPropertyType(
@@ -382,20 +372,4 @@
   visitor->Trace(policy_map_);
 }
 
-inline bool FindEventHandlerAttributeInTable(
-    const AtomicString& attributeName) {
-  return SpecificTrustedType::kScript ==
-         FindTypeInTypeTable("*", attributeName, String(), &EqualsAttribute);
-}
-
-bool TrustedTypePolicyFactory::IsEventHandlerAttributeName(
-    const AtomicString& attributeName) {
-  // Check that the "on" prefix indeed filters out only non-event handlers.
-  DCHECK(!FindEventHandlerAttributeInTable(attributeName) ||
-         attributeName.StartsWithIgnoringASCIICase("on"));
-
-  return attributeName.StartsWithIgnoringASCIICase("on") &&
-         FindEventHandlerAttributeInTable(attributeName);
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.h b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.h
index 1288407..e44fe58 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.h
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.h
@@ -75,13 +75,6 @@
   ExecutionContext* GetExecutionContext() const override;
   void Trace(Visitor*) const override;
 
-  // Check whether a given attribute is considered an event handler.
-  //
-  // This function is largely unrelated to the TrustedTypePolicyFactory, but
-  // it reuses the data from getTypeMapping, which is why we have defined it
-  // here.
-  static bool IsEventHandlerAttributeName(const AtomicString& attributeName);
-
  private:
   const WrapperTypeInfo* GetWrapperTypeInfoFromScriptValue(ScriptState*,
                                                            const ScriptValue&);
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
index 12500449..17ca747 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
@@ -599,10 +599,4 @@
   return TrustedTypesCheckForHTML(html, execution_context, exception_state);
 }
 
-bool IsTrustedTypesEventHandlerAttribute(const QualifiedName& q_name) {
-  return q_name.NamespaceURI().IsNull() &&
-         TrustedTypePolicyFactory::IsEventHandlerAttributeName(
-             q_name.LocalName());
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h
index 12733890..c0e40d41 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h
@@ -14,7 +14,6 @@
 
 class ExceptionState;
 class ExecutionContext;
-class QualifiedName;
 class V8UnionStringOrTrustedScript;
 class V8UnionStringTreatNullAsEmptyStringOrTrustedScript;
 
@@ -88,16 +87,6 @@
 // into account.
 CORE_EXPORT bool RequireTrustedTypesCheck(const ExecutionContext*);
 
-// Determine whether an attribute is considered an event handler by Trusted
-// Types.
-//
-// Note: This is different from Element::IsEventHandlerAttribute, because
-// Element only needs this distinction for built-in attributes, but not for
-// user-defined property names. But Trusted Types needs this for any built-in or
-// user-defined attribute/property, and thus must check against a list of known
-// event handlers.
-bool IsTrustedTypesEventHandlerAttribute(const QualifiedName&);
-
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_TRUSTEDTYPES_TRUSTED_TYPES_UTIL_H_
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
index dfd21029..e285aa5 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -1342,13 +1342,6 @@
 }
 
 WebGLRenderingContextBase::~WebGLRenderingContextBase() {
-  // This resolver is non-null during a makeXRCompatible call, while waiting
-  // for a response from the browser and XR process. If the WebGL context is
-  // destroyed before we get a response, the resolver has to be rejected to
-  // be properly disposed of.
-  xr_compatible_ = false;
-  CompleteXrCompatiblePromiseIfPending(DOMExceptionCode::kInvalidStateError);
-
   // It's forbidden to refer to other GC'd objects in a GC'd object's
   // destructor. It's useful for DrawingBuffer to guarantee that it
   // calls its DrawingBufferClient during its own destruction, but if
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_external_texture.cc b/third_party/blink/renderer/modules/webgpu/gpu_external_texture.cc
index aab867e..adbdf242f 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_external_texture.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_external_texture.cc
@@ -12,9 +12,7 @@
 #include "third_party/blink/renderer/core/html/media/html_video_element.h"
 #include "third_party/blink/renderer/modules/webcodecs/video_frame.h"
 #include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h"
-#include "third_party/blink/renderer/modules/webgpu/gpu_adapter.h"
 #include "third_party/blink/renderer/modules/webgpu/gpu_device.h"
-#include "third_party/blink/renderer/modules/webgpu/gpu_supported_features.h"
 #include "third_party/blink/renderer/modules/webgpu/gpu_texture.h"
 #include "third_party/blink/renderer/modules/webgpu/gpu_texture_view.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h"
@@ -90,13 +88,8 @@
 
   // TODO(crbug.com/1306753): Use SharedImageProducer and CompositeSharedImage
   // rather than check 'is_webgpu_compatible'.
-  bool device_support_zero_copy =
-      device->adapter()->features()->FeatureNameSet().Contains(
-          "multi-planar-formats");
-
   if (media_video_frame->HasTextures() &&
       (media_video_frame->format() == media::PIXEL_FORMAT_NV12) &&
-      device_support_zero_copy &&
       media_video_frame->metadata().is_webgpu_compatible) {
     scoped_refptr<WebGPUMailboxTexture> mailbox_texture =
         WebGPUMailboxTexture::FromVideoFrame(
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.cc b/third_party/blink/renderer/platform/loader/fetch/resource.cc
index ff57f0f..ac88afb8 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource.cc
@@ -30,8 +30,6 @@
 #include <cassert>
 #include <memory>
 
-#include "base/debug/crash_logging.h"
-#include "base/strings/string_number_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/default_clock.h"
 #include "build/build_config.h"
@@ -255,14 +253,10 @@
   DCHECK(!is_revalidating_);
   DCHECK(!ErrorOccurred());
   if (options_.data_buffering_policy == kBufferData) {
-    if (data_) {
+    if (data_)
       data_->Append(data, length);
-    } else {
-      // TODO(crbug.com/1302204): Remove this once the crash is fixed.
-      SCOPED_CRASH_KEY_STRING32("Resource", "append_data_length",
-                                base::NumberToString(length));
+    else
       data_ = SharedBuffer::Create(data, length);
-    }
     SetEncodedSize(data_->size());
   }
   NotifyDataReceived(data, length);
diff --git a/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc b/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc
index f271607..45360c8 100644
--- a/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc
+++ b/third_party/blink/renderer/platform/video_capture/video_capture_impl.cc
@@ -94,10 +94,12 @@
         InitializeFromMailbox(std::move(buffer_handle->get_mailbox_handles()));
         break;
       case VideoFrameBufferHandleType::kGpuMemoryBufferHandle:
-#if !BUILDFLAG(IS_MAC)
+#if !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_WIN)
         // On macOS, an IOSurfaces passed as a GpuMemoryBufferHandle can be
         // used by both hardware and software paths.
         // https://crbug.com/1125879
+        // On Windows, GMBs might be passed by the capture process even if
+        // the acceleration disabled during the capture.
         CHECK(media_task_runner_);
 #endif
         InitializeFromGpuMemoryBufferHandle(
@@ -125,7 +127,7 @@
   }
 
   gfx::GpuMemoryBufferHandle TakeGpuMemoryBufferHandle() {
-#if BUILDFLAG(IS_MAC) or BUILDFLAG(IS_WIN)
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
     // The same GpuMemoryBuffersHandles will be reused repeatedly by the
     // unaccelerated macOS path. Each of these uses will call this function.
     // Ensure that this function doesn't invalidate the GpuMemoryBufferHandle
diff --git a/third_party/blink/tools/check_testharness_expected_pass.py b/third_party/blink/tools/check_testharness_expected_pass.py
index a460c7d..e426e88 100755
--- a/third_party/blink/tools/check_testharness_expected_pass.py
+++ b/third_party/blink/tools/check_testharness_expected_pass.py
@@ -17,7 +17,9 @@
 paths = []
 
 for path in sys.argv[1:]:
-    content = open(path, 'r').read()
+    # Call .decode() with errors="ignore" because there are a few files that
+    # are invalid UTF-8 and will otherwise trigger decode exceptions.
+    content = open(path, 'rb').read().decode(errors="ignore")
     if is_all_pass_testharness_result(content):
         paths.append(path)
 
diff --git a/third_party/blink/web_tests/PRESUBMIT.py b/third_party/blink/web_tests/PRESUBMIT.py
index cfaf81c7..4275f89 100644
--- a/third_party/blink/web_tests/PRESUBMIT.py
+++ b/third_party/blink/web_tests/PRESUBMIT.py
@@ -47,7 +47,7 @@
     files_per_command = 25 if input_api.is_windows else 1000
     results = []
     for i in range(0, len(baseline_files), files_per_command):
-        args = [input_api.python_executable, checker_path]
+        args = [input_api.python3_executable, checker_path]
         args.extend(baseline_files[i:i + files_per_command])
         _, errs = input_api.subprocess.Popen(
             args,
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/trusted-types-event-handlers.tentative.html b/third_party/blink/web_tests/external/wpt/trusted-types/trusted-types-event-handlers.tentative.html
deleted file mode 100644
index 57f8d3d9..0000000
--- a/third_party/blink/web_tests/external/wpt/trusted-types/trusted-types-event-handlers.tentative.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<head>
-  <script src="/resources/testharness.js"></script>
-  <script src="/resources/testharnessreport.js"></script>
-  <meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'">
-</head>
-<body>
-<script>
-const element = document.createElement("div");
-
-[
-  "onclick",
-  "onchange",
-  "onfocus",
-  "oNclick",
-  "OnClIcK"
-].forEach(name => {
-  test(t => {
-    assert_throws_js(TypeError,
-        _ => element.setAttribute(name, "2+2"));
-  }, `Event handler ${name} should be blocked.`);
-});
-
-[
-  "one",
-  "oNe",
-  "onIcon",
-  "offIcon",
-  "blubb"
-].forEach(name => {
-  test(t => {
-    element.setAttribute(name, "2+2");
-  }, `Non-event handler ${name} should not be blocked.`);
-});
-
-// We'd like to be sure we're not missing anything. Let's "query" an HTML
-// element about which attributes it knows.
-const div = document.createElement("div");
-for(name in div.__proto__) {
-  const should_be_event_handler = name.startsWith("on");
-  if (should_be_event_handler) {
-    test(t => {
-      assert_throws_js(TypeError,
-          _ => element.setAttribute(name, "2+2"));
-    }, `Event handler div.${name} should be blocked.`);
-  } else {
-    test(t => {
-      element.setAttribute(name, "2+2");
-    }, `Non-event handler div.${name} should not be blocked.`);
-  }
-}
-</script>
-</body>
diff --git a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub-expected.txt
index a02c259..8cebf57b 100644
--- a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Partitioned estimate() usage details for caches test. assert_true: Usage should be 0. expected true got false
+PASS Partitioned estimate() usage details for caches test.
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub-expected.txt
index 4ff627bb..acdfa51 100644
--- a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Partitioned estimate() usage details for indexeddb test. assert_true: Usage should be 0. expected true got false
+PASS Partitioned estimate() usage details for indexeddb test.
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub-expected.txt
index de5b4adb..40208feb 100644
--- a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/external/wpt/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Partitioned estimate() usage details for service workers test. assert_true: Usage should be 0. expected true got false
+PASS Partitioned estimate() usage details for service workers test.
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitPersistentStorage-quota-usage-details.tentative.sub-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitPersistentStorage-quota-usage-details.tentative.sub-expected.txt
index be2e9ff..84cbb5c 100644
--- a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitPersistentStorage-quota-usage-details.tentative.sub-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitPersistentStorage-quota-usage-details.tentative.sub-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Partitioned webkitPersistentStorage quota and usage details test. assert_true: Usage should be 0 expected true got false
+FAIL Partitioned webkitPersistentStorage quota and usage details test. assert_true: Quota should be 0 expected true got false
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-persistent-quota-usage-details.tentative.sub-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-persistent-quota-usage-details.tentative.sub-expected.txt
index 8821240..657efd6 100644
--- a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-persistent-quota-usage-details.tentative.sub-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-persistent-quota-usage-details.tentative.sub-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Partitioned webkitStorageInfo persistent quota request and usage details test. assert_true: Usage should be 0 expected true got false
+FAIL Partitioned webkitStorageInfo persistent quota request and usage details test. assert_true: Quota should be 0 expected true got false
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-temporary-quota-usage-details.tentative.sub-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-temporary-quota-usage-details.tentative.sub-expected.txt
index a9e72bc..aac965f 100644
--- a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-temporary-quota-usage-details.tentative.sub-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitStorageInfo-temporary-quota-usage-details.tentative.sub-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Partitioned webkitStorageInfo temporary quota request and usage details test. assert_true: Usage should be 0 expected true got false
+PASS Partitioned webkitStorageInfo temporary quota request and usage details test.
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitTemporaryStorage-usage-details.tentative.sub-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitTemporaryStorage-usage-details.tentative.sub-expected.txt
index b2cd7cee..b6e0afb 100644
--- a/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitTemporaryStorage-usage-details.tentative.sub-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/virtual/third-party-storage-partitioning/wpt_internal/storage/quota/partitioned-webkitTemporaryStorage-usage-details.tentative.sub-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Partitioned webkitTemporaryStorage usage details test. assert_true: Usage should be 0 expected true got false
+PASS Partitioned webkitTemporaryStorage usage details test.
 Harness: the test ran to completion.
 
diff --git a/third_party/libaom/README.chromium b/third_party/libaom/README.chromium
index 05a3bbdc..6f2ee40 100644
--- a/third_party/libaom/README.chromium
+++ b/third_party/libaom/README.chromium
@@ -3,9 +3,9 @@
 URL: https://aomedia.googlesource.com/aom/
 Version: 3.1.2
 CPEPrefix: cpe:/a:aomedia:aomedia:3.1.2
-Date: Friday May 06 2022
+Date: Thursday May 12 2022
 Branch: main
-Commit: ef14518388c0a41c1d3b992f75d5886c9da33832
+Commit: a1d676b44f686409b164157a874f95c9e9381a8d
 License: BSD
 License File: source/libaom/LICENSE
 Security Critical: yes
diff --git a/third_party/libaom/source/config/config/aom_version.h b/third_party/libaom/source/config/config/aom_version.h
index 314f835f..8b0ead2 100644
--- a/third_party/libaom/source/config/config/aom_version.h
+++ b/third_party/libaom/source/config/config/aom_version.h
@@ -12,8 +12,8 @@
 #define VERSION_MAJOR 3
 #define VERSION_MINOR 3
 #define VERSION_PATCH 0
-#define VERSION_EXTRA "604-gef1451838"
+#define VERSION_EXTRA "617-ga1d676b44"
 #define VERSION_PACKED \
   ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))
-#define VERSION_STRING_NOSP "3.3.0-604-gef1451838"
-#define VERSION_STRING " 3.3.0-604-gef1451838"
+#define VERSION_STRING_NOSP "3.3.0-617-ga1d676b44"
+#define VERSION_STRING " 3.3.0-617-ga1d676b44"
diff --git a/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h
index f9349349..480d30fb 100644
--- a/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h
@@ -199,12 +199,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -335,12 +329,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -471,12 +459,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -607,12 +589,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1181,12 +1157,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2372,12 +2342,6 @@
                                    const uint8_t* left);
 #define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_neon
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -3585,12 +3549,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3725,12 +3683,6 @@
                                     const uint8_t* left);
 #define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_neon
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -3901,12 +3853,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -4504,12 +4450,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h
index f9349349..480d30fb 100644
--- a/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h
@@ -199,12 +199,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -335,12 +329,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -471,12 +459,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -607,12 +589,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1181,12 +1157,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2372,12 +2342,6 @@
                                    const uint8_t* left);
 #define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_neon
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -3585,12 +3549,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3725,12 +3683,6 @@
                                     const uint8_t* left);
 #define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_neon
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -3901,12 +3853,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -4504,12 +4450,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h
index c54453e4..3cc048a7 100644
--- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h
@@ -227,12 +227,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -375,12 +369,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -523,12 +511,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -671,12 +653,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1281,12 +1257,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2645,12 +2615,6 @@
                                              const uint8_t* above,
                                              const uint8_t* left);
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -4077,12 +4041,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -4232,12 +4190,6 @@
                                               const uint8_t* above,
                                               const uint8_t* left);
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -4450,12 +4402,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -5167,12 +5113,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h
index f9349349..480d30fb 100644
--- a/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h
@@ -199,12 +199,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -335,12 +329,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -471,12 +459,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -607,12 +589,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1181,12 +1157,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2372,12 +2342,6 @@
                                    const uint8_t* left);
 #define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_neon
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -3585,12 +3549,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3725,12 +3683,6 @@
                                     const uint8_t* left);
 #define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_neon
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -3901,12 +3853,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -4504,12 +4450,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/linux/arm/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm/config/aom_dsp_rtcd.h
index 13598cb..df53379 100644
--- a/third_party/libaom/source/config/linux/arm/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm/config/aom_dsp_rtcd.h
@@ -164,12 +164,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -284,12 +278,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -404,12 +392,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -524,12 +506,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1057,12 +1033,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2034,12 +2004,6 @@
                                 const uint8_t* left);
 #define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -2969,12 +2933,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3089,12 +3047,6 @@
                                  const uint8_t* left);
 #define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -3209,12 +3161,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3678,12 +3624,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h
index f9349349..480d30fb 100644
--- a/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h
@@ -199,12 +199,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -335,12 +329,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -471,12 +459,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -607,12 +589,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1181,12 +1157,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2372,12 +2342,6 @@
                                    const uint8_t* left);
 #define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_neon
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -3585,12 +3549,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3725,12 +3683,6 @@
                                     const uint8_t* left);
 #define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_neon
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -3901,12 +3853,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -4504,12 +4450,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/linux/generic/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/generic/config/aom_dsp_rtcd.h
index e2d3660..7ec152b 100644
--- a/third_party/libaom/source/config/linux/generic/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/linux/generic/config/aom_dsp_rtcd.h
@@ -164,12 +164,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -284,12 +278,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -404,12 +392,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -524,12 +506,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1057,12 +1033,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2034,12 +2004,6 @@
                                 const uint8_t* left);
 #define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -2969,12 +2933,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3089,12 +3047,6 @@
                                  const uint8_t* left);
 #define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -3209,12 +3161,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3678,12 +3624,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/linux/ia32/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/ia32/config/aom_dsp_rtcd.h
index a98484a..a76e597b 100644
--- a/third_party/libaom/source/config/linux/ia32/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/linux/ia32/config/aom_dsp_rtcd.h
@@ -390,12 +390,6 @@
                                     const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_sse2
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -628,12 +622,6 @@
                                      const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_sse2
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -866,12 +854,6 @@
                                 const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_sse2
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -1104,12 +1086,6 @@
                                     const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_sse2
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -2322,12 +2298,6 @@
                                const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_sse2
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -4732,12 +4702,6 @@
                                              const uint8_t* above,
                                              const uint8_t* left);
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -6709,12 +6673,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -6962,12 +6920,6 @@
                                               const uint8_t* above,
                                               const uint8_t* left);
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -7215,12 +7167,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -8713,12 +8659,6 @@
                                const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_sse2
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/linux/x64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/x64/config/aom_dsp_rtcd.h
index 1d9aad06..9f1f936 100644
--- a/third_party/libaom/source/config/linux/x64/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/linux/x64/config/aom_dsp_rtcd.h
@@ -390,12 +390,6 @@
                                     const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_sse2
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -628,12 +622,6 @@
                                      const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_sse2
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -866,12 +854,6 @@
                                 const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_sse2
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -1104,12 +1086,6 @@
                                     const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_sse2
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -2325,12 +2301,6 @@
                                const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_sse2
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -4735,12 +4705,6 @@
                                              const uint8_t* above,
                                              const uint8_t* left);
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -6736,12 +6700,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -6989,12 +6947,6 @@
                                               const uint8_t* above,
                                               const uint8_t* left);
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -7242,12 +7194,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -8749,12 +8695,6 @@
                                const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_sse2
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h
index f9349349..480d30fb 100644
--- a/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h
@@ -199,12 +199,6 @@
                                  const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -335,12 +329,6 @@
                                   const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -471,12 +459,6 @@
                              const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -607,12 +589,6 @@
                                  const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -1181,12 +1157,6 @@
                             const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_c
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -2372,12 +2342,6 @@
                                    const uint8_t* left);
 #define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_neon
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -3585,12 +3549,6 @@
                                    const uint8_t* left);
 #define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -3725,12 +3683,6 @@
                                     const uint8_t* left);
 #define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_neon
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -3901,12 +3853,6 @@
                                    const uint8_t* left);
 #define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -4504,12 +4450,6 @@
                             const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_c
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/win/ia32/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/ia32/config/aom_dsp_rtcd.h
index a98484a..a76e597b 100644
--- a/third_party/libaom/source/config/win/ia32/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/win/ia32/config/aom_dsp_rtcd.h
@@ -390,12 +390,6 @@
                                     const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_sse2
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -628,12 +622,6 @@
                                      const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_sse2
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -866,12 +854,6 @@
                                 const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_sse2
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -1104,12 +1086,6 @@
                                     const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_sse2
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -2322,12 +2298,6 @@
                                const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_sse2
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -4732,12 +4702,6 @@
                                              const uint8_t* above,
                                              const uint8_t* left);
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -6709,12 +6673,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -6962,12 +6920,6 @@
                                               const uint8_t* above,
                                               const uint8_t* left);
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -7215,12 +7167,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -8713,12 +8659,6 @@
                                const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_sse2
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/libaom/source/config/win/x64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/x64/config/aom_dsp_rtcd.h
index 1d9aad06..9f1f936 100644
--- a/third_party/libaom/source/config/win/x64/config/aom_dsp_rtcd.h
+++ b/third_party/libaom/source/config/win/x64/config/aom_dsp_rtcd.h
@@ -390,12 +390,6 @@
                                     const uint8_t* left);
 #define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_sse2
 
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
 void aom_dc_128_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -628,12 +622,6 @@
                                      const uint8_t* left);
 #define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_sse2
 
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
 void aom_dc_left_predictor_32x16_c(uint8_t* dst,
                                    ptrdiff_t y_stride,
                                    const uint8_t* above,
@@ -866,12 +854,6 @@
                                 const uint8_t* left);
 #define aom_dc_predictor_16x8 aom_dc_predictor_16x8_sse2
 
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
 void aom_dc_predictor_32x16_c(uint8_t* dst,
                               ptrdiff_t y_stride,
                               const uint8_t* above,
@@ -1104,12 +1086,6 @@
                                     const uint8_t* left);
 #define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_sse2
 
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
 void aom_dc_top_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -2325,12 +2301,6 @@
                                const uint8_t* left);
 #define aom_h_predictor_16x8 aom_h_predictor_16x8_sse2
 
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
 void aom_h_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
@@ -4735,12 +4705,6 @@
                                              const uint8_t* above,
                                              const uint8_t* left);
 
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
 void aom_paeth_predictor_32x16_c(uint8_t* dst,
                                  ptrdiff_t y_stride,
                                  const uint8_t* above,
@@ -6736,12 +6700,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
 void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -6989,12 +6947,6 @@
                                               const uint8_t* above,
                                               const uint8_t* left);
 
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
 void aom_smooth_predictor_32x16_c(uint8_t* dst,
                                   ptrdiff_t y_stride,
                                   const uint8_t* above,
@@ -7242,12 +7194,6 @@
                                                 const uint8_t* above,
                                                 const uint8_t* left);
 
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
 void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
                                     ptrdiff_t y_stride,
                                     const uint8_t* above,
@@ -8749,12 +8695,6 @@
                                const uint8_t* left);
 #define aom_v_predictor_16x8 aom_v_predictor_16x8_sse2
 
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
 void aom_v_predictor_32x16_c(uint8_t* dst,
                              ptrdiff_t y_stride,
                              const uint8_t* above,
diff --git a/third_party/r8/3pp/3pp.pb b/third_party/r8/3pp/3pp.pb
index c0d5f78..111ebed 100644
--- a/third_party/r8/3pp/3pp.pb
+++ b/third_party/r8/3pp/3pp.pb
@@ -2,6 +2,7 @@
   source {
     script { name: "fetch.py" }
     unpack_archive: true
+    patch_dir: "patches"
   }
 
   build {
diff --git a/third_party/wpt_tools/README.chromium b/third_party/wpt_tools/README.chromium
index aeb5bb8..cf02297e 100644
--- a/third_party/wpt_tools/README.chromium
+++ b/third_party/wpt_tools/README.chromium
@@ -1,7 +1,7 @@
 Name: web-platform-tests - Test Suites for Web Platform specifications
 Short Name: wpt
 URL: https://github.com/web-platform-tests/wpt/
-Version: bfe011aa848f680dc28a4c353bd51e08caffb757
+Version: dbbf0e956fda3e10be80bac753f2fb7e8830f86a
 License: LICENSES FOR W3C TEST SUITES (https://www.w3.org/Consortium/Legal/2008/03-bsd-license.html)
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_edge.txt b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_edge.txt
index 01e467a..c52d1a5 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_edge.txt
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_edge.txt
@@ -1 +1 @@
-selenium==4.1.3
+selenium==4.1.5
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_ie.txt b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_ie.txt
index a829279..5943548 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_ie.txt
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_ie.txt
@@ -1,2 +1,2 @@
 mozprocess==1.3.0
-selenium==4.1.3
+selenium==4.1.5
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_opera.txt b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_opera.txt
index a829279..5943548 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_opera.txt
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_opera.txt
@@ -1,2 +1,2 @@
 mozprocess==1.3.0
-selenium==4.1.3
+selenium==4.1.5
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt
index 7a28278..ab01a822 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt
@@ -1,2 +1,2 @@
-selenium==4.1.3
+selenium==4.1.5
 requests==2.27.1
diff --git a/tools/OWNERS b/tools/OWNERS
index ba6352c6..3b85ff1 100644
--- a/tools/OWNERS
+++ b/tools/OWNERS
@@ -25,7 +25,7 @@
 
 per-file gyp-explain.py=thakis@chromium.org
 
-per-file gypv8sh.py=jochen@chromium.org
+per-file gypv8sh.py=machenbach@chromium.org
 
 per-file include_tracer.py=thakis@chromium.org
 
diff --git a/tools/checkperms/checkperms.py b/tools/checkperms/checkperms.py
index 60c6ea7..40fcb76 100755
--- a/tools/checkperms/checkperms.py
+++ b/tools/checkperms/checkperms.py
@@ -481,7 +481,7 @@
     options.root = os.path.abspath(options.root)
 
   if options.files:
-    errors = list(check_files(options.root, options.files))
+    errors = check_files(options.root, options.files)
   elif options.file_list:
     with open(options.file_list) as file_list:
       files = file_list.read().splitlines()
@@ -495,6 +495,9 @@
       print('Processed %s files, %d files where tested for shebang/ELF/Mach-O '
             'header' % (api.count, api.count_read_header))
 
+  # Convert to an actual list.
+  errors = list(errors)
+
   if options.json:
     with open(options.json, 'w') as f:
       json.dump(errors, f)
diff --git a/tools/clang/scripts/package.py b/tools/clang/scripts/package.py
index 0dfb991..09f56e2 100755
--- a/tools/clang/scripts/package.py
+++ b/tools/clang/scripts/package.py
@@ -28,8 +28,9 @@
 THIRD_PARTY_DIR = os.path.join(THIS_DIR, '..', '..', '..', 'third_party')
 BUILDTOOLS_DIR = os.path.join(THIS_DIR, '..', '..', '..', 'buildtools')
 LLVM_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm')
-LLVM_BOOTSTRAP_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-bootstrap')
-LLVM_BOOTSTRAP_INSTALL_DIR = os.path.join(THIRD_PARTY_DIR,
+LLVM_BOOTSTRAP_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-build-tools',
+                                  'llvm-bootstrap')
+LLVM_BOOTSTRAP_INSTALL_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-build-tools',
                                           'llvm-bootstrap-install')
 LLVM_BUILD_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-build')
 LLVM_RELEASE_DIR = os.path.join(LLVM_BUILD_DIR, 'Release+Asserts')
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 112ca71..f15dcf6 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -55,6 +55,7 @@
       'android-archive-rel': 'android_without_codecs_release_bot_minimal_symbols_reclient',
       'android-official': 'android_official_optimize_reclient',
       'fuchsia-official': 'fuchsia_official_optimize_goma',
+      'lacros-arm-archive-rel': 'chromeos_arm-generic_lacros_rel_reclient',
       'lacros64-archive-rel': 'chromeos_amd64-generic_lacros_rel',
       'linux-archive-dbg': 'debug_bot_reclient',
       'linux-archive-rel': 'release_bot_reclient',
diff --git a/tools/mb/mb_config_expectations/chromium.json b/tools/mb/mb_config_expectations/chromium.json
index d85088b..457bcad 100644
--- a/tools/mb/mb_config_expectations/chromium.json
+++ b/tools/mb/mb_config_expectations/chromium.json
@@ -36,6 +36,19 @@
       "use_goma": true
     }
   },
+  "lacros-arm-archive-rel": {
+    "args_file": "//build/args/chromeos/arm-generic-crostoolchain.gni",
+    "gn_args": {
+      "chromeos_is_browser_only": true,
+      "dcheck_always_on": false,
+      "is_chromeos_device": true,
+      "is_debug": false,
+      "ozone_platform_headless": true,
+      "target_os": "chromeos",
+      "use_rbe": true,
+      "use_remoteexec": true
+    }
+  },
   "lacros64-archive-rel": {
     "args_file": "//build/args/chromeos/amd64-generic-crostoolchain.gni",
     "gn_args": {
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 250d962c..f77fa05 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -17671,6 +17671,13 @@
   <description>User pressed 'Find in page' in the app menu.</description>
 </action>
 
+<action name="MobileMenuFollow">
+  <owner>adamta@google.org</owner>
+  <owner>sczs@chromium.org</owner>
+  <owner>tinazwang@chromium.org</owner>
+  <description>User pressed the follow option in the app menu.</description>
+</action>
+
 <action name="MobileMenuForward">
   <owner>aurimas@chromium.org</owner>
   <description>User pressed the forward icon in the app menu.</description>
@@ -17883,6 +17890,13 @@
   <description>User pressed the 'Translate' in the app menu.</description>
 </action>
 
+<action name="MobileMenuUnfollow">
+  <owner>adamta@google.org</owner>
+  <owner>sczs@chromium.org</owner>
+  <owner>tinazwang@chromium.org</owner>
+  <description>User pressed the unfollow option in the app menu.</description>
+</action>
+
 <action name="MobileMenuVoiceSearch">
   <owner>gambard@chromium.org</owner>
   <description>User pressed 'Voice Search' in the app menu.</description>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 22999a5..1756d52 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -18065,6 +18065,7 @@
   <int value="83" label="Auto-darken web content"/>
   <int value="84" label="Request desktop site"/>
   <int value="85" label="Federated identity browser JavaScript API"/>
+  <int value="86" label="Notification interactions"/>
 </enum>
 
 <enum name="ContentTypeParseableResult">
@@ -55841,6 +55842,7 @@
   <int value="-1230610048" label="SyncWifiConfigurations:disabled"/>
   <int value="-1229114522"
       label="ClearCrossSiteCrossBrowsingContextGroupWindowName:disabled"/>
+  <int value="-1228782289" label="EventPath:disabled"/>
   <int value="-1228546373"
       label="UseLookalikesForNavigationSuggestions:enabled"/>
   <int value="-1227660915" label="WebContentsOcclusion:disabled"/>
@@ -57263,6 +57265,7 @@
   <int value="-278347667" label="default-tile-height"/>
   <int value="-277144896" label="enable-viewport-meta"/>
   <int value="-276946251" label="AppServiceShelf:disabled"/>
+  <int value="-276907217" label="EventPath:enabled"/>
   <int value="-276260362" label="GamepadVibration:enabled"/>
   <int value="-275870837"
       label="OmniboxUIExperimentHideSuggestionUrlPath:enabled"/>
@@ -58865,6 +58868,7 @@
   <int value="797924041" label="DeferredShaping:enabled"/>
   <int value="798696013" label="ImeInputLogicMozc:enabled"/>
   <int value="799680074" label="ContextualSearchTranslationModel:enabled"/>
+  <int value="801865174" label="NetworkServiceInProcess2:enabled"/>
   <int value="802463708" label="WebViewSurfaceControl:enabled"/>
   <int value="802930463" label="ThrottleForegroundTimers:disabled"/>
   <int value="803282885" label="PreferHtmlOverPlugins:disabled"/>
@@ -59436,6 +59440,7 @@
   <int value="1190035852" label="MediaRemoting:enabled"/>
   <int value="1191531211" label="RawClipboard:disabled"/>
   <int value="1192302892" label="gesture-typing"/>
+  <int value="1192894768" label="NetworkServiceInProcess2:disabled"/>
   <int value="1192913630" label="OfflinePagesBackgroundLoading:disabled"/>
   <int value="1193385506" label="OmniboxLooseMaxLimitOnDedicatedRows:enabled"/>
   <int value="1194496204" label="NewWallpaperPicker:enabled"/>
@@ -60196,8 +60201,6 @@
       label="OmniboxOnFocusSuggestionsContextualWebAllowSRP:disabled"/>
   <int value="1708118086" label="TextFragmentAnchor:disabled"/>
   <int value="1709255374" label="DragAndDropAndroid:enabled"/>
-  <int value="1709898387"
-      label="AutofillUseUnassociatedListedElements:enabled"/>
   <int value="1710630380"
       label="AutofillEnableSupportForMoreStructureInNames:enabled"/>
   <int value="1710663404" label="CastForceEnableRemotingQuery:disabled"/>
@@ -60247,8 +60250,6 @@
       label="AutofillSuggestVirtualCardsOnIncompleteForm:disabled"/>
   <int value="1742398600"
       label="OmniboxUIExperimentBoldUserTextOnSearchSuggestions:enabled"/>
-  <int value="1743062852"
-      label="AutofillUseUnassociatedListedElements:disabled"/>
   <int value="1745053254" label="ClickToCallOpenDialerDirectly:enabled"/>
   <int value="1747279677" label="disable-delegated-renderer"/>
   <int value="1748481830" label="AppManagement:enabled"/>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index b1af93f..70861a9 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -1253,6 +1253,9 @@
 
 <histogram name="Autofill.FindFormControlElementByUniqueRendererIdDuration"
     units="microseconds" expires_after="2022-10-30">
+  <obsolete>
+    The experiment has been launched in 05/2022.
+  </obsolete>
   <owner>evih@google.com</owner>
   <owner>schwering@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
@@ -1268,6 +1271,9 @@
 
 <histogram name="Autofill.FindFormControlElementsByUniqueRendererIdDuration"
     units="microseconds" expires_after="2022-10-30">
+  <obsolete>
+    The experiment has been launched in 05/2022.
+  </obsolete>
   <owner>evih@google.com</owner>
   <owner>schwering@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
@@ -1541,6 +1547,9 @@
 
 <histogram name="Autofill.GetUnownedFormFieldsDuration" units="microseconds"
     expires_after="2022-10-04">
+  <obsolete>
+    The experiment has been launched in 05/2022.
+  </obsolete>
   <owner>evih@google.com</owner>
   <owner>schwering@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
@@ -1556,6 +1565,9 @@
 
 <histogram name="Autofill.HasPasswordFieldDuration" units="microseconds"
     expires_after="2022-10-30">
+  <obsolete>
+    The experiment has been launched in 05/2022.
+  </obsolete>
   <owner>evih@google.com</owner>
   <owner>schwering@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
@@ -1679,6 +1691,9 @@
 
 <histogram name="Autofill.IsSomeControlElementVisibleDuration"
     units="microseconds" expires_after="2022-10-30">
+  <obsolete>
+    The experiment has been launched in 05/2022.
+  </obsolete>
   <owner>evih@google.com</owner>
   <owner>schwering@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/cryptohome/histograms.xml b/tools/metrics/histograms/metadata/cryptohome/histograms.xml
index 4a59f0c..a0a5b9a 100644
--- a/tools/metrics/histograms/metadata/cryptohome/histograms.xml
+++ b/tools/metrics/histograms/metadata/cryptohome/histograms.xml
@@ -304,7 +304,6 @@
 <histogram name="Cryptohome.LegacyCodePathUsage.{Location}"
     enum="BooleanCodePathUsage" expires_after="2022-01-09">
   <owner>hardikgoyal@chromium.org</owner>
-  <owner>kerrnel@chromium.org</owner>
   <owner>cros-hwsec+uma@chromium.org</owner>
   <summary>
     This will report usage of {Location} paths to see if it is actually being
@@ -495,9 +494,9 @@
 </histogram>
 
 <histogram name="Cryptohome.TimeSessionUnlock" units="ms"
-    expires_after="2022-04-03">
-  <owner>kerrnel@chromium.org</owner>
-  <owner>mnissler@chromium.org</owner>
+    expires_after="2023-04-03">
+  <owner>hardikgoyal@google.com</owner>
+  <owner>betuls@google.com</owner>
   <summary>
     The amount of time (ms) for Chrome OS cryptohome daemon to verify the user's
     password during an unlock operation.
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml
index a87fc234..c05fd68 100644
--- a/tools/metrics/histograms/metadata/history/histograms.xml
+++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -690,7 +690,10 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.NumBatchesProcessedForVisits"
-    units="number of batches" expires_after="2022-09-18">
+    units="number of batches" expires_after="2022-05-11">
+  <obsolete>
+    Obsolete as of 05/2022.
+  </obsolete>
   <owner>mcrouse@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <summary>
@@ -743,7 +746,10 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.ProcessBatchOfVisits.BatchSize"
-    units="number visits" expires_after="2022-09-18">
+    units="number visits" expires_after="2022-05-11">
+  <obsolete>
+    Obsolete as of 05/2022.
+  </obsolete>
   <owner>tbansal@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/local/histograms.xml b/tools/metrics/histograms/metadata/local/histograms.xml
index 3630088..eca17e5 100644
--- a/tools/metrics/histograms/metadata/local/histograms.xml
+++ b/tools/metrics/histograms/metadata/local/histograms.xml
@@ -371,15 +371,6 @@
   </summary>
 </histogram>
 
-<histogram name="LocalStorageContext.MapLoadError" enum="LevelDBStatus"
-    expires_after="M87">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The reason loading an initial snapshot of the localstorage data for an
-    origin failed.
-  </summary>
-</histogram>
-
 <histogram name="LocalStorageContext.OpenError" enum="LocalStorageOpenError"
     expires_after="M87">
   <owner>mek@chromium.org</owner>
diff --git a/tools/perf/core/bot_platforms.py b/tools/perf/core/bot_platforms.py
index e07ad34d..7ae00ab0 100644
--- a/tools/perf/core/bot_platforms.py
+++ b/tools/perf/core/bot_platforms.py
@@ -517,6 +517,12 @@
     26,
     'linux',
     executables=_LINUX_EXECUTABLE_CONFIGS)
+LINUX_PGO = PerfPlatform('linux-perf-pgo',
+                         'Ubuntu-18.04, 8 core, NVIDIA Quadro P400',
+                         _LINUX_BENCHMARK_CONFIGS,
+                         26,
+                         'linux',
+                         executables=_LINUX_EXECUTABLE_CONFIGS)
 LINUX_REL = PerfPlatform(
     'linux-perf-rel',
     'Ubuntu-18.04, 8 core, NVIDIA Quadro P400',
@@ -533,6 +539,13 @@
     26,
     'mac',
     executables=_MAC_HIGH_END_EXECUTABLE_CONFIGS)
+MAC_HIGH_END_LAPTOP_PGO = PerfPlatform(
+    'mac-laptop_high_end-perf-pgo',
+    'MacBook Pro, Core i7 2.8 GHz, 16GB RAM, 256GB SSD, Radeon 55',
+    _MAC_HIGH_END_BENCHMARK_CONFIGS,
+    26,
+    'mac',
+    executables=_MAC_HIGH_END_EXECUTABLE_CONFIGS)
 MAC_LOW_END_LAPTOP = PerfPlatform(
     'mac-laptop_low_end-perf',
     'MacBook Air, Core i5 1.8 GHz, 8GB RAM, 128GB SSD, HD Graphics',
@@ -540,6 +553,13 @@
     26,
     'mac',
     executables=_MAC_LOW_END_EXECUTABLE_CONFIGS)
+MAC_LOW_END_LAPTOP_PGO = PerfPlatform(
+    'mac-laptop_low_end-perf-pgo',
+    'MacBook Air, Core i5 1.8 GHz, 8GB RAM, 128GB SSD, HD Graphics',
+    _MAC_LOW_END_BENCHMARK_CONFIGS,
+    26,
+    'mac',
+    executables=_MAC_LOW_END_EXECUTABLE_CONFIGS)
 MAC_M1_MINI_2020 = PerfPlatform(
     'mac-m1_mini_2020-perf',
     'Mac M1 Mini 2020',
@@ -547,6 +567,13 @@
     26,
     'mac',
     executables=_MAC_M1_MINI_2020_EXECUTABLE_CONFIGS)
+MAC_M1_MINI_2020_PGO = PerfPlatform(
+    'mac-m1_mini_2020-perf-pgo',
+    'Mac M1 Mini 2020',
+    _MAC_M1_MINI_2020_BENCHMARK_CONFIGS,
+    26,
+    'mac',
+    executables=_MAC_M1_MINI_2020_EXECUTABLE_CONFIGS)
 
 # Win
 WIN_10_LOW_END = PerfPlatform(
@@ -557,19 +584,41 @@
     # TODO(crbug.com/1305291): Increase the count back to 46 when issue fixed.
     40,
     'win')
+WIN_10_LOW_END_PGO = PerfPlatform(
+    'win-10_laptop_low_end-perf-pgo',
+    'Low end windows 10 HP laptops. HD Graphics 5500, x86-64-i3-5005U, '
+    'SSD, 4GB RAM.',
+    _WIN_10_LOW_END_BENCHMARK_CONFIGS,
+    # TODO(crbug.com/1305291): Increase the count back to 46 when issue fixed.
+    40,
+    'win')
 WIN_10 = PerfPlatform(
     'win-10-perf',
     'Windows Intel HD 630 towers, Core i7-7700 3.6 GHz, 16GB RAM,'
     ' Intel Kaby Lake HD Graphics 630', _WIN_10_BENCHMARK_CONFIGS,
     26, 'win', executables=_WIN_10_EXECUTABLE_CONFIGS)
+WIN_10_PGO = PerfPlatform(
+    'win-10-perf-pgo',
+    'Windows Intel HD 630 towers, Core i7-7700 3.6 GHz, 16GB RAM,'
+    ' Intel Kaby Lake HD Graphics 630',
+    _WIN_10_BENCHMARK_CONFIGS,
+    26,
+    'win',
+    executables=_WIN_10_EXECUTABLE_CONFIGS)
 WIN_10_AMD_LAPTOP = PerfPlatform('win-10_amd_laptop-perf',
                                  'Windows 10 Laptop with AMD chipset.',
                                  _WIN_10_AMD_LAPTOP_BENCHMARK_CONFIGS, 5, 'win')
+WIN_10_AMD_LAPTOP_PGO = PerfPlatform('win-10_amd_laptop-perf-pgo',
+                                     'Windows 10 Laptop with AMD chipset.',
+                                     _WIN_10_AMD_LAPTOP_BENCHMARK_CONFIGS, 5,
+                                     'win')
 
 # Android
 ANDROID_GO = PerfPlatform(
     'android-go-perf', 'Android O (gobo)', _ANDROID_GO_BENCHMARK_CONFIGS,
     19, 'android')
+ANDROID_GO_PGO = PerfPlatform('android-go-perf-pgo', 'Android O (gobo)',
+                              _ANDROID_GO_BENCHMARK_CONFIGS, 19, 'android')
 ANDROID_GO_WEBVIEW = PerfPlatform('android-go_webview-perf',
                                   'Android OPM1.171019.021 (gobo)',
                                   _ANDROID_GO_WEBVIEW_BENCHMARK_CONFIGS, 13,
@@ -580,9 +629,19 @@
                               28,
                               'android',
                               executables=_ANDROID_PIXEL2_EXECUTABLE_CONFIGS)
+ANDROID_PIXEL2_PGO = PerfPlatform(
+    'android-pixel2-perf-pgo',
+    'Android OPM1.171019.021',
+    _ANDROID_PIXEL2_BENCHMARK_CONFIGS,
+    28,
+    'android',
+    executables=_ANDROID_PIXEL2_EXECUTABLE_CONFIGS)
 ANDROID_PIXEL2_WEBVIEW = PerfPlatform(
     'android-pixel2_webview-perf', 'Android OPM1.171019.021',
     _ANDROID_PIXEL2_WEBVIEW_BENCHMARK_CONFIGS, 21, 'android')
+ANDROID_PIXEL2_WEBVIEW_PGO = PerfPlatform(
+    'android-pixel2_webview-perf-pgo', 'Android OPM1.171019.021',
+    _ANDROID_PIXEL2_WEBVIEW_BENCHMARK_CONFIGS, 21, 'android')
 ANDROID_PIXEL2_WEBLAYER = PerfPlatform(
     'android-pixel2_weblayer-perf', 'Android OPM1.171019.021',
     _ANDROID_PIXEL2_WEBLAYER_BENCHMARK_CONFIGS, 4, 'android')
@@ -592,16 +651,29 @@
                               28,
                               'android',
                               executables=_ANDROID_PIXEL4_EXECUTABLE_CONFIGS)
+ANDROID_PIXEL4_PGO = PerfPlatform(
+    'android-pixel4-perf-pgo',
+    'Android R',
+    _ANDROID_PIXEL4_BENCHMARK_CONFIGS,
+    28,
+    'android',
+    executables=_ANDROID_PIXEL4_EXECUTABLE_CONFIGS)
 ANDROID_PIXEL4_WEBVIEW = PerfPlatform(
     'android-pixel4_webview-perf', 'Android R',
     _ANDROID_PIXEL4_WEBVIEW_BENCHMARK_CONFIGS, 21, 'android')
 ANDROID_PIXEL4_WEBLAYER = PerfPlatform(
     'android-pixel4_weblayer-perf', 'Android R',
     _ANDROID_PIXEL4_WEBLAYER_BENCHMARK_CONFIGS, 4, 'android')
+ANDROID_PIXEL4_WEBLAYER_PGO = PerfPlatform(
+    'android-pixel4_weblayer-perf-pgo', 'Android R',
+    _ANDROID_PIXEL4_WEBLAYER_BENCHMARK_CONFIGS, 4, 'android')
 ANDROID_PIXEL4A_POWER = PerfPlatform('android-pixel4a_power-perf',
                                      'Android QD4A.200102.001.A1',
                                      _ANDROID_PIXEL4A_POWER_BENCHMARK_CONFIGS,
                                      12, 'android')
+ANDROID_PIXEL4A_POWER_PGO = PerfPlatform(
+    'android-pixel4a_power-perf-pgo', 'Android QD4A.200102.001.A1',
+    _ANDROID_PIXEL4A_POWER_BENCHMARK_CONFIGS, 12, 'android')
 
 # Cros/Lacros
 LACROS_EVE_PERF = PerfPlatform('lacros-eve-perf', '',
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py
index 252cc0f4..d507ff6 100755
--- a/tools/perf/core/perf_data_generator.py
+++ b/tools/perf/core/perf_data_generator.py
@@ -724,6 +724,21 @@
             'os': 'Android',
         },
     },
+    'android-go-perf-pgo': {
+        'tests': [{
+            'name': 'performance_test_suite',
+            'isolate': 'performance_test_suite_android_clank_chrome',
+        }],
+        'platform':
+        'android-chrome',
+        'dimension': {
+            'device_os': 'OMB1.180119.001',
+            'device_type': 'gobo',
+            'device_os_flavor': 'google',
+            'pool': 'chrome.tests.perf',
+            'os': 'Android',
+        },
+    },
     'android-go_webview-perf': {
         'tests': [{
             'isolate': 'performance_webview_test_suite',
@@ -750,6 +765,19 @@
             'device_os_flavor': 'google',
         },
     },
+    'android-pixel2_webview-perf-pgo': {
+        'tests': [{
+            'isolate': 'performance_webview_test_suite',
+        }],
+        'platform': 'android-webview-google',
+        'dimension': {
+            'pool': 'chrome.tests.perf-webview',
+            'os': 'Android',
+            'device_type': 'walleye',
+            'device_os': 'OPM1.171019.021',
+            'device_os_flavor': 'google',
+        },
+    },
     'android-pixel2_weblayer-perf': {
         'tests': [{
             'isolate': 'performance_weblayer_test_suite',
@@ -778,6 +806,21 @@
             'device_os_flavor': 'google',
         },
     },
+    'android-pixel2-perf-pgo': {
+        'tests': [{
+            'isolate':
+            'performance_test_suite_android_clank_monochrome_64_32_bundle',
+        }],
+        'platform':
+        'android-chrome-64-bundle',
+        'dimension': {
+            'pool': 'chrome.tests.perf',
+            'os': 'Android',
+            'device_type': 'walleye',
+            'device_os': 'OPM1.171019.021',
+            'device_os_flavor': 'google',
+        },
+    },
     'android-pixel4_webview-perf': {
         'tests': [{
             'isolate': 'performance_webview_test_suite',
@@ -804,6 +847,19 @@
             'device_os_flavor': 'google',
         },
     },
+    'android-pixel4_weblayer-perf-pgo': {
+        'tests': [{
+            'isolate': 'performance_weblayer_test_suite',
+        }],
+        'platform': 'android-weblayer-trichrome-google-bundle',
+        'dimension': {
+            'pool': 'chrome.tests.perf-weblayer',
+            'os': 'Android',
+            'device_type': 'flame',
+            'device_os': 'RP1A.201105.002',
+            'device_os_flavor': 'google',
+        },
+    },
     'android-pixel4-perf': {
         'tests': [{
             'isolate':
@@ -819,6 +875,21 @@
             'device_os_flavor': 'google',
         },
     },
+    'android-pixel4-perf-pgo': {
+        'tests': [{
+            'isolate':
+            'performance_test_suite_android_clank_trichrome_bundle',
+        }],
+        'platform':
+        'android-trichrome-bundle',
+        'dimension': {
+            'pool': 'chrome.tests.perf',
+            'os': 'Android',
+            'device_type': 'flame',
+            'device_os': 'RP1A.201105.002',
+            'device_os_flavor': 'google',
+        },
+    },
     'android-pixel4a_power-perf': {
         'tests': [{
             'isolate': 'performance_test_suite_android_clank_chrome',
@@ -836,6 +907,23 @@
             'device_os_flavor': 'google',
         },
     },
+    'android-pixel4a_power-perf-pgo': {
+        'tests': [{
+            'isolate': 'performance_test_suite_android_clank_chrome',
+            'extra_args': [
+                '--experimental-tbmv3-metrics',
+            ],
+        }],
+        'platform':
+        'android-chrome',
+        'dimension': {
+            'pool': 'chrome.tests.pinpoint',  # Sharing Pinpoint pool
+            'os': 'Android',
+            'device_type': 'sunfish',
+            'device_os': 'RQ1D.201205.012',
+            'device_os_flavor': 'google',
+        },
+    },
     'win-10_laptop_low_end-perf': {
         'tests': [
             {
@@ -862,6 +950,25 @@
             # they are since in pool 'unassigned'.
         },
     },
+    'win-10_laptop_low_end-perf-pgo': {
+        'tests': [
+            {
+                'isolate': 'performance_test_suite',
+                'extra_args': [
+                    '--assert-gpu-compositing',
+                ],
+            },
+        ],
+        'platform':
+        'win',
+        'target_bits':
+        64,
+        'dimension': {
+            'pool': 'chrome.tests.perf',
+            'os': 'Windows-10-18363.476',
+            'gpu': '8086:1616-20.19.15.5070',
+        },
+    },
     'win-10-perf': {
         'tests': [
             {
@@ -886,6 +993,30 @@
             'synthetic_product_name': 'OptiPlex 7050 (Dell Inc.)'
         },
     },
+    'win-10-perf-pgo': {
+        'tests': [
+            {
+                'isolate': 'performance_test_suite',
+                'extra_args': [
+                    '--assert-gpu-compositing',
+                ],
+            },
+        ],
+        'platform':
+        'win',
+        'target_bits':
+        64,
+        'dimension': {
+            'pool': 'chrome.tests.perf',
+            # Explicitly set GPU driver version and Windows OS version such
+            # that we can be informed if this
+            # version ever changes or becomes inconsistent. It is important
+            # that bots are homogeneous. See crbug.com/988045 for history.
+            'os': 'Windows-10-18363.476',
+            'gpu': '8086:5912-27.20.100.8681',
+            'synthetic_product_name': 'OptiPlex 7050 (Dell Inc.)'
+        },
+    },
     'win-10_amd_laptop-perf': {
         'tests': [
             {
@@ -910,6 +1041,30 @@
             'synthetic_product_name': 'OMEN by HP Laptop 16-c0xxx [ ] (HP)',
         },
     },
+    'win-10_amd_laptop-perf-pgo': {
+        'tests': [
+            {
+                'isolate': 'performance_test_suite',
+                'extra_args': [
+                    '--assert-gpu-compositing',
+                ],
+            },
+        ],
+        'platform':
+        'win',
+        'target_bits':
+        64,
+        'dimension': {
+            'pool': 'chrome.tests.perf',
+            # Explicitly set GPU driver version and Windows OS version such
+            # that we can be informed if this
+            # version ever changes or becomes inconsistent. It is important
+            # that bots are homogeneous. See crbug.com/988045 for history.
+            'os': 'Windows-10-19043.1052',
+            'gpu': '1002:1638-30.0.13033.1000',
+            'synthetic_product_name': 'OMEN by HP Laptop 16-c0xxx [ ] (HP)',
+        },
+    },
     'mac-laptop_low_end-perf': {
         'tests': [
             {
@@ -934,6 +1089,30 @@
             'MacBookAir7,2_x86-64-i5-5350U_Intel Broadwell HD Graphics 6000_8192_APPLE SSD SM0128G'
         },
     },
+    'mac-laptop_low_end-perf-pgo': {
+        'tests': [
+            {
+                'isolate': 'performance_test_suite',
+                'extra_args': [
+                    '--assert-gpu-compositing',
+                ],
+            },
+        ],
+        'platform':
+        'mac',
+        'dimension': {
+            'cpu':
+            'x86-64',
+            'gpu':
+            '8086:1626',
+            'os':
+            'Mac-10.12.6',
+            'pool':
+            'chrome.tests.perf',
+            'synthetic_product_name':
+            'MacBookAir7,2_x86-64-i5-5350U_Intel Broadwell HD Graphics 6000_8192_APPLE SSD SM0128G'
+        },
+    },
     'mac-m1_mini_2020-perf': {
         'tests': [
             {
@@ -952,6 +1131,24 @@
             'pool': 'chrome.tests.perf',
         },
     },
+    'mac-m1_mini_2020-perf-pgo': {
+        'tests': [
+            {
+                'isolate': 'performance_test_suite',
+                'extra_args': [
+                    '--assert-gpu-compositing',
+                ],
+            },
+        ],
+        'platform':
+        'mac',
+        'dimension': {
+            'cpu': 'arm',
+            'mac_model': 'Macmini9,1',
+            'os': 'Mac',
+            'pool': 'chrome.tests.perf',
+        },
+    },
     'linux-perf': {
         'tests': [
             {
@@ -970,6 +1167,24 @@
             'synthetic_product_name': 'PowerEdge R230 (Dell Inc.)'
         },
     },
+    'linux-perf-pgo': {
+        'tests': [
+            {
+                'isolate': 'performance_test_suite',
+                'extra_args': [
+                    '--assert-gpu-compositing',
+                ],
+            },
+        ],
+        'platform':
+        'linux',
+        'dimension': {
+            'gpu': '10de:1cb3-440.100',
+            'os': 'Ubuntu-18.04',
+            'pool': 'chrome.tests.perf',
+            'synthetic_product_name': 'PowerEdge R230 (Dell Inc.)'
+        },
+    },
     'linux-perf-rel': {
         'tests': [
             {
@@ -1012,6 +1227,30 @@
             'MacBookPro11,5_x86-64-i7-4870HQ_AMD Radeon R8 M370X 4.0.20 [3.2.8]_Intel Haswell Iris Pro Graphics 5200 4.0.20 [3.2.8]_16384_APPLE SSD SM0512G',
         },
     },
+    'mac-laptop_high_end-perf-pgo': {
+        'tests': [
+            {
+                'isolate': 'performance_test_suite',
+                'extra_args': [
+                    '--assert-gpu-compositing',
+                ],
+            },
+        ],
+        'platform':
+        'mac',
+        'dimension': {
+            'cpu':
+            'x86-64',
+            'gpu':
+            '1002:6821-4.0.20-3.2.8',
+            'os':
+            'Mac-11.6.1',
+            'pool':
+            'chrome.tests.perf',
+            'synthetic_product_name':
+            'MacBookPro11,5_x86-64-i7-4870HQ_AMD Radeon R8 M370X 4.0.20 [3.2.8]_Intel Haswell Iris Pro Graphics 5200 4.0.20 [3.2.8]_16384_APPLE SSD SM0512G',
+        },
+    },
     'linux-processor-perf': {
         'platform': 'linux',
         'perf_processor': True,
diff --git a/tools/perf/core/perf_json_config_validator.py b/tools/perf/core/perf_json_config_validator.py
index 0ea7bc9..9bb0830f 100644
--- a/tools/perf/core/perf_json_config_validator.py
+++ b/tools/perf/core/perf_json_config_validator.py
@@ -26,6 +26,7 @@
     'android-builder-perf': {'chrome.tests'},
     'android_arm64-builder-perf': {'chrome.tests'},
     'android-pixel4a_power-perf': {'chrome.tests.pinpoint'},
+    'android-pixel4a_power-perf-pgo': {'chrome.tests.pinpoint'},
     'chromecast-linux-builder-perf': {'chrome.tests'},
     'chromeos-kevin-perf-fyi': {'chrome.tests'},
     'chromeos-amd64-generic-lacros-builder-perf': {'chrome.tests'},
@@ -136,9 +137,12 @@
     if browser_options.browser != 'lacros-chrome':
       raise ValueError("%s must use 'lacros-chrome' browser type" %
                        builder_name)
-  elif builder_name in ('win-10-perf', 'Win 7 Nvidia GPU Perf',
+  elif builder_name in ('win-10-perf', 'win-10-perf-pgo',
+                        'Win 7 Nvidia GPU Perf',
                         'win-10_laptop_low_end-perf_HP-Candidate',
-                        'win-10_laptop_low_end-perf', 'win-10_amd_laptop-perf'):
+                        'win-10_laptop_low_end-perf',
+                        'win-10_laptop_low_end-perf-pgo',
+                        'win-10_amd_laptop-perf', 'win-10_amd_laptop-perf-pgo'):
     if browser_options.browser != 'release_x64':
       raise ValueError("%s must use 'release_x64' browser type" %
                        builder_name)
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 0fdc7d1..9852ac4 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -13,16 +13,16 @@
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "mac": {
-            "hash": "1468549bfc3e6ac56ca211d6de78a4fcf9d1227e",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/f7b904a467cb55e4ff3a2ded74354e8e8d8ffabf/trace_processor_shell"
+            "hash": "6176023ff9a8f24132ab890f4f26b851dab0c770",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/d09ebb9e2ba6d6d26640dfb9d19fdf9412d233c2/trace_processor_shell"
         },
         "mac_arm64": {
             "hash": "e1ad4861384b06d911a65f035317914b8cc975c6",
             "full_remote_path": "perfetto-luci-artifacts/v25.0/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "2a8de7ddf93e7ee096e6e62656e910314e743bd3",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/f7b904a467cb55e4ff3a2ded74354e8e8d8ffabf/trace_processor_shell"
+            "hash": "992b1a7cb10510d33c7d65a1efbaa21e23628671",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/d09ebb9e2ba6d6d26640dfb9d19fdf9412d233c2/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/perf/core/shard_maps/android-go-perf-pgo_map.json b/tools/perf/core/shard_maps/android-go-perf-pgo_map.json
new file mode 100644
index 0000000..024628c
--- /dev/null
+++ b/tools/perf/core/shard_maps/android-go-perf-pgo_map.json
@@ -0,0 +1,356 @@
+{
+    "0": {
+        "benchmarks": {
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "startup.mobile": {
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 6
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 6,
+                        "end": 18
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 18,
+                        "end": 39
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 39,
+                        "end": 65
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    },
+                    {
+                        "begin": 65,
+                        "end": 75
+                    }
+                ],
+                "abridged": false
+            },
+            "system_health.memory_mobile": {
+                "end": 1,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 1,
+                "end": 6,
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 6,
+                "end": 10,
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 10,
+                "end": 13,
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 13,
+                "end": 20,
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 20,
+                "end": 25,
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 1
+                    },
+                    {
+                        "begin": 42,
+                        "end": 43
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 25,
+                "end": 34,
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 34,
+                "end": 45,
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 45,
+                "end": 55,
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 55,
+                "end": 65,
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 65,
+                "end": 71,
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 71,
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "system_health.webview_startup": {
+                "abridged": false
+            },
+            "v8.browsing_mobile": {
+                "end": 12,
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "v8.browsing_mobile": {
+                "begin": 12,
+                "end": 21,
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "v8.browsing_mobile": {
+                "begin": 21,
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 215,
+        "predicted_min_shard_time": 995.0,
+        "predicted_min_shard_index": 17,
+        "predicted_max_shard_time": 1353.0,
+        "predicted_max_shard_index": 13,
+        "shard #0": 1131.0,
+        "shard #1": 1119.0,
+        "shard #2": 1123.0,
+        "shard #3": 1240.0,
+        "shard #4": 1172.0,
+        "shard #5": 1120.0,
+        "shard #6": 1039.0,
+        "shard #7": 1258.0,
+        "shard #8": 1119.0,
+        "shard #9": 1165.0,
+        "shard #10": 1167.0,
+        "shard #11": 1068.0,
+        "shard #12": 1122.0,
+        "shard #13": 1353.0,
+        "shard #14": 1013.0,
+        "shard #15": 1101.0,
+        "shard #16": 1142.0,
+        "shard #17": 995.0,
+        "shard #18": 1137.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/android-pixel2-perf-pgo_map.json b/tools/perf/core/shard_maps/android-pixel2-perf-pgo_map.json
new file mode 100644
index 0000000..e7692e5
--- /dev/null
+++ b/tools/perf/core/shard_maps/android-pixel2-perf-pgo_map.json
@@ -0,0 +1,497 @@
+{
+    "0": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "end": 46,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 46,
+                "abridged": false
+            },
+            "startup.mobile": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "end": 15,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 15,
+                "end": 29,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 29,
+                "end": 51,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 51,
+                "end": 74,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 74,
+                "abridged": false
+            },
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "end": 6,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "end": 71,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 71,
+                "abridged": false
+            },
+            "startup.mobile": {
+                "abridged": false
+            },
+            "system_health.memory_mobile": {
+                "end": 13,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 13,
+                "end": 33,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 33,
+                "end": 66,
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 66,
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "begin": 6,
+                "end": 54,
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "end": 73,
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 73,
+                "abridged": false
+            },
+            "startup.mobile": {
+                "abridged": false
+            },
+            "system_health.memory_mobile": {
+                "end": 15,
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 15,
+                "end": 39,
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 39,
+                "end": 70,
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 70,
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "begin": 54,
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "end": 5,
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "begin": 5,
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "end": 24,
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "begin": 24,
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "dromaeo": {
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.mobile": {
+                "end": 2,
+                "abridged": false
+            }
+        },
+        "executables": {
+            "components_perftests": {
+                "path": "components_perftests",
+                "arguments": [
+                    "--xvfb"
+                ]
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "loading.mobile": {
+                "begin": 2,
+                "end": 80,
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "loading.mobile": {
+                "begin": 80,
+                "abridged": false
+            },
+            "media.mobile": {
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "end": 4,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "begin": 4,
+                "end": 69,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "begin": 69,
+                "end": 139,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "begin": 139,
+                "end": 214,
+                "abridged": false
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 214,
+                "end": 294,
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 294,
+                "end": 384,
+                "abridged": false
+            }
+        }
+    },
+    "26": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 384,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "system_health.webview_startup": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_mobile": {
+                "end": 19,
+                "abridged": false
+            }
+        }
+    },
+    "27": {
+        "benchmarks": {
+            "v8.browsing_mobile": {
+                "begin": 19,
+                "abridged": false
+            },
+            "v8.browsing_mobile-future": {
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1561,
+        "predicted_min_shard_time": 2734.0,
+        "predicted_min_shard_index": 8,
+        "predicted_max_shard_time": 3850.0,
+        "predicted_max_shard_index": 27,
+        "shard #0": 2850.0,
+        "shard #1": 2852.0,
+        "shard #2": 2939.0,
+        "shard #3": 2891.0,
+        "shard #4": 2843.0,
+        "shard #5": 2758.0,
+        "shard #6": 2814.0,
+        "shard #7": 2816.0,
+        "shard #8": 2734.0,
+        "shard #9": 2890.0,
+        "shard #10": 2757.0,
+        "shard #11": 2861.0,
+        "shard #12": 2854.0,
+        "shard #13": 2937.0,
+        "shard #14": 2874.0,
+        "shard #15": 2790.0,
+        "shard #16": 2853.0,
+        "shard #17": 2865.0,
+        "shard #18": 2882.0,
+        "shard #19": 2875.0,
+        "shard #20": 2858.0,
+        "shard #21": 2871.0,
+        "shard #22": 2847.0,
+        "shard #23": 2861.0,
+        "shard #24": 2863.0,
+        "shard #25": 2860.0,
+        "shard #26": 2808.0,
+        "shard #27": 3850.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/android-pixel2_webview-perf-pgo_map.json b/tools/perf/core/shard_maps/android-pixel2_webview-perf-pgo_map.json
new file mode 100644
index 0000000..9c61a1f
--- /dev/null
+++ b/tools/perf/core/shard_maps/android-pixel2_webview-perf-pgo_map.json
@@ -0,0 +1,334 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "end": 9,
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.image_decoder": {
+                "begin": 9,
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "end": 7,
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.paint": {
+                "begin": 7,
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "dromaeo": {
+                "end": 3,
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "dromaeo": {
+                "begin": 3,
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.mobile": {
+                "end": 56,
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "loading.mobile": {
+                "begin": 56,
+                "abridged": false
+            },
+            "media.mobile": {
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "end": 6,
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "rasterize_and_record_micro.top_25": {
+                "begin": 6,
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "end": 44,
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 44,
+                "end": 101,
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 101,
+                "end": 158,
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 158,
+                "end": 211,
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 211,
+                "end": 284,
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 284,
+                "end": 344,
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 344,
+                "end": 395,
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 395,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "startup.mobile": {
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "end": 17,
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 17,
+                "end": 68,
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 68,
+                "abridged": false
+            },
+            "system_health.memory_mobile": {
+                "end": 12,
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "system_health.memory_mobile": {
+                "begin": 12,
+                "end": 23,
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 23,
+                "end": 37,
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 37,
+                "end": 55,
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 55,
+                "end": 71,
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 71,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "system_health.webview_startup": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_mobile": {
+                "end": 8,
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "v8.browsing_mobile": {
+                "begin": 8,
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1107,
+        "predicted_min_shard_time": 1353.0,
+        "predicted_min_shard_index": 15,
+        "predicted_max_shard_time": 1416.0,
+        "predicted_max_shard_index": 16,
+        "shard #0": 1391.0,
+        "shard #1": 1381.0,
+        "shard #2": 1407.0,
+        "shard #3": 1391.0,
+        "shard #4": 1379.0,
+        "shard #5": 1400.0,
+        "shard #6": 1383.0,
+        "shard #7": 1378.0,
+        "shard #8": 1393.0,
+        "shard #9": 1382.0,
+        "shard #10": 1384.0,
+        "shard #11": 1398.0,
+        "shard #12": 1359.0,
+        "shard #13": 1409.0,
+        "shard #14": 1360.0,
+        "shard #15": 1353.0,
+        "shard #16": 1416.0,
+        "shard #17": 1368.0,
+        "shard #18": 1395.0,
+        "shard #19": 1393.0,
+        "shard #20": 1413.0
+    }
+}
diff --git a/tools/perf/core/shard_maps/android-pixel4-perf-pgo_map.json b/tools/perf/core/shard_maps/android-pixel4-perf-pgo_map.json
new file mode 100644
index 0000000..9b5f5b84
--- /dev/null
+++ b/tools/perf/core/shard_maps/android-pixel4-perf-pgo_map.json
@@ -0,0 +1,487 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "end": 36,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.css": {
+                "begin": 36,
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "end": 68,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.layout": {
+                "begin": 68,
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "end": 11,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "blink_perf.shadow_dom": {
+                "begin": 11,
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "dromaeo": {
+                "end": 1,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "components_perftests": {
+                "path": "components_perftests",
+                "arguments": [
+                    "--xvfb"
+                ]
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "dromaeo": {
+                "begin": 1,
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.mobile": {
+                "end": 26,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "loading.mobile": {
+                "begin": 26,
+                "end": 67,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "loading.mobile": {
+                "begin": 67,
+                "abridged": false
+            },
+            "media.mobile": {
+                "end": 7,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "media.mobile": {
+                "begin": 7,
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "end": 14,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 14,
+                "end": 66,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 66,
+                "end": 126,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 126,
+                "end": 173,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 173,
+                "end": 217,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 217,
+                "end": 276,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 276,
+                "end": 321,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 321,
+                "end": 365,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 365,
+                "end": 410,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "rendering.mobile": {
+                "begin": 410,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "startup.mobile": {
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "end": 18,
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 18,
+                "end": 56,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 56,
+                "abridged": false
+            },
+            "system_health.memory_mobile": {
+                "end": 6,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 6,
+                "end": 19,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 19,
+                "end": 28,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 28,
+                "end": 43,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 43,
+                "end": 58,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 58,
+                "end": 72,
+                "abridged": false
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 72,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "system_health.webview_startup": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_mobile": {
+                "end": 11,
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "v8.browsing_mobile": {
+                "begin": 11,
+                "end": 29,
+                "abridged": false
+            }
+        }
+    },
+    "26": {
+        "benchmarks": {
+            "v8.browsing_mobile": {
+                "begin": 29,
+                "abridged": false
+            },
+            "v8.browsing_mobile-future": {
+                "end": 18,
+                "abridged": false
+            }
+        }
+    },
+    "27": {
+        "benchmarks": {
+            "v8.browsing_mobile-future": {
+                "begin": 18,
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1235,
+        "predicted_min_shard_time": 1260.0,
+        "predicted_min_shard_index": 6,
+        "predicted_max_shard_time": 1417.0,
+        "predicted_max_shard_index": 19,
+        "shard #0": 1314.0,
+        "shard #1": 1315.0,
+        "shard #2": 1310.0,
+        "shard #3": 1319.0,
+        "shard #4": 1299.0,
+        "shard #5": 1322.0,
+        "shard #6": 1260.0,
+        "shard #7": 1306.0,
+        "shard #8": 1317.0,
+        "shard #9": 1315.0,
+        "shard #10": 1316.0,
+        "shard #11": 1331.0,
+        "shard #12": 1312.0,
+        "shard #13": 1318.0,
+        "shard #14": 1321.0,
+        "shard #15": 1311.0,
+        "shard #16": 1348.0,
+        "shard #17": 1315.0,
+        "shard #18": 1273.0,
+        "shard #19": 1417.0,
+        "shard #20": 1287.0,
+        "shard #21": 1338.0,
+        "shard #22": 1284.0,
+        "shard #23": 1304.0,
+        "shard #24": 1320.0,
+        "shard #25": 1323.0,
+        "shard #26": 1293.0,
+        "shard #27": 1315.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/android-pixel4_weblayer-perf-pgo_map.json b/tools/perf/core/shard_maps/android-pixel4_weblayer-perf-pgo_map.json
new file mode 100644
index 0000000..f4f1afa2
--- /dev/null
+++ b/tools/perf/core/shard_maps/android-pixel4_weblayer-perf-pgo_map.json
@@ -0,0 +1,56 @@
+{
+    "0": {
+        "benchmarks": {
+            "startup.mobile": {
+                "abridged": false
+            },
+            "system_health.common_mobile": {
+                "end": 4,
+                "abridged": true
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 4,
+                "end": 11,
+                "abridged": true
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 11,
+                "abridged": true
+            },
+            "system_health.memory_mobile": {
+                "end": 6,
+                "abridged": true
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "system_health.memory_mobile": {
+                "begin": 6,
+                "abridged": true
+            },
+            "system_health.weblayer_startup": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 29,
+        "predicted_min_shard_time": 70,
+        "predicted_min_shard_index": 1,
+        "predicted_max_shard_time": 74.0,
+        "predicted_max_shard_index": 0,
+        "shard #0": 74.0,
+        "shard #1": 70,
+        "shard #2": 70,
+        "shard #3": 70
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/android-pixel4a_power-perf-pgo_map.json b/tools/perf/core/shard_maps/android-pixel4a_power-perf-pgo_map.json
new file mode 100644
index 0000000..9c78277
--- /dev/null
+++ b/tools/perf/core/shard_maps/android-pixel4a_power-perf-pgo_map.json
@@ -0,0 +1,132 @@
+{
+    "0": {
+        "benchmarks": {
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "system_health.scroll_jank_mobile": {
+                "end": 1,
+                "abridged": false
+            },
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "system_health.scroll_jank_mobile": {
+                "begin": 1,
+                "end": 2,
+                "abridged": false
+            },
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "system_health.scroll_jank_mobile": {
+                "begin": 2,
+                "end": 3,
+                "abridged": false
+            },
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "system_health.scroll_jank_mobile": {
+                "begin": 3,
+                "end": 4,
+                "abridged": false
+            },
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "system_health.scroll_jank_mobile": {
+                "begin": 4,
+                "end": 5,
+                "abridged": false
+            },
+            "power.mobile": {
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "system_health.scroll_jank_mobile": {
+                "begin": 5,
+                "end": 8,
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "system_health.scroll_jank_mobile": {
+                "begin": 8,
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 60,
+        "predicted_min_shard_time": 20,
+        "predicted_min_shard_index": 11,
+        "predicted_max_shard_time": 321.0,
+        "predicted_max_shard_index": 5,
+        "shard #0": 311.0,
+        "shard #1": 311.0,
+        "shard #2": 311.0,
+        "shard #3": 311.0,
+        "shard #4": 311.0,
+        "shard #5": 321.0,
+        "shard #6": 321.0,
+        "shard #7": 321.0,
+        "shard #8": 321.0,
+        "shard #9": 321.0,
+        "shard #10": 30,
+        "shard #11": 20
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/linux-perf-fyi-pgo_map.json b/tools/perf/core/shard_maps/linux-perf-fyi-pgo_map.json
new file mode 100644
index 0000000..875c456
--- /dev/null
+++ b/tools/perf/core/shard_maps/linux-perf-fyi-pgo_map.json
@@ -0,0 +1,23 @@
+{
+    "0": {
+        "benchmarks": {
+            "power.desktop": {
+                "abridged": false
+            },
+            "rendering.desktop": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 398,
+        "predicted_min_shard_time": 6300.0,
+        "predicted_min_shard_index": 0,
+        "predicted_max_shard_time": 6300.0,
+        "predicted_max_shard_index": 0,
+        "shard #0": 6300.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/linux-perf-pgo_map.json b/tools/perf/core/shard_maps/linux-perf-pgo_map.json
new file mode 100644
index 0000000..7fac07db
--- /dev/null
+++ b/tools/perf/core/shard_maps/linux-perf-pgo_map.json
@@ -0,0 +1,664 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "end": 48,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        },
+        "executables": {
+            "base_perftests": {
+                "path": "base_perftests",
+                "arguments": [
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0"
+                ]
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.bindings": {
+                "begin": 48,
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "end": 23,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.layout": {
+                "begin": 23,
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "end": 4,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "blink_perf.parser": {
+                "begin": 4,
+                "abridged": false
+            },
+            "blink_perf.sanitizer-api": {
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "end": 2,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "blink_perf.webgl": {
+                "begin": 2,
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "desktop_ui": {
+                "abridged": false
+            },
+            "dromaeo": {
+                "end": 2,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "dromaeo": {
+                "begin": 2,
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.desktop": {
+                "end": 17,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        },
+        "executables": {
+            "load_library_perf_tests": {
+                "path": "load_library_perf_tests"
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 17,
+                "end": 44,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 44,
+                "end": 70,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 70,
+                "end": 96,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 96,
+                "abridged": false
+            },
+            "media.desktop": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 65,
+                        "end": 66
+                    },
+                    {
+                        "begin": 76,
+                        "end": 77
+                    },
+                    {
+                        "begin": 80,
+                        "end": 81
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "memory.desktop": {
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "performance_browser_tests": {
+                "path": "browser_tests",
+                "arguments": [
+                    "--full-performance-run",
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0",
+                    "--ui-test-action-timeout=60000",
+                    "--ui-test-action-max-timeout=60000",
+                    "--test-launcher-timeout=60000",
+                    "--gtest_filter=*/TabCapturePerformanceTest.*:*/CastV2PerformanceTest.*"
+                ]
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "power.desktop": {
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.desktop": {
+                "end": 9,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 9,
+                "end": 62,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 62,
+                "end": 120,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 120,
+                "end": 175,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 175,
+                "end": 242,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 242,
+                "end": 286,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 286,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "end": 7,
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 7,
+                "end": 48,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 48,
+                "abridged": false
+            },
+            "system_health.memory_desktop": {
+                "end": 7,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 7,
+                "end": 24,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 24,
+                "end": 52,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 52,
+                "end": 77,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 77,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "tab_switching.typical_25": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_desktop": {
+                "end": 5,
+                "abridged": false
+            }
+        },
+        "executables": {
+            "tracing_perftests": {
+                "path": "tracing_perftests"
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "v8.browsing_desktop": {
+                "begin": 5,
+                "abridged": false
+            },
+            "v8.browsing_desktop-future": {
+                "end": 5,
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "v8.browsing_desktop-future": {
+                "begin": 5,
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1258,
+        "predicted_min_shard_time": 1020.0,
+        "predicted_min_shard_index": 23,
+        "predicted_max_shard_time": 1306.0,
+        "predicted_max_shard_index": 25,
+        "shard #0": 1056.0,
+        "shard #1": 1056.0,
+        "shard #2": 1056.0,
+        "shard #3": 1062.0,
+        "shard #4": 1036.0,
+        "shard #5": 1046.0,
+        "shard #6": 1047.0,
+        "shard #7": 1073.0,
+        "shard #8": 1071.0,
+        "shard #9": 1061.0,
+        "shard #10": 1048.0,
+        "shard #11": 1056.0,
+        "shard #12": 1049.0,
+        "shard #13": 1068.0,
+        "shard #14": 1076.0,
+        "shard #15": 1060.0,
+        "shard #16": 1064.0,
+        "shard #17": 1035.0,
+        "shard #18": 1061.0,
+        "shard #19": 1051.0,
+        "shard #20": 1093.0,
+        "shard #21": 1065.0,
+        "shard #22": 1088.0,
+        "shard #23": 1020.0,
+        "shard #24": 1068.0,
+        "shard #25": 1306.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/mac-laptop_high_end-perf-pgo_map.json b/tools/perf/core/shard_maps/mac-laptop_high_end-perf-pgo_map.json
new file mode 100644
index 0000000..21e2067
--- /dev/null
+++ b/tools/perf/core/shard_maps/mac-laptop_high_end-perf-pgo_map.json
@@ -0,0 +1,509 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "end": 34,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "base_perftests": {
+                "path": "base_perftests",
+                "arguments": [
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0"
+                ]
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.bindings": {
+                "begin": 34,
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "end": 23,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.layout": {
+                "begin": 23,
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "end": 6,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "blink_perf.parser": {
+                "begin": 6,
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "end": 4,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "blink_perf.webaudio": {
+                "begin": 4,
+                "abridged": false
+            },
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "blink_perf.webgpu": {
+                "abridged": false
+            },
+            "blink_perf.webgpu_fast_call": {
+                "abridged": false
+            },
+            "desktop_ui": {
+                "end": 5,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "dawn_perf_tests": {
+                "path": "dawn_perf_tests",
+                "arguments": [
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0"
+                ]
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "desktop_ui": {
+                "begin": 5,
+                "abridged": false
+            },
+            "dromaeo": {
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "jetstream2": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.desktop": {
+                "end": 30,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 30,
+                "end": 62,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 62,
+                "end": 94,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 94,
+                "abridged": false
+            },
+            "media.desktop": {
+                "abridged": false
+            },
+            "memory.desktop": {
+                "end": 1,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "memory.desktop": {
+                "begin": 1,
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "power.desktop": {
+                "end": 4,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "performance_browser_tests": {
+                "path": "browser_tests",
+                "arguments": [
+                    "--full-performance-run",
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0",
+                    "--ui-test-action-timeout=60000",
+                    "--ui-test-action-max-timeout=60000",
+                    "--test-launcher-timeout=60000",
+                    "--gtest_filter=*/TabCapturePerformanceTest.*:*/CastV2PerformanceTest.*"
+                ]
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "power.desktop": {
+                "begin": 4,
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.desktop": {
+                "end": 21,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 21,
+                "end": 76,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 76,
+                "end": 136,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 136,
+                "end": 185,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 185,
+                "end": 240,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 240,
+                "end": 286,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 286,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "end": 6,
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 6,
+                "end": 51,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 51,
+                "abridged": false
+            },
+            "system_health.memory_desktop": {
+                "end": 5,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 5,
+                "end": 22,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 22,
+                "end": 38,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 38,
+                "end": 61,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 61,
+                "end": 76,
+                "abridged": false
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 76,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "tab_switching.typical_25": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_desktop": {
+                "end": 12,
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "v8.browsing_desktop": {
+                "begin": 12,
+                "abridged": false
+            },
+            "v8.browsing_desktop-future": {
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "views_perftests": {
+                "path": "views_perftests",
+                "arguments": [
+                    "--xvfb"
+                ]
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1232,
+        "predicted_min_shard_time": 1097.0,
+        "predicted_min_shard_index": 23,
+        "predicted_max_shard_time": 1375.0,
+        "predicted_max_shard_index": 25,
+        "shard #0": 1182.0,
+        "shard #1": 1184.0,
+        "shard #2": 1192.0,
+        "shard #3": 1182.0,
+        "shard #4": 1156.0,
+        "shard #5": 1249.0,
+        "shard #6": 1192.0,
+        "shard #7": 1187.0,
+        "shard #8": 1197.0,
+        "shard #9": 1177.0,
+        "shard #10": 1168.0,
+        "shard #11": 1176.0,
+        "shard #12": 1183.0,
+        "shard #13": 1187.0,
+        "shard #14": 1178.0,
+        "shard #15": 1183.0,
+        "shard #16": 1187.0,
+        "shard #17": 1163.0,
+        "shard #18": 1193.0,
+        "shard #19": 1166.0,
+        "shard #20": 1245.0,
+        "shard #21": 1170.0,
+        "shard #22": 1182.0,
+        "shard #23": 1097.0,
+        "shard #24": 1212.0,
+        "shard #25": 1375.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/mac-laptop_low_end-perf-pgo_map.json b/tools/perf/core/shard_maps/mac-laptop_low_end-perf-pgo_map.json
new file mode 100644
index 0000000..5eae9d0
--- /dev/null
+++ b/tools/perf/core/shard_maps/mac-laptop_low_end-perf-pgo_map.json
@@ -0,0 +1,421 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "abridged": false
+            },
+            "blink_perf.display_locking": {
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "end": 8,
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.image_decoder": {
+                "begin": 8,
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "end": 13,
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.parser": {
+                "begin": 13,
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "dromaeo": {
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.desktop": {
+                "end": 4,
+                "abridged": false
+            }
+        },
+        "executables": {
+            "load_library_perf_tests": {
+                "path": "load_library_perf_tests"
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 4,
+                "end": 31,
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 31,
+                "end": 55,
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 55,
+                "end": 77,
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 77,
+                "end": 100,
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 100,
+                "abridged": false
+            },
+            "media.desktop": {
+                "abridged": false
+            },
+            "memory.desktop": {
+                "end": 5,
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "memory.desktop": {
+                "begin": 5,
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "power.desktop": {
+                "end": 13,
+                "abridged": false
+            }
+        },
+        "executables": {
+            "performance_browser_tests": {
+                "path": "browser_tests",
+                "arguments": [
+                    "--full-performance-run",
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0",
+                    "--ui-test-action-timeout=60000",
+                    "--ui-test-action-max-timeout=60000",
+                    "--test-launcher-timeout=60000",
+                    "--gtest_filter=*/TabCapturePerformanceTest.*:*/CastV2PerformanceTest.*"
+                ]
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "power.desktop": {
+                "begin": 13,
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.desktop": {
+                "end": 35,
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 35,
+                "end": 86,
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 86,
+                "end": 138,
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 138,
+                "end": 185,
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 185,
+                "end": 234,
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 234,
+                "end": 276,
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 276,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "end": 6,
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 6,
+                "end": 49,
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 49,
+                "abridged": false
+            },
+            "system_health.memory_desktop": {
+                "end": 3,
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 3,
+                "end": 21,
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 21,
+                "end": 39,
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 39,
+                "end": 62,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 62,
+                "end": 76,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 76,
+                "abridged": false
+            },
+            "desktop_ui": {
+                "end": 6,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "desktop_ui": {
+                "begin": 6,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "tab_switching.typical_25": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_desktop": {
+                "end": 16,
+                "abridged": false
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "v8.browsing_desktop": {
+                "begin": 16,
+                "abridged": false
+            },
+            "v8.browsing_desktop-future": {
+                "end": 12,
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "blink_perf.webgpu": {
+                "abridged": false
+            },
+            "blink_perf.webgpu_fast_call": {
+                "abridged": false
+            },
+            "v8.browsing_desktop-future": {
+                "begin": 12,
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1094,
+        "predicted_min_shard_time": 1344.0,
+        "predicted_min_shard_index": 25,
+        "predicted_max_shard_time": 1467.0,
+        "predicted_max_shard_index": 21,
+        "shard #0": 1398.0,
+        "shard #1": 1398.0,
+        "shard #2": 1396.0,
+        "shard #3": 1392.0,
+        "shard #4": 1406.0,
+        "shard #5": 1410.0,
+        "shard #6": 1400.0,
+        "shard #7": 1408.0,
+        "shard #8": 1399.0,
+        "shard #9": 1408.0,
+        "shard #10": 1387.0,
+        "shard #11": 1393.0,
+        "shard #12": 1393.0,
+        "shard #13": 1400.0,
+        "shard #14": 1395.0,
+        "shard #15": 1386.0,
+        "shard #16": 1407.0,
+        "shard #17": 1409.0,
+        "shard #18": 1416.0,
+        "shard #19": 1395.0,
+        "shard #20": 1422.0,
+        "shard #21": 1467.0,
+        "shard #22": 1371.0,
+        "shard #23": 1380.0,
+        "shard #24": 1393.0,
+        "shard #25": 1344.0
+    }
+}
diff --git a/tools/perf/core/shard_maps/mac-m1_mini_2020-perf-pgo_map.json b/tools/perf/core/shard_maps/mac-m1_mini_2020-perf-pgo_map.json
new file mode 100644
index 0000000..21c2560
--- /dev/null
+++ b/tools/perf/core/shard_maps/mac-m1_mini_2020-perf-pgo_map.json
@@ -0,0 +1,499 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "base_perftests": {
+                "path": "base_perftests",
+                "arguments": [
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0"
+                ]
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.css": {
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "end": 45,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.layout": {
+                "begin": 45,
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "end": 12,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "blink_perf.shadow_dom": {
+                "begin": 12,
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "blink_perf.webgpu": {
+                "abridged": false
+            },
+            "blink_perf.webgpu_fast_call": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "dawn_perf_tests": {
+                "path": "dawn_perf_tests",
+                "arguments": [
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0"
+                ]
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "desktop_ui": {
+                "abridged": false
+            },
+            "dromaeo": {
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "jetstream": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.desktop": {
+                "end": 27,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 27,
+                "end": 61,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 61,
+                "end": 96,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 96,
+                "abridged": false
+            },
+            "media.desktop": {
+                "abridged": false
+            },
+            "memory.desktop": {
+                "end": 2,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "memory.desktop": {
+                "begin": 2,
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "power.desktop": {
+                "end": 5,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "performance_browser_tests": {
+                "path": "browser_tests",
+                "arguments": [
+                    "--full-performance-run",
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0",
+                    "--ui-test-action-timeout=60000",
+                    "--ui-test-action-max-timeout=60000",
+                    "--test-launcher-timeout=60000",
+                    "--gtest_filter=*/TabCapturePerformanceTest.*:*/CastV2PerformanceTest.*"
+                ]
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "power.desktop": {
+                "begin": 5,
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.desktop": {
+                "end": 23,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 23,
+                "end": 82,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 82,
+                "end": 142,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 142,
+                "end": 193,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 193,
+                "end": 250,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 250,
+                "end": 303,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 303,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "end": 21,
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 21,
+                "end": 74,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 74,
+                "abridged": false
+            },
+            "system_health.memory_desktop": {
+                "end": 10,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 10,
+                "end": 24,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 24,
+                "end": 45,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 45,
+                "end": 69,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 69,
+                "end": 77,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 77,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "tab_switching.typical_25": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_desktop": {
+                "end": 5,
+                "abridged": false
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "v8.browsing_desktop": {
+                "begin": 5,
+                "abridged": false
+            },
+            "v8.browsing_desktop-future": {
+                "end": 10,
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "v8.browsing_desktop-future": {
+                "begin": 10,
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "views_perftests": {
+                "path": "views_perftests",
+                "arguments": [
+                    "--xvfb"
+                ]
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1232,
+        "predicted_min_shard_time": 939.0,
+        "predicted_min_shard_index": 21,
+        "predicted_max_shard_time": 1138.0,
+        "predicted_max_shard_index": 25,
+        "shard #0": 1024.0,
+        "shard #1": 1033.0,
+        "shard #2": 1052.0,
+        "shard #3": 1055.0,
+        "shard #4": 964.0,
+        "shard #5": 1020.0,
+        "shard #6": 1020.0,
+        "shard #7": 1022.0,
+        "shard #8": 1041.0,
+        "shard #9": 1033.0,
+        "shard #10": 1033.0,
+        "shard #11": 1034.0,
+        "shard #12": 1027.0,
+        "shard #13": 1032.0,
+        "shard #14": 1041.0,
+        "shard #15": 1025.0,
+        "shard #16": 1035.0,
+        "shard #17": 1052.0,
+        "shard #18": 1108.0,
+        "shard #19": 1037.0,
+        "shard #20": 1011.0,
+        "shard #21": 939.0,
+        "shard #22": 1034.0,
+        "shard #23": 1011.0,
+        "shard #24": 1038.0,
+        "shard #25": 1138.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android-go-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/android-go-perf-pgo_timing.json
new file mode 100644
index 0000000..cecca53
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/android-go-perf-pgo_timing.json
@@ -0,0 +1,702 @@
+[
+    {
+        "duration": "136.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "257.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "115.0",
+        "name": "startup.mobile/cct:coldish:bbc"
+    },
+    {
+        "duration": "116.0",
+        "name": "startup.mobile/intent:coldish:bbc"
+    },
+    {
+        "duration": "90.0",
+        "name": "startup.mobile/intent:warm:bbc"
+    },
+    {
+        "duration": "86.0",
+        "name": "startup.mobile/maps_pwa:with_http_cache"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "118.0",
+        "name": "system_health.common_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.common_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "215.0",
+        "name": "system_health.common_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.common_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "94.0",
+        "name": "system_health.common_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "77.0",
+        "name": "system_health.common_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "9.0",
+        "name": "system_health.common_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "85.0",
+        "name": "system_health.common_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "185.0",
+        "name": "system_health.common_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "107.0",
+        "name": "system_health.common_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "142.0",
+        "name": "system_health.common_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "105.0",
+        "name": "system_health.common_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "86.0",
+        "name": "system_health.common_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "79.0",
+        "name": "system_health.common_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "86.0",
+        "name": "system_health.common_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "114.0",
+        "name": "system_health.common_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "94.0",
+        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "101.0",
+        "name": "system_health.common_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "96.0",
+        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "101.0",
+        "name": "system_health.common_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "84.0",
+        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:games:lazors"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.common_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.common_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.common_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.common_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.common_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.common_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.common_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.memory_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "112.0",
+        "name": "system_health.memory_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.memory_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.memory_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "218.0",
+        "name": "system_health.memory_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "95.0",
+        "name": "system_health.memory_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "96.0",
+        "name": "system_health.memory_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "74.0",
+        "name": "system_health.memory_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "83.0",
+        "name": "system_health.memory_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "172.0",
+        "name": "system_health.memory_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "103.0",
+        "name": "system_health.memory_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "129.0",
+        "name": "system_health.memory_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "102.0",
+        "name": "system_health.memory_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.memory_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.memory_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "80.0",
+        "name": "system_health.memory_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "system_health.memory_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "83.0",
+        "name": "system_health.memory_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "102.0",
+        "name": "system_health.memory_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "96.0",
+        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "102.0",
+        "name": "system_health.memory_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "92.0",
+        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "99.0",
+        "name": "system_health.memory_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.memory_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.memory_mobile/load:games:lazors"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.memory_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.memory_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.memory_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.memory_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.memory_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.memory_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.memory_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "58.0",
+        "name": "system_health.memory_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.memory_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.memory_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.memory_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.memory_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.memory_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.memory_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.memory_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.memory_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "264.0",
+        "name": "v8.browsing_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "v8.browsing_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "126.0",
+        "name": "v8.browsing_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "93.0",
+        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "69.0",
+        "name": "v8.browsing_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "145.0",
+        "name": "v8.browsing_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "108.0",
+        "name": "v8.browsing_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "115.0",
+        "name": "v8.browsing_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "308.0",
+        "name": "v8.browsing_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "73.0",
+        "name": "v8.browsing_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "152.0",
+        "name": "v8.browsing_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "208.0",
+        "name": "v8.browsing_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "150.0",
+        "name": "v8.browsing_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.browsing_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.browsing_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "119.0",
+        "name": "v8.browsing_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "101.0",
+        "name": "v8.browsing_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "127.0",
+        "name": "v8.browsing_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "170.0",
+        "name": "v8.browsing_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "v8.browsing_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "130.0",
+        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "127.0",
+        "name": "v8.browsing_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "131.0",
+        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "179.0",
+        "name": "v8.browsing_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "116.0",
+        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "75.0",
+        "name": "v8.browsing_mobile/browse:tools:maps:2019"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel2-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel2-perf-pgo_timing.json
new file mode 100644
index 0000000..c2e3abc
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel2-perf-pgo_timing.json
@@ -0,0 +1,4642 @@
+[
+    {
+        "duration": "61.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "58.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-display-none.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "94.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "71.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "24.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": "18.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": "6.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "56.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "56.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "56.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.css/FocusUpdate.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/LoadBootstrapBlog.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "45.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.dom/insert-text-with-dir-auto.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/replace-text-with-dir-auto.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "128.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "71.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "93.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.layout/css-contain-change-text-different-subtree-root.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.layout/css-contain-change-text-without-subtree-root.html"
+    },
+    {
+        "duration": "325.0",
+        "name": "blink_perf.layout/css-contain-change-text.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "53.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox-nested-rows-and-columns-auto-overflow.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "71.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "67.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "67.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "36.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "53.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "56.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "52.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "52.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.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": "12.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "15.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": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "140.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "379.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "119.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "36.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "41.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "181.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "40.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "11.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": "10.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "12.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": "11.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "396.0",
+        "name": "blink_perf.shadow_dom/imperative-shadow-dom-overhead.html"
+    },
+    {
+        "duration": "434.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead-iframe.html"
+    },
+    {
+        "duration": "407.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead.html"
+    },
+    {
+        "duration": "7.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": "4.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "125.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "40.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-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": "8.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "4.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": "4.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": "4.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": "9.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "10.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": "0.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/FlowerFromMyGarden.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/FoodLeifLodahl.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/France.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/HarveyRayner.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.svg/HereGear.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "6.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": "17.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "98.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "94.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "94.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "52.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.webgl/binding-bind-buffer.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webgl/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webgl/binding-draw-arrays.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.webgl_fast_call/binding-bind-buffer.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgl_fast_call/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgl_fast_call/binding-draw-arrays.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "0.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "81.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "35.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "7.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "841.0",
+        "name": "jetstream2/JetStream2"
+    },
+    {
+        "duration": "138.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/58Pic"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/58Pic_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Amazon"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.mobile/Amazon_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/BOLNoticias"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.mobile/BOLNoticias_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Baidu"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/Baidu_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Bradesco"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/Bradesco_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Dailymotion"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/Dailymotion_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Dawn"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/Dawn_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/DevOpera_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/DevOpera_cold_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/DevOpera_hot"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/DevOpera_hot_3g"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/DevOpera_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/DevOpera_warm_3g"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.mobile/Dramaq"
+    },
+    {
+        "duration": "49.0",
+        "name": "loading.mobile/Dramaq_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/EnquiryIndianRail"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/EnquiryIndianRail_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Facebook"
+    },
+    {
+        "duration": "2.0",
+        "name": "loading.mobile/Facebook_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/FlipBoard_cold"
+    },
+    {
+        "duration": "37.0",
+        "name": "loading.mobile/FlipBoard_cold_3g"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/FlipBoard_hot"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/FlipBoard_hot_3g"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/FlipBoard_warm"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/FlipBoard_warm_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/FlipKart_cold"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/FlipKart_cold_3g"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/FlipKart_hot"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/FlipKart_hot_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/FlipKart_warm"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/FlipKart_warm_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/FranceTVInfo"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/FranceTVInfo_3g"
+    },
+    {
+        "duration": "2.0",
+        "name": "loading.mobile/G1"
+    },
+    {
+        "duration": "2.0",
+        "name": "loading.mobile/G1_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/GSShop"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/GSShop_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/Google"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/GoogleBrazil"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/GoogleBrazil_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/GoogleIndia"
+    },
+    {
+        "duration": "2.0",
+        "name": "loading.mobile/GoogleIndia_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/GoogleIndonesia"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/GoogleIndonesia_3g"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/GoogleRedirectToGoogleJapan"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.mobile/Google_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Hongkiat"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.mobile/Hongkiat_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/KapanLagi"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/KapanLagi_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Kaskus"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/Kaskus_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/LocalMoxie"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/LocalMoxie_3g"
+    },
+    {
+        "duration": "31.0",
+        "name": "loading.mobile/Locanto"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Locanto_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/OLX"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.mobile/OLX_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/QQNews"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/QQNews_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/SlideShare"
+    },
+    {
+        "duration": "43.0",
+        "name": "loading.mobile/SlideShare_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/Suumo_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Suumo_cold_3g"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.mobile/Suumo_hot"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Suumo_hot_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/Suumo_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Suumo_warm_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/Thairath"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/Thairath_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/TheStar"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/TheStar_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/TribunNews"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/TribunNews_3g"
+    },
+    {
+        "duration": "10.0",
+        "name": "loading.mobile/Twitter"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Twitter_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/VoiceMemos_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/VoiceMemos_cold_3g"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/VoiceMemos_hot"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/VoiceMemos_hot_3g"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/VoiceMemos_warm"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.mobile/VoiceMemos_warm_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Wikipedia"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Wikipedia_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/YahooNews"
+    },
+    {
+        "duration": "2.0",
+        "name": "loading.mobile/YahooNews_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/Youtube"
+    },
+    {
+        "duration": "2.0",
+        "name": "loading.mobile/Youtube_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "media.mobile/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "14.0",
+        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "13.0",
+        "name": "media.mobile/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "14.0",
+        "name": "media.mobile/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "137.0",
+        "name": "media.mobile/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "172.0",
+        "name": "media.mobile/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "35.0",
+        "name": "media.mobile/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "29.0",
+        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "30.0",
+        "name": "media.mobile/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "27.0",
+        "name": "media.mobile/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "38.0",
+        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "27.0",
+        "name": "media.mobile/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "20.0",
+        "name": "media.mobile/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "29.0",
+        "name": "media.mobile/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "161.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "31.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "39.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "40.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/accu_weather_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/accu_weather_mobile_pinch_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/amazon_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/amazon_mobile_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/analog_clock_svg"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/androidpolice_mobile_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/animometer_webgl"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.mobile/aquarium"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/aquarium_20k"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/background_color_animation"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/baidu_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/balls_javascript_canvas"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/balls_javascript_css"
+    },
+    {
+        "duration": "89.0",
+        "name": "rendering.mobile/balls_svg_animations"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/basic_stream"
+    },
+    {
+        "duration": "72.0",
+        "name": "rendering.mobile/bing_mobile_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/blob"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.mobile/blogspot_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/blogspot_mobile_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/blur_rotating_background"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/boingboing_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/booking.com_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/booking.com_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/bouncing_balls_15"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_balls_shadow"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "124.0",
+        "name": "rendering.mobile/bouncing_gradient_circles"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/bouncing_png_images"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_svg_images"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/camera_to_webgl"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.mobile/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/canvas_animation_no_clear"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/canvas_arcs"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/canvas_font_cycler"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/canvas_lines"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/canvas_to_blob"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/capitolvolkswagen_mobile_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/card_expansion"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/card_expansion_animated"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/card_expansion_images_text"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/card_flying"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/cc_poster_circle"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/cc_scroll_text_only"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.mobile/chip_tune"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/cnn_2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/cnn_article_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/cnn_mobile_2018"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.mobile/cnn_mobile_pinch_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/cnn_pathological_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/compositor_heavy_animation"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/coordinated_animation"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/crafty_mind"
+    },
+    {
+        "duration": "104.0",
+        "name": "rendering.mobile/css_animations_many_keyframes"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "83.0",
+        "name": "rendering.mobile/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "69.0",
+        "name": "rendering.mobile/css_transitions_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_new_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_transitions_style_element"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_transitions_updating_class"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_value_type_color"
+    },
+    {
+        "duration": "71.0",
+        "name": "rendering.mobile/css_value_type_filter"
+    },
+    {
+        "duration": "85.0",
+        "name": "rendering.mobile/css_value_type_length"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_value_type_length_complex"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_value_type_length_simple"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_path"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/css_value_type_shadow"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_transform_complex"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_value_type_transform_simple"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/deviantart_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/digg_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/docs_paper.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/docs_resume.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/docs_table.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/draw_image"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/dynamic_cube_map"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/earth"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/ebay_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/ebay_mobile_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/ebay_mobile_pinch_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/ebay_scroll_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/effect_games"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/espn_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/espn_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/espn_pathological_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/extra_large_texture_uploads"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/facebook_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/facebook_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/famo_us_twitter_demo"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/fill_clear_rect.html"
+    },
+    {
+        "duration": "97.0",
+        "name": "rendering.mobile/fill_shapes"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/filter_terrain_svg"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/flickr_scroll_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/font_wipe"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/forecast.io_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/get_image_data_cpu.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/get_image_data_gpu.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/gmail_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/google_calendar_2018"
+    },
+    {
+        "duration": "95.0",
+        "name": "rendering.mobile/google_docs_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/google_image_search_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/google_image_search_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/google_news_ios"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/google_news_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/google_plus_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/google_plus_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/google_search_mobile_pinch_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/google_web_search_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/google_web_search_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/gpu_bound_shader.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/gsp.ro_mobile_2018"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.mobile/guardian_pathological_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/guimark_vector_chart"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/gws_boogie_expansion"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/gws_google_expansion"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/hakim"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/horizontal_vertical_expansion"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.mobile/idle_power_animated_gif"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.mobile/idle_power_blank"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/idle_power_css_animation"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/idle_power_request_animation_frame"
+    },
+    {
+        "duration": "116.0",
+        "name": "rendering.mobile/idle_power_set_timeout_long"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.mobile/idle_power_set_timetout"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/ie_chalkboard"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/ie_pirate_mark"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_0"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_75"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_0"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_75"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_0"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_75"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/infinite_scrolling"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/jarro_doverson"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "99.0",
+        "name": "rendering.mobile/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_full_screen_invalidation"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_0"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_75"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/js_poster_circle"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/js_scroll_text_only"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/kevs_3d"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/keyframed_animations"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/large_texture_uploads"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/latimes_pathological_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/linkedin_2018"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.mobile/linkedin_mobile_2018"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.mobile/linkedin_mobile_pinch_2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/linkedin_pathological_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/list_animation_simple"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/list_recycle_transform"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "72.0",
+        "name": "rendering.mobile/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_animations_half_presented"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/man_in_blue"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/many_images"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/many_planets_deep"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/maps_perf_test"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/mask_transition_animation"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/masonry"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/medium_texture_uploads"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/megi_dish"
+    },
+    {
+        "duration": "80.0",
+        "name": "rendering.mobile/microgame_fps"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/microsoft_fireflies"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/microsoft_performance"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/microsoft_snow"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/microsoft_speed_reading"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/microsoft_tweet_map"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/microsoft_video_city"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_worker_fountains"
+    },
+    {
+        "duration": "51.0",
+        "name": "rendering.mobile/mix_10k"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/mlb_mobile_2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "rendering.mobile/mobile_news_sandbox"
+    },
+    {
+        "duration": "159.0",
+        "name": "rendering.mobile/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/motionmark_anim_design_15"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/motionmark_anim_focus_25"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.mobile/motionmark_anim_images_50"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.mobile/motionmark_anim_leaves_250"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/motionmark_anim_multiply_175"
+    },
+    {
+        "duration": "65.0",
+        "name": "rendering.mobile/motionmark_anim_suits_125"
+    },
+    {
+        "duration": "64.0",
+        "name": "rendering.mobile/motionmark_html_composited_transforms_125"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_blend_circles_25"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_circles_250"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_filter_circles_15"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_gradient_circles_250"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_svg_images_50"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_tagged_images_225"
+    },
+    {
+        "duration": "74.0",
+        "name": "rendering.mobile/motionmark_html_dom_particles_svg_masks_25"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.mobile/motionmark_html_focus_20_15"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.mobile/motionmark_html_leaves_20_50"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.mobile/motionmark_ramp_canvas_arcs"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.mobile/motionmark_ramp_canvas_lines"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.mobile/motionmark_ramp_design"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/motionmark_ramp_images"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.mobile/motionmark_ramp_leaves"
+    },
+    {
+        "duration": "86.0",
+        "name": "rendering.mobile/motionmark_ramp_multiply"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.mobile/motionmark_ramp_paths"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.mobile/motionmark_ramp_suits"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_circles_250"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_gradient_circles_200"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_png_images_200"
+    },
+    {
+        "duration": "65.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_svg_images_50"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/new_tilings"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/no_op_raf"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/no_op_scroll"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/no_op_settimeout"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/no_op_touch_handler"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.mobile/non_opaque_background_compositor_thread_scrolling_00050_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/non_opaque_background_main_thread_scrolling_00050_pixels_per_second"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.mobile/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/nyc_gov_scroll_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/nytimes_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/nytimes_scroll_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/off_screen_main_60fps"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/parallax_effect"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/particles"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/pbs_pathological_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/physical_simulation"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/pinterest_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.mobile/pinterest_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/put_get_image_data"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/put_image_data.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/raf"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/raf_animation"
+    },
+    {
+        "duration": "65.0",
+        "name": "rendering.mobile/raf_canvas"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/raf_touch_animation"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/recode_pathological_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/reddit_mobile_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/runway_2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/san_angeles"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/second_batch_js_heavy"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_light"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_medium"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/sfgate_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/sheets_render.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/silk_finance"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/simple_text_page"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/simple_touch_drag"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.mobile/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/slashdot_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/small_texture_uploads"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/smash_cat"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/spielzeugz"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/sticky_using_webkit"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/stroke_shapes"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/svg_icon_raster"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/swipe_to_dismiss"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/sync_scroll_offset"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/techcrunch_2018"
+    },
+    {
+        "duration": "69.0",
+        "name": "rendering.mobile/techcrunch_mobile_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "85.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "76.0",
+        "name": "rendering.mobile/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.mobile/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/text_scrollbar_100_pixels_per_second"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/text_scrollbar_1200_pixels_per_second"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/text_scrollbar_200_pixels_per_second"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/text_scrollbar_2300_pixels_per_second"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/text_scrollbar_700_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/theverge_article_mobile_2018"
+    },
+    {
+        "duration": "103.0",
+        "name": "rendering.mobile/theverge_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/throughput_scrolling_composited"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "126.0",
+        "name": "rendering.mobile/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/toBlob_duration.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/touch_handler_scrolling"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/transform_transitions"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/transform_transitions_js_block"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/twitch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/twitch_mobile_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/twitter_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/twitter_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/update_history_state"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/usatoday_mobile_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/vertical_expansion"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/video_to_sub_texture"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "85.0",
+        "name": "rendering.mobile/video_to_texture"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/web_animation_value_type_color"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/web_animation_value_type_path"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animations_many_keyframes"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/web_animations_set_current_time"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/web_animations_simultaneous"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/webgl_to_texture"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/wikipedia_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/wikipedia_delayed_scroll_start_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/wikipedia_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/wordpress_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/wordpress_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/worldjournal_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/wow_wiki_pathological_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/wowwiki_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/wsj_mobile_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/yahoo_answers_2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.mobile/yahoo_answers_mobile_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/yahoo_news_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/yahoo_news_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/yahoo_sports_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/yahoo_sports_pathological_2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.mobile/youtube_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.mobile/youtube_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/zdnet_pathological_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/zoom_in_animation"
+    },
+    {
+        "duration": "35.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "35.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "60.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "70.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "109.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "107.0",
+        "name": "startup.mobile/cct:coldish:bbc"
+    },
+    {
+        "duration": "610.0",
+        "name": "startup.mobile/intent:coldish:bbc"
+    },
+    {
+        "duration": "109.0",
+        "name": "startup.mobile/intent:warm:bbc"
+    },
+    {
+        "duration": "9.0",
+        "name": "startup.mobile/maps_pwa:with_http_cache"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.common_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.common_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "98.0",
+        "name": "system_health.common_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "76.0",
+        "name": "system_health.common_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.common_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_mobile/browse:media:tiktok_infinite_scroll:2021"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.common_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "108.0",
+        "name": "system_health.common_mobile/browse:news:businessinsider:2021"
+    },
+    {
+        "duration": "92.0",
+        "name": "system_health.common_mobile/browse:news:cnn:2021"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.common_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.common_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.common_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.common_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.common_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "60.0",
+        "name": "system_health.common_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.common_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "78.0",
+        "name": "system_health.common_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "79.0",
+        "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll:2021"
+    },
+    {
+        "duration": "84.0",
+        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.common_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "121.0",
+        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.common_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:games:lazors"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.common_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.common_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.common_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.common_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.common_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.common_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "80.0",
+        "name": "system_health.memory_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.memory_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.memory_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.memory_mobile/browse:media:tiktok_infinite_scroll:2021"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.memory_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "89.0",
+        "name": "system_health.memory_mobile/browse:news:businessinsider:2021"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.memory_mobile/browse:news:cnn:2021"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.memory_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "system_health.memory_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.memory_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.memory_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.memory_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.memory_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "73.0",
+        "name": "system_health.memory_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.memory_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.memory_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "87.0",
+        "name": "system_health.memory_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "90.0",
+        "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll:2021"
+    },
+    {
+        "duration": "75.0",
+        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "67.0",
+        "name": "system_health.memory_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:games:lazors"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.memory_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.memory_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.memory_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.memory_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.memory_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "0.0",
+        "name": "system_health.pcscan/browse:news:cnn:2021"
+    },
+    {
+        "duration": "10.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "10.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "11.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
+    },
+    {
+        "duration": "11.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_mobile-future/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "13.0",
+        "name": "v8.browsing_mobile-future/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "83.0",
+        "name": "v8.browsing_mobile-future/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.browsing_mobile-future/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "83.0",
+        "name": "v8.browsing_mobile-future/browse:media:imgur:2019"
+    },
+    {
+        "duration": "180.0",
+        "name": "v8.browsing_mobile-future/browse:media:tiktok_infinite_scroll:2021"
+    },
+    {
+        "duration": "64.0",
+        "name": "v8.browsing_mobile-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "138.0",
+        "name": "v8.browsing_mobile-future/browse:news:businessinsider:2021"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_mobile-future/browse:news:cnn:2021"
+    },
+    {
+        "duration": "14.0",
+        "name": "v8.browsing_mobile-future/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_mobile-future/browse:news:globo:2019"
+    },
+    {
+        "duration": "118.0",
+        "name": "v8.browsing_mobile-future/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "191.0",
+        "name": "v8.browsing_mobile-future/browse:news:qq:2019"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_mobile-future/browse:news:reddit:2019"
+    },
+    {
+        "duration": "112.0",
+        "name": "v8.browsing_mobile-future/browse:news:toi:2019"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_mobile-future/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "v8.browsing_mobile-future/browse:search:amp:2018"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.browsing_mobile-future/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "93.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "65.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "66.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "14.0",
+        "name": "v8.browsing_mobile-future/browse:social:facebook:2019"
+    },
+    {
+        "duration": "82.0",
+        "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "106.0",
+        "name": "v8.browsing_mobile-future/browse:social:instagram:2019"
+    },
+    {
+        "duration": "94.0",
+        "name": "v8.browsing_mobile-future/browse:social:pinterest_infinite_scroll:2021"
+    },
+    {
+        "duration": "77.0",
+        "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_mobile-future/browse:social:twitter:2019"
+    },
+    {
+        "duration": "14.0",
+        "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_mobile-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "13.0",
+        "name": "v8.browsing_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "165.0",
+        "name": "v8.browsing_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.browsing_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "130.0",
+        "name": "v8.browsing_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "v8.browsing_mobile/browse:media:tiktok_infinite_scroll:2021"
+    },
+    {
+        "duration": "203.0",
+        "name": "v8.browsing_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "133.0",
+        "name": "v8.browsing_mobile/browse:news:businessinsider:2021"
+    },
+    {
+        "duration": "66.0",
+        "name": "v8.browsing_mobile/browse:news:cnn:2021"
+    },
+    {
+        "duration": "14.0",
+        "name": "v8.browsing_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.browsing_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "150.0",
+        "name": "v8.browsing_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.browsing_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "v8.browsing_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "v8.browsing_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "65.0",
+        "name": "v8.browsing_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "65.0",
+        "name": "v8.browsing_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "324.0",
+        "name": "v8.browsing_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "63.0",
+        "name": "v8.browsing_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "80.0",
+        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "93.0",
+        "name": "v8.browsing_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "94.0",
+        "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll:2021"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "166.0",
+        "name": "v8.browsing_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "151.0",
+        "name": "wasmpspdfkit/https://pspdfkit.com/webassembly-benchmark/"
+    },
+    {
+        "duration": "22.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "33.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "35.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "29.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "24.0",
+        "name": "webrtc/insertable_streams_audio_processing"
+    },
+    {
+        "duration": "26.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_noop_video"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "32.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "10.0",
+        "name": "webrtc/negotiate-timing"
+    },
+    {
+        "duration": "44.0",
+        "name": "webrtc/pause_play_peerconnections"
+    },
+    {
+        "duration": "60.0",
+        "name": "components_perftests/_gtest_"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel2_webview-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel2_webview-perf-pgo_timing.json
new file mode 100644
index 0000000..5be043dd
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel2_webview-perf-pgo_timing.json
@@ -0,0 +1,4234 @@
+[
+    {
+        "duration": "22.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "5.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": "9.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": "18.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "0.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": "12.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": "12.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.css/FocusUpdate.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadBootstrapBlog.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.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": "10.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "18.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": "6.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "10.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": "5.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "50.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "92.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "54.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "101.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "28.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": "10.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "6.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": "5.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "14.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": "14.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-slot-append.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "4.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": "4.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "4.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": "4.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "5.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": "5.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "141.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "146.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "137.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "52.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "0.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "49.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "31.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "6.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "60.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/58Pic"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.mobile/58Pic_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Amazon"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.mobile/Amazon_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/BOLNoticias"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/BOLNoticias_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/Baidu"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.mobile/Baidu_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Bradesco"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Bradesco_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Dailymotion"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Dailymotion_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Dawn"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Dawn_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/DevOpera_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/DevOpera_cold_3g"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/DevOpera_hot"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.mobile/DevOpera_hot_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/DevOpera_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/DevOpera_warm_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Dramaq"
+    },
+    {
+        "duration": "48.0",
+        "name": "loading.mobile/Dramaq_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/EnquiryIndianRail"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/EnquiryIndianRail_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/Facebook"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Facebook_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/FlipBoard_cold"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/FlipBoard_cold_3g"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/FlipBoard_hot"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/FlipBoard_hot_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/FlipBoard_warm"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/FlipBoard_warm_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/FlipKart_cold"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/FlipKart_cold_3g"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/FlipKart_hot"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/FlipKart_hot_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/FlipKart_warm"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/FlipKart_warm_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/FranceTVInfo"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/FranceTVInfo_3g"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/G1"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/G1_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/GSShop"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/GSShop_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/GoogleBrazil"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/GoogleBrazil_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/GoogleIndia"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/GoogleIndia_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/GoogleIndonesia"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/GoogleIndonesia_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/GoogleRedirectToGoogleJapan"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Hongkiat"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Hongkiat_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/KapanLagi"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/KapanLagi_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Kaskus"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Kaskus_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/LocalMoxie"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/LocalMoxie_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Locanto"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Locanto_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/OLX"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/OLX_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/QQNews"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/QQNews_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/SlideShare"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.mobile/SlideShare_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Suumo_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Suumo_cold_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Suumo_hot"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Suumo_hot_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Suumo_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Suumo_warm_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Thairath"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Thairath_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/TheStar"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/TheStar_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/TribunNews"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/TribunNews_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/Twitter"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/Twitter_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/VoiceMemos_cold"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/VoiceMemos_cold_3g"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/VoiceMemos_hot"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/VoiceMemos_hot_3g"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/VoiceMemos_warm"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/VoiceMemos_warm_3g"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.mobile/Wikipedia"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Wikipedia_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/YahooNews"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/YahooNews_3g"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.mobile/Youtube"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.mobile/Youtube_3g"
+    },
+    {
+        "duration": "57.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "24.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "12.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": "21.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "17.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": "30.0",
+        "name": "rendering.mobile/accu_weather_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/accu_weather_mobile_pinch_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/amazon_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/amazon_mobile_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/analog_clock_svg"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/androidpolice_mobile_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/animometer_webgl"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/aquarium"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/aquarium_20k"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/background_color_animation"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/baidu_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/balls_javascript_canvas"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/balls_javascript_css"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/balls_svg_animations"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/basic_stream"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/bing_mobile_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/blob"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/blogspot_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/blogspot_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/blur_rotating_background"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/boingboing_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/booking.com_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/booking.com_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_balls_15"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/bouncing_balls_shadow"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_gradient_circles"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_png_images"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/bouncing_svg_images"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/camera_to_webgl"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/canvas_animation_no_clear"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/canvas_arcs"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/canvas_font_cycler"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/canvas_lines"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/canvas_to_blob"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/capitolvolkswagen_mobile_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/card_expansion"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/card_expansion_animated"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/card_expansion_images_text"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/card_flying"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/cc_poster_circle"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/cc_scroll_text_only"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/chip_tune"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/cnn_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/cnn_article_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/cnn_mobile_2018"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/cnn_mobile_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/cnn_pathological_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/compositor_heavy_animation"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/coordinated_animation"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/crafty_mind"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_many_keyframes"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_inline_style"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_new_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_style_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_updating_class"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_color"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_filter"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_value_type_length"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_value_type_length_complex"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_value_type_length_simple"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_value_type_path"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_value_type_shadow"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_transform_complex"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_value_type_transform_simple"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/deviantart_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/digg_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/docs_paper.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/docs_resume.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/docs_table.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/draw_image"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/dynamic_cube_map"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/earth"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/ebay_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/ebay_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/ebay_mobile_pinch_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/ebay_scroll_2018"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/effect_games"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/espn_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/espn_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/espn_pathological_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/extra_large_texture_uploads"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/facebook_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/facebook_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/famo_us_twitter_demo"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/fill_clear_rect.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/fill_shapes"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/filter_terrain_svg"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/flickr_scroll_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/font_wipe"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/forecast.io_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/get_image_data_cpu.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/get_image_data_gpu.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/gmail_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/google_calendar_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/google_docs_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/google_image_search_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/google_image_search_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/google_news_ios"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/google_news_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/google_plus_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/google_plus_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/google_search_mobile_pinch_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/google_web_search_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/google_web_search_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/gpu_bound_shader.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/gsp.ro_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/guardian_pathological_2018"
+    },
+    {
+        "duration": "26.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": "17.0",
+        "name": "rendering.mobile/horizontal_vertical_expansion"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/idle_power_animated_gif"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/idle_power_blank"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/idle_power_css_animation"
+    },
+    {
+        "duration": "5.0",
+        "name": "rendering.mobile/idle_power_request_animation_frame"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/idle_power_set_timeout_long"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/idle_power_set_timetout"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/ie_chalkboard"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/ie_pirate_mark"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_0"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_75"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_0"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_75"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_0"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_75"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/infinite_scrolling"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/jarro_doverson"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/js_full_screen_invalidation"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_0"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_75"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/js_poster_circle"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/js_scroll_text_only"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/kevs_3d"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/keyframed_animations"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/large_texture_uploads"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/latimes_pathological_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/linkedin_2018"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.mobile/linkedin_mobile_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/linkedin_mobile_pinch_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/linkedin_pathological_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/list_animation_simple"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/list_recycle_transform"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/main_animations_half_presented"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/man_in_blue"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/many_images"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/many_planets_deep"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/maps_perf_test"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/mask_transition_animation"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/masonry"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/medium_texture_uploads"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/megi_dish"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.mobile/microgame_fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/microsoft_fireflies"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/microsoft_performance"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/microsoft_snow"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/microsoft_speed_reading"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/microsoft_tweet_map"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/microsoft_video_city"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/microsoft_worker_fountains"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/mix_10k"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/mlb_mobile_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/mobile_news_sandbox"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_anim_design_15"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_anim_focus_25"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_anim_images_50"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_anim_leaves_250"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_anim_multiply_175"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_anim_suits_125"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_html_composited_transforms_125"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_blend_circles_25"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_circles_250"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_filter_circles_15"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_gradient_circles_250"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_svg_images_50"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_tagged_images_225"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_dom_particles_svg_masks_25"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_focus_20_15"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_html_leaves_20_50"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_circles_250"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_gradient_circles_200"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_png_images_200"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_svg_images_50"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/new_tilings"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/no_op_raf"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/no_op_scroll"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/no_op_settimeout"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/no_op_touch_handler"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/nyc_gov_scroll_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/nytimes_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/nytimes_scroll_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/off_screen_main_60fps"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/parallax_effect"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/particles"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/pbs_pathological_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/physical_simulation"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/pinterest_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.mobile/pinterest_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/put_get_image_data"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/put_image_data.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/raf"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/raf_animation"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/raf_canvas"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/raf_touch_animation"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/recode_pathological_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/reddit_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/runway_2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/san_angeles"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_heavy"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_light"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_medium"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/sfgate_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/sheets_render.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/silk_finance"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/simple_text_page"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/simple_touch_drag"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.mobile/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/slashdot_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/small_texture_uploads"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.mobile/smash_cat"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/spielzeugz"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/sticky_using_webkit"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/stroke_shapes"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/svg_icon_raster"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/swipe_to_dismiss"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/sync_scroll_offset"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/techcrunch_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/techcrunch_mobile_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/theverge_article_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/theverge_mobile_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/throughput_scrolling_composited"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "65.0",
+        "name": "rendering.mobile/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/toBlob_duration.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/touch_handler_scrolling"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/transform_transitions"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/transform_transitions_js_block"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/twitch_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/twitch_mobile_pinch_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/twitter_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/twitter_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/update_history_state"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/usatoday_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/vertical_expansion"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/video_to_sub_texture"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/video_to_texture"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_color"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_path"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/web_animations_many_keyframes"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animations_set_current_time"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animations_simultaneous"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.mobile/webgl_to_texture"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/wikipedia_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/wikipedia_delayed_scroll_start_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/wikipedia_mobile_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/wordpress_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/wordpress_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/worldjournal_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/wow_wiki_pathological_2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/wowwiki_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/wsj_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/yahoo_answers_2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/yahoo_answers_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/yahoo_news_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/yahoo_news_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/yahoo_sports_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/yahoo_sports_pathological_2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/youtube_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/youtube_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/zdnet_pathological_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/zoom_in_animation"
+    },
+    {
+        "duration": "34.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "32.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "57.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "56.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "55.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.common_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "8.0",
+        "name": "system_health.common_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "69.0",
+        "name": "system_health.common_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.common_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.common_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.common_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.common_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.common_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.common_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.common_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "8.0",
+        "name": "system_health.common_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "78.0",
+        "name": "system_health.common_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.common_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:games:lazors"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.common_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "8.0",
+        "name": "system_health.common_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.common_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.common_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.common_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "8.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "8.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.memory_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "10.0",
+        "name": "system_health.memory_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "74.0",
+        "name": "system_health.memory_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.memory_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.memory_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "43.0",
+        "name": "system_health.memory_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.memory_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.memory_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "80.0",
+        "name": "system_health.memory_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "79.0",
+        "name": "system_health.memory_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.memory_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:games:lazors"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.webview_startup/load:chrome:blank"
+    },
+    {
+        "duration": "11.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "10.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "11.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "12.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
+    },
+    {
+        "duration": "12.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
+    },
+    {
+        "duration": "22.0",
+        "name": "v8.browsing_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "v8.browsing_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "86.0",
+        "name": "v8.browsing_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "v8.browsing_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "v8.browsing_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "11.0",
+        "name": "v8.browsing_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "56.0",
+        "name": "v8.browsing_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "87.0",
+        "name": "v8.browsing_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "73.0",
+        "name": "v8.browsing_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "v8.browsing_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.browsing_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "66.0",
+        "name": "v8.browsing_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "v8.browsing_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "v8.browsing_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "87.0",
+        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "v8.browsing_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "77.0",
+        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "83.0",
+        "name": "v8.browsing_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "80.0",
+        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "56.0",
+        "name": "v8.browsing_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "27.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "27.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "27.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "33.0",
+        "name": "webrtc/pause_play_peerconnections"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel4-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel4-perf-pgo_timing.json
new file mode 100644
index 0000000..d38ad67b
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel4-perf-pgo_timing.json
@@ -0,0 +1,4422 @@
+[
+    {
+        "duration": "22.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/post-message.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/sequence-conversion-array.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/serialize-array.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "11.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": "6.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/FocusUpdate.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadBootstrapBlog.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-repeat-append.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "35.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "56.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "60.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-slot-append.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/FlowerFromMyGarden.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/FoodLeifLodahl.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/France.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/HarveyRayner.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/HereGear.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/UnderTheSee.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "130.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "142.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "147.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "59.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.webgl/binding-draw-arrays.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.webgl_fast_call/binding-draw-arrays.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "35.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "50.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "30.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "6.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "235.0",
+        "name": "jetstream2/JetStream2"
+    },
+    {
+        "duration": "33.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/58Pic"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.mobile/58Pic_3g"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/Amazon"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.mobile/Amazon_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/BOLNoticias"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.mobile/BOLNoticias_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Baidu"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.mobile/Baidu_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Bradesco"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/Bradesco_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/Dailymotion"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/Dailymotion_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Dawn"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/Dawn_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/DevOpera_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/DevOpera_cold_3g"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/DevOpera_hot"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/DevOpera_hot_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/DevOpera_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/DevOpera_warm_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/Dramaq"
+    },
+    {
+        "duration": "51.0",
+        "name": "loading.mobile/Dramaq_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/EnquiryIndianRail"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/EnquiryIndianRail_3g"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/Facebook"
+    },
+    {
+        "duration": "9.0",
+        "name": "loading.mobile/Facebook_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/FlipBoard_cold"
+    },
+    {
+        "duration": "39.0",
+        "name": "loading.mobile/FlipBoard_cold_3g"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/FlipBoard_hot"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/FlipBoard_hot_3g"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/FlipBoard_warm"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/FlipBoard_warm_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/FlipKart_cold"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/FlipKart_cold_3g"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/FlipKart_hot"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/FlipKart_hot_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/FlipKart_warm"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/FlipKart_warm_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/FranceTVInfo"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.mobile/FranceTVInfo_3g"
+    },
+    {
+        "duration": "9.0",
+        "name": "loading.mobile/G1"
+    },
+    {
+        "duration": "9.0",
+        "name": "loading.mobile/G1_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/GSShop"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/GSShop_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/GoogleBrazil"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/GoogleBrazil_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/GoogleIndia"
+    },
+    {
+        "duration": "9.0",
+        "name": "loading.mobile/GoogleIndia_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/GoogleIndonesia"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/GoogleIndonesia_3g"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.mobile/GoogleRedirectToGoogleJapan"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Hongkiat"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.mobile/Hongkiat_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/KapanLagi"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/KapanLagi_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Kaskus"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/Kaskus_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/LocalMoxie"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/LocalMoxie_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/Locanto"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/Locanto_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/OLX"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.mobile/OLX_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/QQNews"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.mobile/QQNews_3g"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.mobile/SlideShare"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.mobile/SlideShare_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Suumo_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Suumo_cold_3g"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/Suumo_hot"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/Suumo_hot_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Suumo_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Suumo_warm_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Thairath"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/Thairath_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/TheStar"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/TheStar_3g"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.mobile/TribunNews"
+    },
+    {
+        "duration": "36.0",
+        "name": "loading.mobile/TribunNews_3g"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.mobile/Twitter"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/Twitter_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/VoiceMemos_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/VoiceMemos_cold_3g"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/VoiceMemos_hot"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/VoiceMemos_hot_3g"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/VoiceMemos_warm"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.mobile/VoiceMemos_warm_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.mobile/Wikipedia"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.mobile/Wikipedia_3g"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.mobile/YahooNews"
+    },
+    {
+        "duration": "9.0",
+        "name": "loading.mobile/YahooNews_3g"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.mobile/Youtube"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.mobile/Youtube_3g"
+    },
+    {
+        "duration": "15.0",
+        "name": "media.mobile/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "15.0",
+        "name": "media.mobile/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "15.0",
+        "name": "media.mobile/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "137.0",
+        "name": "media.mobile/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "138.0",
+        "name": "media.mobile/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.mobile/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.mobile/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.mobile/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "35.0",
+        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "15.0",
+        "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.mobile/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "22.0",
+        "name": "media.mobile/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "33.0",
+        "name": "media.mobile/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "45.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "28.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "11.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": "15.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "21.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": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/accu_weather_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/accu_weather_mobile_pinch_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/amazon_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/amazon_mobile_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/analog_clock_svg"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/androidpolice_mobile_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/animometer_webgl"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/aquarium"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/aquarium_20k"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/background_color_animation"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/baidu_mobile_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/balls_javascript_canvas"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/balls_javascript_css"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/balls_svg_animations"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/basic_stream"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/bing_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/blob"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/blogspot_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/blogspot_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/blur_rotating_background"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/boingboing_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/booking.com_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/booking.com_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/bouncing_balls_15"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/bouncing_balls_shadow"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/bouncing_gradient_circles"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/bouncing_png_images"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_svg_images"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/camera_to_webgl"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_animation_no_clear"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_arcs"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_font_cycler"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_lines"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_to_blob"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/capitolvolkswagen_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/card_expansion"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/card_expansion_animated"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/card_expansion_images_text"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/card_flying"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/cc_poster_circle"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/cc_scroll_text_only"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/chip_tune"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/cnn_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/cnn_article_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/cnn_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/cnn_mobile_pinch_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/cnn_pathological_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/compositor_heavy_animation"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/coordinated_animation"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/crafty_mind"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_many_keyframes"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_style_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_transitions_updating_class"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_value_type_color"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_value_type_filter"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_value_type_length"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_value_type_length_complex"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_value_type_length_simple"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_value_type_path"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_value_type_shadow"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/css_value_type_transform_complex"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/css_value_type_transform_simple"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/deviantart_mobile_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/digg_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/docs_paper.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/docs_resume.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/docs_table.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/draw_image"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/dynamic_cube_map"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/earth"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/ebay_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/ebay_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/ebay_mobile_pinch_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/ebay_scroll_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/effect_games"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/espn_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/espn_mobile_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/espn_pathological_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/extra_large_texture_uploads"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/facebook_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/facebook_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.mobile/famo_us_twitter_demo"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/fill_clear_rect.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/fill_shapes"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/filter_terrain_svg"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/flickr_scroll_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/font_wipe"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/forecast.io_mobile_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/get_image_data_cpu.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/get_image_data_gpu.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/gmail_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/google_calendar_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/google_docs_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/google_image_search_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/google_image_search_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/google_news_ios"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/google_news_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/google_plus_2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/google_plus_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/google_search_mobile_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/google_web_search_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/google_web_search_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/gpu_bound_shader.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/gsp.ro_mobile_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/guardian_pathological_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/guimark_vector_chart"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/gws_boogie_expansion"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/gws_google_expansion"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/hakim"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/horizontal_vertical_expansion"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.mobile/idle_power_blank"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/ie_chalkboard"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/ie_pirate_mark"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_0"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_75"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_0"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_75"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_0"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_75"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scrolling"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/jarro_doverson"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/js_full_screen_invalidation"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_0"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_75"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/js_poster_circle"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/js_scroll_text_only"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/kevs_3d"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/keyframed_animations"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/large_texture_uploads"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/latimes_pathological_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/linkedin_2018"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.mobile/linkedin_mobile_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/linkedin_mobile_pinch_2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/linkedin_pathological_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/list_animation_simple"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/list_recycle_transform"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "44.0",
+        "name": "rendering.mobile/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/main_animations_half_presented"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/man_in_blue"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/many_images"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/many_planets_deep"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/maps_perf_test"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/mask_transition_animation"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/masonry"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/medium_texture_uploads"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/megi_dish"
+    },
+    {
+        "duration": "60.0",
+        "name": "rendering.mobile/microgame_fps"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.mobile/microsoft_fireflies"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_performance"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_snow"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_speed_reading"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_tweet_map"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_video_city"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/microsoft_worker_fountains"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/mix_10k"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/mlb_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/mobile_news_sandbox"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/motionmark_anim_design_15"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/motionmark_anim_focus_25"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_anim_images_50"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_anim_leaves_250"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_anim_multiply_175"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_anim_suits_125"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_composited_transforms_125"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_blend_circles_25"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_circles_250"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_filter_circles_15"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_gradient_circles_250"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_svg_images_50"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_tagged_images_225"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_dom_particles_svg_masks_25"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motionmark_html_focus_20_15"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_html_leaves_20_50"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_circles_250"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_gradient_circles_200"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_png_images_200"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_svg_images_50"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/new_tilings"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/no_op_raf"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/no_op_scroll"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/no_op_settimeout"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/no_op_touch_handler"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/nyc_gov_scroll_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/nytimes_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/nytimes_scroll_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/off_screen_main_60fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/parallax_effect"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/particles"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/pbs_pathological_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/physical_simulation"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/pinterest_2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/pinterest_mobile_2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/put_get_image_data"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/put_image_data.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/raf"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/raf_animation"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/raf_canvas"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/raf_touch_animation"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/recode_pathological_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/reddit_mobile_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/runway_2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/san_angeles"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_heavy"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_light"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/second_batch_js_medium"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/sfgate_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/sheets_render.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/silk_finance"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/simple_text_page"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/simple_touch_drag"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.mobile/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/slashdot_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/small_texture_uploads"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/smash_cat"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/spielzeugz"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/sticky_using_webkit"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/stroke_shapes"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/svg_icon_raster"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/swipe_to_dismiss"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/sync_scroll_offset"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/techcrunch_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/techcrunch_mobile_2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.mobile/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.mobile/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.mobile/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.mobile/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/theverge_article_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/theverge_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/throughput_scrolling_composited"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.mobile/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/toBlob_duration.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/touch_handler_scrolling"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/transform_transitions"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/transform_transitions_js_block"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/twitch_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/twitch_mobile_pinch_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/twitter_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/twitter_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/update_history_state"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/usatoday_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/vertical_expansion"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/video_to_sub_texture"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/video_to_texture"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_color"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_path"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/web_animations_many_keyframes"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animations_set_current_time"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animations_simultaneous"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/webgl_to_texture"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/wikipedia_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/wikipedia_delayed_scroll_start_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/wikipedia_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/wordpress_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/wordpress_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/worldjournal_mobile_2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/wow_wiki_pathological_2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/wowwiki_mobile_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/wsj_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/yahoo_answers_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/yahoo_answers_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/yahoo_news_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/yahoo_news_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/yahoo_sports_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/yahoo_sports_pathological_2018"
+    },
+    {
+        "duration": "10.0",
+        "name": "rendering.mobile/youtube_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/youtube_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/zdnet_pathological_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/zoom_in_animation"
+    },
+    {
+        "duration": "22.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "20.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "34.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "38.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "32.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "80.0",
+        "name": "startup.mobile/cct:coldish:bbc"
+    },
+    {
+        "duration": "83.0",
+        "name": "startup.mobile/intent:coldish:bbc"
+    },
+    {
+        "duration": "55.0",
+        "name": "startup.mobile/intent:warm:bbc"
+    },
+    {
+        "duration": "52.0",
+        "name": "startup.mobile/maps_pwa:with_http_cache"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.common_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.common_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.common_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "74.0",
+        "name": "system_health.common_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.common_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "74.0",
+        "name": "system_health.common_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "10.0",
+        "name": "system_health.common_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.common_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.common_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.common_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "10.0",
+        "name": "system_health.common_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "80.0",
+        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "84.0",
+        "name": "system_health.common_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "74.0",
+        "name": "system_health.common_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_mobile/load:games:lazors"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.common_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "43.0",
+        "name": "system_health.memory_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "system_health.memory_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "71.0",
+        "name": "system_health.memory_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.memory_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "system_health.memory_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "62.0",
+        "name": "system_health.memory_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.memory_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.memory_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "43.0",
+        "name": "system_health.memory_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.memory_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.memory_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.memory_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "80.0",
+        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "86.0",
+        "name": "system_health.memory_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "69.0",
+        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "83.0",
+        "name": "system_health.memory_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.memory_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/load:games:lazors"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.memory_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.memory_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.memory_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "14.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "13.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "12.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "12.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "12.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "12.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": "15.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": "91.0",
+        "name": "v8.browsing_mobile-future/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_mobile-future/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "98.0",
+        "name": "v8.browsing_mobile-future/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_mobile-future/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "98.0",
+        "name": "v8.browsing_mobile-future/browse:media:imgur:2019"
+    },
+    {
+        "duration": "82.0",
+        "name": "v8.browsing_mobile-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_mobile-future/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "65.0",
+        "name": "v8.browsing_mobile-future/browse:news:globo:2019"
+    },
+    {
+        "duration": "78.0",
+        "name": "v8.browsing_mobile-future/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "64.0",
+        "name": "v8.browsing_mobile-future/browse:news:qq:2019"
+    },
+    {
+        "duration": "82.0",
+        "name": "v8.browsing_mobile-future/browse:news:reddit:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "v8.browsing_mobile-future/browse:news:toi:2019"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_mobile-future/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_mobile-future/browse:search:amp:2018"
+    },
+    {
+        "duration": "52.0",
+        "name": "v8.browsing_mobile-future/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "79.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "76.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "79.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "83.0",
+        "name": "v8.browsing_mobile-future/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "86.0",
+        "name": "v8.browsing_mobile-future/browse:social:facebook:2019"
+    },
+    {
+        "duration": "101.0",
+        "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "106.0",
+        "name": "v8.browsing_mobile-future/browse:social:instagram:2019"
+    },
+    {
+        "duration": "91.0",
+        "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "95.0",
+        "name": "v8.browsing_mobile-future/browse:social:twitter:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_mobile-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "95.0",
+        "name": "v8.browsing_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.browsing_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "101.0",
+        "name": "v8.browsing_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "79.0",
+        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "102.0",
+        "name": "v8.browsing_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "77.0",
+        "name": "v8.browsing_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "15.0",
+        "name": "v8.browsing_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "v8.browsing_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "77.0",
+        "name": "v8.browsing_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "76.0",
+        "name": "v8.browsing_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "79.0",
+        "name": "v8.browsing_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "v8.browsing_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "56.0",
+        "name": "v8.browsing_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.browsing_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "59.0",
+        "name": "v8.browsing_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "86.0",
+        "name": "v8.browsing_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.browsing_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "105.0",
+        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "110.0",
+        "name": "v8.browsing_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "89.0",
+        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "91.0",
+        "name": "v8.browsing_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "99.0",
+        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "72.0",
+        "name": "v8.browsing_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "21.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "31.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "31.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "31.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "21.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_noop_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "31.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "33.0",
+        "name": "webrtc/pause_play_peerconnections"
+    },
+    {
+        "duration": "60.0",
+        "name": "components_perftests/_gtest_"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel4_weblayer-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel4_weblayer-perf-pgo_timing.json
new file mode 100644
index 0000000..0c6c7d9
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel4_weblayer-perf-pgo_timing.json
@@ -0,0 +1,6 @@
+[
+    {
+        "duration": "4.0",
+        "name": "startup.mobile/maps_pwa:with_http_cache"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel4a_power-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel4a_power-perf-pgo_timing.json
new file mode 100644
index 0000000..09e14544
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel4a_power-perf-pgo_timing.json
@@ -0,0 +1,14 @@
+[
+    {
+        "duration": "75.0",
+        "name": "power.mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "112.0",
+        "name": "power.mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "104.0",
+        "name": "power.mobile/browse:tech:discourse_infinite_scroll:2018"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/linux-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/linux-perf-pgo_timing.json
new file mode 100644
index 0000000..933c600
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/linux-perf-pgo_timing.json
@@ -0,0 +1,4342 @@
+[
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.bindings/post-message.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/sequence-conversion-array.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.bindings/serialize-array.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/FocusUpdate.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/LoadBootstrapBlog.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/line-layout-repeat-append.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/line-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-slot-append.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/FlowerFromMyGarden.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/FoodLeifLodahl.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/France.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/HarveyRayner.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/HereGear.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/UnderTheSee.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "63.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "64.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "63.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgl/binding-draw-arrays.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgl_fast_call/binding-draw-arrays.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "desktop_ui/tab_search:clean_slate"
+    },
+    {
+        "duration": "23.0",
+        "name": "desktop_ui/tab_search:close_and_open:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "desktop_ui/tab_search:close_and_open:loading:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/tab_search:measure_memory:2tab_search"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/tab_search:measure_memory:3tab_search"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/tab_search:measure_memory:after"
+    },
+    {
+        "duration": "16.0",
+        "name": "desktop_ui/tab_search:measure_memory:before"
+    },
+    {
+        "duration": "19.0",
+        "name": "desktop_ui/tab_search:measure_memory:multiwindow"
+    },
+    {
+        "duration": "74.0",
+        "name": "desktop_ui/tab_search:scroll_up_and_down:2020"
+    },
+    {
+        "duration": "33.0",
+        "name": "desktop_ui/tab_search:top10:2020"
+    },
+    {
+        "duration": "19.0",
+        "name": "desktop_ui/tab_search:top10:loading:2020"
+    },
+    {
+        "duration": "53.0",
+        "name": "desktop_ui/tab_search:top50:2020"
+    },
+    {
+        "duration": "38.0",
+        "name": "desktop_ui/tab_search:top50:loading:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "32.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "48.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "26.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "3.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "181.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "168.0",
+        "name": "jetstream2/JetStream2"
+    },
+    {
+        "duration": "23.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/24h_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/24h_warm"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/AirBnB_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/AirBnB_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Aljayyash_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Aljayyash_warm"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/AllRecipes_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/AllRecipes_warm"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/ArsTechnica_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/ArsTechnica_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Baidu_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Baidu_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Bhaskar_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Bhaskar_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Chosun_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Chosun_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Colorado.edu_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Colorado.edu_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Danawa_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Danawa_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Daum_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Daum_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Donga_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Donga_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Economist_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Economist_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Elmundo_cold"
+    },
+    {
+        "duration": "4.0",
+        "name": "loading.desktop/Elmundo_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/FC2Blog_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/FC2Blog_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/FIFA_cold"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/FIFA_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/FarsNews_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/FarsNews_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Flickr_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Flickr_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/FlipKart_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/FlipKart_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Free.fr_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Free.fr_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/HTML5Rocks_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/HTML5Rocks_warm"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.desktop/Haraj_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Haraj_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/HatenaBookmark_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/HatenaBookmark_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/IGN_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/IGN_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/IMDB_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/IMDB_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/IndiaTimes_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/IndiaTimes_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Kakaku_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Kakaku_warm"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/Kenh14_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Kenh14_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Mercadolivre_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Mercadolivre_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Naver_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Naver_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Orange_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Orange_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Pantip_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Pantip_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/PremierLeague_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/PremierLeague_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/QQ_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/QQ_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/REI_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/REI_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Ruten_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Ruten_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Sina_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Sina_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Taobao_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Taobao_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/TheOnion_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/TheOnion_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/TheVerge_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/TheVerge_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/TicketMaster_cold"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/TicketMaster_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Vietnamnet_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Vietnamnet_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Vnexpress_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/Vnexpress_warm"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.desktop/Walgreens_cold"
+    },
+    {
+        "duration": "5.0",
+        "name": "loading.desktop/Walgreens_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Yandex_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Yandex_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/amazon.co.jp_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/amazon.co.jp_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/ja.wikipedia_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/ja.wikipedia_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/money.cnn_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/money.cnn_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/ru.wikipedia_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/ru.wikipedia_warm"
+    },
+    {
+        "duration": "4.0",
+        "name": "loading.desktop/uol.com.br_cold"
+    },
+    {
+        "duration": "4.0",
+        "name": "loading.desktop/uol.com.br_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/yahoo.co.jp_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/yahoo.co.jp_warm"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/mse.html?media=tulip0.av1.mp4"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "134.0",
+        "name": "media.desktop/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/video.html?src=crowd1080.mp4"
+    },
+    {
+        "duration": "20.0",
+        "name": "media.desktop/video.html?src=crowd1080.webm"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
+    },
+    {
+        "duration": "132.0",
+        "name": "media.desktop/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4&seek"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "9.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "26.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "9.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "26.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "16.0",
+        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "35.0",
+        "name": "memory.desktop/WebWorker"
+    },
+    {
+        "duration": "40.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "44.0",
+        "name": "power.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "49.0",
+        "name": "power.desktop/abcnews"
+    },
+    {
+        "duration": "43.0",
+        "name": "power.desktop/indiatimes"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/instagram"
+    },
+    {
+        "duration": "48.0",
+        "name": "power.desktop/microsoft"
+    },
+    {
+        "duration": "43.0",
+        "name": "power.desktop/sina"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/slideshare"
+    },
+    {
+        "duration": "43.0",
+        "name": "power.desktop/uol"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/accu_weather_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/accu_weather_pinch_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/amazon_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/amazon_pinch_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/analog_clock_svg"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/animometer_webgl"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/animometer_webgl_fast_call"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/animometer_webgl_indexed"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_fast_call"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw_base_vertex_base_instance"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/aquarium"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/aquarium_20k"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/aquarium_20k_fast_call"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/background_color_animation"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/balls_javascript_canvas"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/balls_javascript_css"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/balls_svg_animations"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/blob"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/blogspot_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/blogspot_pinch_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/blur_rotating_background"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/booking.com_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/booking_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/bouncing_balls_15"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/bouncing_balls_shadow"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/bouncing_gradient_circles"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/bouncing_png_images"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/bouncing_svg_images"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/camera_to_webgl"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/canvas_animation_no_clear"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/canvas_arcs"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/canvas_font_cycler"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_lines"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/canvas_to_blob"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/cc_poster_circle"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/cc_scroll_text_only"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/chip_tune"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/cnn_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/cnn_pinch_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/compositor_heavy_animation"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/crafty_mind"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_many_keyframes"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_inline_style"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_color"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_filter"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_length"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_value_type_length_complex"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_value_type_length_simple"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_path"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_shadow"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_transform_complex"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_transform_simple"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/docs_paper.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/docs_resume.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/docs_table.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/draw_image"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/dynamic_cube_map"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/earth"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/ebay_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/ebay_pinch_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/effect_games"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/espn_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/espn_pinch_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/extra_large_texture_uploads"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/facebook_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/facebook_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/fill_clear_rect.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/fill_shapes"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/filter_terrain_svg"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/get_image_data_cpu.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/get_image_data_gpu.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/gmail_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/gmail_move_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/gmail_pinch_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/google_calendar_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_calendar_pinch_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/google_docs_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_image_pinch_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_image_search_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_plus_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_search_pinch_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/google_web_search_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/gpu_bound_shader.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/guimark_vector_chart"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/hakim"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/ie_chalkboard"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/ie_pirate_mark"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/jarro_doverson"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/js_full_screen_invalidation"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/js_poster_circle"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/js_scroll_text_only"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/kevs_3d"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/keyframed_animations"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/large_texture_uploads"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/linkedin_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/linkedin_pinch_2018"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/lost_crypt"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/lost_crypt_fast_call"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/main_animations_half_presented"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/man_in_blue"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/many_images"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/many_planets_deep"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/maps_move_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/maps_perf_test"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/medium_texture_uploads"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/megi_dish"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/microgame_fps"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/microgame_fps_fast_call"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_fireflies"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_performance"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_snow"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_speed_reading"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_tweet_map"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_video_city"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/microsoft_worker_fountains"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/mix_10k"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/new_tilings"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/off_screen_main_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/particles"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/pinterest_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/put_get_image_data"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/put_image_data.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/raf"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/raf_animation"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/raf_canvas"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/raf_touch_animation"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_amazon_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_cnn_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_facebook_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_google_search_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_instagram_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_reddit_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_theverge_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_twitter_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_wikipedia_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_yahoo_homepage_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/runway_2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/san_angeles"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/second_batch_js_heavy"
+    },
+    {
+        "duration": "10.0",
+        "name": "rendering.desktop/second_batch_js_light"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/second_batch_js_medium"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/sheets_render.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/simple_text_page"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/simple_touch_drag"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020_fast_call"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/small_texture_uploads"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/smash_cat"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/spielzeugz"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/stroke_shapes"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/sync_scroll_offset"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/techcrunch_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_composited"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020_fast_call"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/toBlob_duration.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/touch_handler_scrolling"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/transform_transitions"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/transform_transitions_js_block"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/twitch_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/twitch_pinch_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/twitter_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/twitter_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/video_to_sub_texture"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/video_to_texture"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/web_animation_value_type_color"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animation_value_type_path"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_many_keyframes"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animations_set_current_time"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/web_animations_simultaneous"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/webgl_to_texture"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/wikipedia_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/wordpress_2018"
+    },
+    {
+        "duration": "10.0",
+        "name": "rendering.desktop/yahoo_answers_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/yahoo_news_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/yahoo_news_pinch_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/yahoo_sports_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/yahoo_sports_pinch_2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/youtube_2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/youtube_pinch_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "35.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "66.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "64.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "63.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.common_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "68.0",
+        "name": "system_health.common_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "85.0",
+        "name": "system_health.common_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.common_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "58.0",
+        "name": "system_health.common_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.common_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.common_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.common_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "58.0",
+        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.common_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.common_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "71.0",
+        "name": "system_health.common_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.common_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "8.0",
+        "name": "system_health.common_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:games:lazors"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load:media:9gag"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.common_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.common_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "43.0",
+        "name": "system_health.common_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.common_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.memory_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "58.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.memory_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.memory_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.memory_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:games:lazors"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:9gag"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.memory_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.memory_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.memory_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "0.0",
+        "name": "tab_switching.typical_25/multitab:misc:typical24"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "10.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "11.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:media:imgur"
+    },
+    {
+        "duration": "94.0",
+        "name": "v8.browsing_desktop-future/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "64.0",
+        "name": "v8.browsing_desktop-future/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "79.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "v8.browsing_desktop-future/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "v8.browsing_desktop-future/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.browsing_desktop-future/browse:news:reddit:2020"
+    },
+    {
+        "duration": "52.0",
+        "name": "v8.browsing_desktop-future/browse:search:google:2020"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "64.0",
+        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "54.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter:2018"
+    },
+    {
+        "duration": "66.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_desktop-future/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "75.0",
+        "name": "v8.browsing_desktop-future/browse:tools:earth:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "73.0",
+        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.browsing_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "78.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "v8.browsing_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "66.0",
+        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.browsing_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.browsing_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "10.0",
+        "name": "v8.browsing_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "37.0",
+        "name": "v8.browsing_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_noop_video"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "18.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "13.0",
+        "name": "webrtc/negotiate-timing"
+    },
+    {
+        "duration": "30.0",
+        "name": "webrtc/pause_play_peerconnections"
+    },
+    {
+        "duration": "5.0",
+        "name": "tracing_perftests/_gtest_"
+    },
+    {
+        "duration": "200.0",
+        "name": "base_perftests/_gtest_"
+    },
+    {
+        "duration": "165.0",
+        "name": "performance_browser_tests/_gtest_"
+    },
+    {
+        "duration": "3.0",
+        "name": "load_library_perf_tests/_gtest_"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/mac-laptop_high_end-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/mac-laptop_high_end-perf-pgo_timing.json
new file mode 100644
index 0000000..0831df09
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/mac-laptop_high_end-perf-pgo_timing.json
@@ -0,0 +1,4602 @@
+[
+    {
+        "duration": "58.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "44.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-content-visibility-auto.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-content-visibility-hidden.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-display-none.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.accessibility/slot-updates.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/post-message.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/sequence-conversion-array.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/serialize-array.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/FocusUpdate.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadBootstrapBlog.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "blink_perf.dom/insert-text-with-dir-auto.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.dom/replace-text-with-dir-auto.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/css-contain-change-text-different-subtree-root.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/css-contain-change-text-without-subtree-root.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/css-contain-change-text.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-nested-rows-and-columns-auto-overflow.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-repeat-append.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "39.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "152.0",
+        "name": "blink_perf.shadow_dom/imperative-shadow-dom-overhead.html"
+    },
+    {
+        "duration": "139.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead-iframe.html"
+    },
+    {
+        "duration": "46.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-slot-append.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/FlowerFromMyGarden.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/FoodLeifLodahl.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/France.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/HarveyRayner.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/HereGear.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/UnderTheSee.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "93.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "93.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "93.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.webaudio/timeline-insert-event.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.webgl/binding-bind-buffer.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl/binding-draw-arrays.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.webgl/binding-typed-array-uniforms.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.webgl_fast_call/binding-bind-buffer.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl_fast_call/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl_fast_call/binding-draw-arrays.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.webgl_fast_call/binding-typed-array-uniforms.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.webgpu/binding-draw.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.webgpu_fast_call/binding-draw.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "desktop_ui/download_shelf:1file"
+    },
+    {
+        "duration": "26.0",
+        "name": "desktop_ui/download_shelf:5file"
+    },
+    {
+        "duration": "25.0",
+        "name": "desktop_ui/download_shelf:measure_memory"
+    },
+    {
+        "duration": "34.0",
+        "name": "desktop_ui/download_shelf:top10:loading"
+    },
+    {
+        "duration": "25.0",
+        "name": "desktop_ui/download_shelf_webui:1file"
+    },
+    {
+        "duration": "26.0",
+        "name": "desktop_ui/download_shelf_webui:5file"
+    },
+    {
+        "duration": "25.0",
+        "name": "desktop_ui/download_shelf_webui:measure_memory"
+    },
+    {
+        "duration": "28.0",
+        "name": "desktop_ui/download_shelf_webui:top10:loading"
+    },
+    {
+        "duration": "19.0",
+        "name": "desktop_ui/new_tab_page:loading"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/omnibox:pedal"
+    },
+    {
+        "duration": "14.0",
+        "name": "desktop_ui/omnibox:scoped_search"
+    },
+    {
+        "duration": "12.0",
+        "name": "desktop_ui/omnibox:search"
+    },
+    {
+        "duration": "5.0",
+        "name": "desktop_ui/side_search:measure_memory"
+    },
+    {
+        "duration": "5.0",
+        "name": "desktop_ui/side_search:navigation"
+    },
+    {
+        "duration": "247.0",
+        "name": "desktop_ui/tab_search:100_recently_closed"
+    },
+    {
+        "duration": "38.0",
+        "name": "desktop_ui/tab_search:10_recently_closed"
+    },
+    {
+        "duration": "130.0",
+        "name": "desktop_ui/tab_search:50_recently_closed"
+    },
+    {
+        "duration": "8.0",
+        "name": "desktop_ui/tab_search:clean_slate"
+    },
+    {
+        "duration": "29.0",
+        "name": "desktop_ui/tab_search:close_and_open:2020"
+    },
+    {
+        "duration": "20.0",
+        "name": "desktop_ui/tab_search:close_and_open:loading:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "desktop_ui/tab_search:measure_memory:2tab_search"
+    },
+    {
+        "duration": "16.0",
+        "name": "desktop_ui/tab_search:measure_memory:3tab_search"
+    },
+    {
+        "duration": "16.0",
+        "name": "desktop_ui/tab_search:measure_memory:after"
+    },
+    {
+        "duration": "17.0",
+        "name": "desktop_ui/tab_search:measure_memory:before"
+    },
+    {
+        "duration": "21.0",
+        "name": "desktop_ui/tab_search:measure_memory:multiwindow"
+    },
+    {
+        "duration": "55.0",
+        "name": "desktop_ui/tab_search:scroll_up_and_down:2020"
+    },
+    {
+        "duration": "43.0",
+        "name": "desktop_ui/tab_search:top10:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "desktop_ui/tab_search:top10:loading:2020"
+    },
+    {
+        "duration": "70.0",
+        "name": "desktop_ui/tab_search:top50:2020"
+    },
+    {
+        "duration": "60.0",
+        "name": "desktop_ui/tab_search:top50:loading:2020"
+    },
+    {
+        "duration": "37.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "35.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "48.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "28.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "6.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "182.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "161.0",
+        "name": "jetstream2/JetStream2"
+    },
+    {
+        "duration": "24.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/24h_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/24h_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/AirBnB_cold"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/AirBnB_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Aljayyash_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Aljayyash_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/AllRecipes_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/AllRecipes_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/ArsTechnica_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/ArsTechnica_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Baidu_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Baidu_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Bhaskar_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/Bhaskar_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Chosun_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Chosun_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Colorado.edu_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Colorado.edu_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Danawa_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Danawa_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Daum_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Daum_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Donga_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Donga_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Economist_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Economist_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Elmundo_cold"
+    },
+    {
+        "duration": "6.0",
+        "name": "loading.desktop/Elmundo_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/FC2Blog_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/FC2Blog_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/FIFA_cold"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/FIFA_warm"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/FarsNews_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/FarsNews_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Flickr_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Flickr_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/FlipKart_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/FlipKart_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Free.fr_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Free.fr_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/HTML5Rocks_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/HTML5Rocks_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Haraj_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Haraj_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/HatenaBookmark_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/HatenaBookmark_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/IGN_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/IGN_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/IMDB_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/IMDB_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/IndiaTimes_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/IndiaTimes_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Kakaku_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Kakaku_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/Kenh14_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Kenh14_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Mercadolivre_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Mercadolivre_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Naver_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Naver_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Orange_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Orange_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Pantip_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Pantip_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/PremierLeague_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/PremierLeague_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/QQ_cold"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/QQ_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/REI_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/REI_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Ruten_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Ruten_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Sina_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Sina_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Taobao_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/Taobao_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/TheOnion_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/TheOnion_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/TheVerge_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/TheVerge_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/TicketMaster_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/TicketMaster_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Vietnamnet_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Vietnamnet_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Vnexpress_cold"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/Vnexpress_warm"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.desktop/Walgreens_cold"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.desktop/Walgreens_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Yandex_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/Yandex_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/amazon.co.jp_cold"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/amazon.co.jp_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/ja.wikipedia_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/ja.wikipedia_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/money.cnn_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/money.cnn_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/ru.wikipedia_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/ru.wikipedia_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/uol.com.br_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/uol.com.br_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/yahoo.co.jp_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/yahoo.co.jp_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/mse.html?media=tulip0.av1.mp4"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "131.0",
+        "name": "media.desktop/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/video.html?src=crowd1080.mp4"
+    },
+    {
+        "duration": "20.0",
+        "name": "media.desktop/video.html?src=crowd1080.webm"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
+    },
+    {
+        "duration": "133.0",
+        "name": "media.desktop/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
+    },
+    {
+        "duration": "9.0",
+        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
+    },
+    {
+        "duration": "19.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4"
+    },
+    {
+        "duration": "9.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4&seek"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "9.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "67.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "9.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "19.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "27.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "16.0",
+        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "39.0",
+        "name": "memory.desktop/WebWorker"
+    },
+    {
+        "duration": "42.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "37.0",
+        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "38.0",
+        "name": "power.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "61.0",
+        "name": "power.desktop/abcnews"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/indiatimes"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/instagram"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/microsoft"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/sina"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/slideshare"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/uol"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/accu_weather_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/accu_weather_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/amazon_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/amazon_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/analog_clock_svg"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/animometer_webgl"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/animometer_webgl_fast_call"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/animometer_webgl_indexed"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_fast_call"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw_base_vertex_base_instance"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/aquarium"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/aquarium_20k"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/aquarium_20k_fast_call"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/background_color_animation"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/balls_javascript_canvas"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/balls_javascript_css"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/balls_svg_animations"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/blob"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/blogspot_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/blogspot_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/blur_rotating_background"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/booking.com_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/booking_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/bouncing_balls_15"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/bouncing_balls_shadow"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/bouncing_gradient_circles"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/bouncing_png_images"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/bouncing_svg_images"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/camera_to_webgl"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_animation_no_clear"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_arcs"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/canvas_font_cycler"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/canvas_lines"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/canvas_to_blob"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/cc_poster_circle"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/cc_scroll_text_only"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/chip_tune"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/cnn_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/cnn_pinch_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/compositor_heavy_animation"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/crafty_mind"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_many_keyframes"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_inline_style"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_style_element"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_updating_class"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_value_type_color"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_filter"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/css_value_type_length"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/css_value_type_length_complex"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/css_value_type_length_simple"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/css_value_type_path"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_shadow"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_transform_complex"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_transform_simple"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/docs_paper.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/docs_resume.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/docs_table.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/draw_image"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/dynamic_cube_map"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/earth"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/ebay_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/ebay_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/effect_games"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/espn_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/espn_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/extra_large_texture_uploads"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/facebook_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/facebook_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/fill_clear_rect.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/fill_shapes"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/filter_terrain_svg"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/get_image_data_cpu.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/get_image_data_gpu.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/gmail_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/gmail_move_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/gmail_pinch_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_calendar_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/google_calendar_pinch_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/google_docs_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/google_image_pinch_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/google_image_search_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/google_plus_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/google_search_pinch_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/google_web_search_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/gpu_bound_shader.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/guimark_vector_chart"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/hakim"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/ie_chalkboard"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/ie_pirate_mark"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/jarro_doverson"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/js_full_screen_invalidation"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/js_poster_circle"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/js_scroll_text_only"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/kevs_3d"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/keyframed_animations"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/large_texture_uploads"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/linkedin_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/linkedin_pinch_2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.desktop/lost_crypt"
+    },
+    {
+        "duration": "53.0",
+        "name": "rendering.desktop/lost_crypt_fast_call"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/main_animations_half_presented"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/man_in_blue"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/many_images"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/many_planets_deep"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/maps_move_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/maps_perf_test"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/medium_texture_uploads"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/megi_dish"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/microgame_fps"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/microgame_fps_fast_call"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/microsoft_fireflies"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/microsoft_performance"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/microsoft_snow"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/microsoft_speed_reading"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/microsoft_tweet_map"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/microsoft_video_city"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/microsoft_worker_fountains"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/mix_10k"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/motionmark_ramp_canvas_arcs"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/motionmark_ramp_canvas_lines"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/motionmark_ramp_design"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/motionmark_ramp_images"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/motionmark_ramp_leaves"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/motionmark_ramp_multiply"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/motionmark_ramp_paths"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/motionmark_ramp_suits"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/new_tilings"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/non_opaque_background_compositor_thread_scrolling_00050_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/non_opaque_background_main_thread_scrolling_00050_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/off_screen_main_60fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/offscreen_animation_no_damage"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/particles"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/pinterest_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/put_get_image_data"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/put_image_data.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/raf"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/raf_animation"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/raf_canvas"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/raf_touch_animation"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/repaint_amazon_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_cnn_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_facebook_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_google_search_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_instagram_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_reddit_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_theverge_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_twitter_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_wikipedia_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/repaint_yahoo_homepage_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/runway_2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/san_angeles"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/second_batch_js_heavy"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/second_batch_js_light"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/second_batch_js_medium"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/sheets_render.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/simple_text_page"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/simple_touch_drag"
+    },
+    {
+        "duration": "8.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "8.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020_fast_call"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/small_texture_uploads"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/smash_cat"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/spielzeugz"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/stroke_shapes"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/sync_scroll_offset"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/techcrunch_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/text_scrollbar_100_pixels_per_second"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/text_scrollbar_1200_pixels_per_second"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/text_scrollbar_200_pixels_per_second"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/text_scrollbar_2300_pixels_per_second"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/text_scrollbar_700_pixels_per_second"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/throughput_scrolling_composited"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "59.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020_fast_call"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/toBlob_duration.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/touch_handler_scrolling"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/transform_transitions"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/transform_transitions_js_block"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/twitch_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/twitch_pinch_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/twitter_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/twitter_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/video_to_sub_texture"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/video_to_texture"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/web_animation_value_type_color"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/web_animation_value_type_path"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/web_animations_many_keyframes"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/web_animations_set_current_time"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/web_animations_simultaneous"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/webgl_to_texture"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/wikipedia_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/wordpress_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/yahoo_answers_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/yahoo_news_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/yahoo_news_pinch_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/yahoo_sports_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/yahoo_sports_pinch_2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/youtube_2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/youtube_pinch_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "37.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "65.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "66.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "65.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.common_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "89.0",
+        "name": "system_health.common_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "73.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.common_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.common_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.common_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.common_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.common_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "62.0",
+        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "58.0",
+        "name": "system_health.common_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:games:lazors"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:media:9gag"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.common_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.common_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "68.0",
+        "name": "system_health.memory_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "85.0",
+        "name": "system_health.memory_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.memory_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.memory_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.memory_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.memory_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.memory_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.memory_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:games:lazors"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:media:9gag"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "0.0",
+        "name": "system_health.pcscan/browse:news:cnn:2021"
+    },
+    {
+        "duration": "0.0",
+        "name": "tab_switching.typical_25/multitab:misc:typical24"
+    },
+    {
+        "duration": "10.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "10.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:media:imgur"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_desktop-future/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.browsing_desktop-future/browse:news:cnn:2021"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.browsing_desktop-future/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:news:reddit:2020"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.browsing_desktop-future/browse:search:google:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "v8.browsing_desktop-future/browse:search:google_india:2021"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "35.0",
+        "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:earth:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.browsing_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.browsing_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.browsing_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "34.0",
+        "name": "v8.browsing_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "v8.browsing_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "0.0",
+        "name": "wasmpspdfkit/https://pspdfkit.com/webassembly-benchmark/"
+    },
+    {
+        "duration": "21.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "30.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "30.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "30.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_audio_processing"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_noop_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "20.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "31.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "13.0",
+        "name": "webrtc/negotiate-timing"
+    },
+    {
+        "duration": "33.0",
+        "name": "webrtc/pause_play_peerconnections"
+    },
+    {
+        "duration": "300.0",
+        "name": "base_perftests/_gtest_"
+    },
+    {
+        "duration": "330.0",
+        "name": "dawn_perf_tests/_gtest_"
+    },
+    {
+        "duration": "190.0",
+        "name": "performance_browser_tests/_gtest_"
+    },
+    {
+        "duration": "7.0",
+        "name": "views_perftests/_gtest_"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/mac-laptop_low_end-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/mac-laptop_low_end-perf-pgo_timing.json
new file mode 100644
index 0000000..9a129c2
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/mac-laptop_low_end-perf-pgo_timing.json
@@ -0,0 +1,4266 @@
+[
+    {
+        "duration": "24.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "40.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/post-message.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/sequence-conversion-array.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/serialize-array.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "10.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": "10.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "13.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": "9.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.display_locking/abs_pos_outer_sizes_change.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.display_locking/fieldset_container_width_changes.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.display_locking/flex_container_width_changes.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.display_locking/forced_layout_on_locked_el.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.display_locking/inner_sizes_change.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.display_locking/outer_sizes_change.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.display_locking/outer_sizes_change_activatable.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.display_locking/outer_sizes_change_iframe.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.display_locking/unlock_top_items.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.display_locking/unlock_top_items_nested.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "54.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-repeat-append.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "40.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-slot-append.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/FlowerFromMyGarden.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/FoodLeifLodahl.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/France.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/HarveyRayner.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/HereGear.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/UnderTheSee.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "116.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "117.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "116.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "47.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "35.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "48.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "29.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "8.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "201.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "30.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/24h_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/24h_warm"
+    },
+    {
+        "duration": "35.0",
+        "name": "loading.desktop/AirBnB_cold"
+    },
+    {
+        "duration": "46.0",
+        "name": "loading.desktop/AirBnB_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Aljayyash_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Aljayyash_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/AllRecipes_cold"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/AllRecipes_warm"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/ArsTechnica_cold"
+    },
+    {
+        "duration": "44.0",
+        "name": "loading.desktop/ArsTechnica_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Baidu_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Baidu_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Bhaskar_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Bhaskar_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Chosun_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Chosun_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Colorado.edu_cold"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/Colorado.edu_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Danawa_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Danawa_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Daum_cold"
+    },
+    {
+        "duration": "31.0",
+        "name": "loading.desktop/Daum_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Donga_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Donga_warm"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/Economist_cold"
+    },
+    {
+        "duration": "52.0",
+        "name": "loading.desktop/Economist_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Elmundo_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Elmundo_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/FC2Blog_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/FC2Blog_warm"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/FIFA_cold"
+    },
+    {
+        "duration": "35.0",
+        "name": "loading.desktop/FIFA_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "loading.desktop/FarsNews_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/FarsNews_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Flickr_cold"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/Flickr_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/FlipKart_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/FlipKart_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Free.fr_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Free.fr_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/HTML5Rocks_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/HTML5Rocks_warm"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/Haraj_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Haraj_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/HatenaBookmark_cold"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/HatenaBookmark_warm"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/IGN_cold"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/IGN_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/IMDB_cold"
+    },
+    {
+        "duration": "31.0",
+        "name": "loading.desktop/IMDB_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/IndiaTimes_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/IndiaTimes_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Kakaku_cold"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/Kakaku_warm"
+    },
+    {
+        "duration": "34.0",
+        "name": "loading.desktop/Kenh14_cold"
+    },
+    {
+        "duration": "45.0",
+        "name": "loading.desktop/Kenh14_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Mercadolivre_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Mercadolivre_warm"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Naver_cold"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/Naver_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Orange_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Orange_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Pantip_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Pantip_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/PremierLeague_cold"
+    },
+    {
+        "duration": "31.0",
+        "name": "loading.desktop/PremierLeague_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/QQ_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/QQ_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/REI_cold"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/REI_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Ruten_cold"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Ruten_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Sina_cold"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/Sina_warm"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Taobao_cold"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/Taobao_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/TheOnion_cold"
+    },
+    {
+        "duration": "34.0",
+        "name": "loading.desktop/TheOnion_warm"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/TheVerge_cold"
+    },
+    {
+        "duration": "38.0",
+        "name": "loading.desktop/TheVerge_warm"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/TicketMaster_cold"
+    },
+    {
+        "duration": "49.0",
+        "name": "loading.desktop/TicketMaster_warm"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Vietnamnet_cold"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/Vietnamnet_warm"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Vnexpress_cold"
+    },
+    {
+        "duration": "50.0",
+        "name": "loading.desktop/Vnexpress_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Walgreens_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Walgreens_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Yandex_cold"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Yandex_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/amazon.co.jp_cold"
+    },
+    {
+        "duration": "46.0",
+        "name": "loading.desktop/amazon.co.jp_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/ja.wikipedia_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/ja.wikipedia_warm"
+    },
+    {
+        "duration": "31.0",
+        "name": "loading.desktop/money.cnn_cold"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/money.cnn_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/ru.wikipedia_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/ru.wikipedia_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/uol.com.br_cold"
+    },
+    {
+        "duration": "34.0",
+        "name": "loading.desktop/uol.com.br_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/yahoo.co.jp_cold"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/yahoo.co.jp_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/mse.html?media=tulip0.av1.mp4"
+    },
+    {
+        "duration": "19.0",
+        "name": "media.desktop/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "137.0",
+        "name": "media.desktop/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "24.0",
+        "name": "media.desktop/video.html?src=crowd1080.mp4"
+    },
+    {
+        "duration": "26.0",
+        "name": "media.desktop/video.html?src=crowd1080.webm"
+    },
+    {
+        "duration": "23.0",
+        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
+    },
+    {
+        "duration": "138.0",
+        "name": "media.desktop/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
+    },
+    {
+        "duration": "20.0",
+        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
+    },
+    {
+        "duration": "24.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4"
+    },
+    {
+        "duration": "17.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4&seek"
+    },
+    {
+        "duration": "30.0",
+        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "30.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "17.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "31.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "31.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "30.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "17.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "31.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "24.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "18.0",
+        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "19.0",
+        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "18.0",
+        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "19.0",
+        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "19.0",
+        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "18.0",
+        "name": "memory.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "20.0",
+        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "19.0",
+        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "54.0",
+        "name": "memory.desktop/WebWorker"
+    },
+    {
+        "duration": "47.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "48.0",
+        "name": "power.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "43.0",
+        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "43.0",
+        "name": "power.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "44.0",
+        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "43.0",
+        "name": "power.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "45.0",
+        "name": "power.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "43.0",
+        "name": "power.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "57.0",
+        "name": "power.desktop/abcnews"
+    },
+    {
+        "duration": "47.0",
+        "name": "power.desktop/indiatimes"
+    },
+    {
+        "duration": "46.0",
+        "name": "power.desktop/instagram"
+    },
+    {
+        "duration": "47.0",
+        "name": "power.desktop/microsoft"
+    },
+    {
+        "duration": "48.0",
+        "name": "power.desktop/sina"
+    },
+    {
+        "duration": "47.0",
+        "name": "power.desktop/slideshare"
+    },
+    {
+        "duration": "48.0",
+        "name": "power.desktop/uol"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/accu_weather_2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.desktop/accu_weather_pinch_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/amazon_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/amazon_pinch_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/analog_clock_svg"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/animometer_webgl"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/animometer_webgl_fast_call"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/animometer_webgl_indexed"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_fast_call"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw_base_vertex_base_instance"
+    },
+    {
+        "duration": "60.0",
+        "name": "rendering.desktop/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/aquarium"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/aquarium_20k"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/aquarium_20k_fast_call"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/background_color_animation"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/balls_javascript_canvas"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/balls_javascript_css"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/balls_svg_animations"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/blob"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/blogspot_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/blogspot_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/blur_rotating_background"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/booking.com_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/booking_pinch_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/bouncing_balls_15"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/bouncing_balls_shadow"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/bouncing_gradient_circles"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/bouncing_png_images"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/bouncing_svg_images"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/camera_to_webgl"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_animation_no_clear"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_arcs"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_font_cycler"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_lines"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_to_blob"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/cc_poster_circle"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/cc_scroll_text_only"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/chip_tune"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/cnn_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/cnn_pinch_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/compositor_heavy_animation"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/crafty_mind"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/css_animations_many_keyframes"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_inline_style"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_new_element"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_style_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_transitions_updating_class"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_color"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_filter"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_length"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_length_complex"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_length_simple"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_path"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_shadow"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_transform_complex"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/css_value_type_transform_simple"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/docs_paper.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/docs_resume.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/docs_table.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/draw_image"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/dynamic_cube_map"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/earth"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/ebay_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/ebay_pinch_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/effect_games"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/espn_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/espn_pinch_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/extra_large_texture_uploads"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/facebook_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/facebook_pinch_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/fill_clear_rect.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/fill_shapes"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/filter_terrain_svg"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/get_image_data_cpu.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/get_image_data_gpu.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/gmail_2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/gmail_move_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/gmail_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/google_calendar_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/google_calendar_pinch_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/google_docs_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/google_image_pinch_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/google_image_search_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/google_plus_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/google_search_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/google_web_search_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/gpu_bound_shader.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/guimark_vector_chart"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/hakim"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/ie_chalkboard"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/ie_pirate_mark"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/jarro_doverson"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/js_full_screen_invalidation"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/js_poster_circle"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/js_scroll_text_only"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/kevs_3d"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/keyframed_animations"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/large_texture_uploads"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/linkedin_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/linkedin_pinch_2018"
+    },
+    {
+        "duration": "69.0",
+        "name": "rendering.desktop/lost_crypt"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.desktop/lost_crypt_fast_call"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/main_animations_half_presented"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/man_in_blue"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/many_images"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/many_planets_deep"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/maps_move_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/maps_perf_test"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/medium_texture_uploads"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/megi_dish"
+    },
+    {
+        "duration": "62.0",
+        "name": "rendering.desktop/microgame_fps"
+    },
+    {
+        "duration": "67.0",
+        "name": "rendering.desktop/microgame_fps_fast_call"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/microsoft_fireflies"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/microsoft_performance"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/microsoft_snow"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/microsoft_speed_reading"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/microsoft_tweet_map"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/microsoft_video_city"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/microsoft_worker_fountains"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/mix_10k"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/new_tilings"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/off_screen_main_60fps"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/particles"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/pinterest_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/put_get_image_data"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/put_image_data.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/raf"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/raf_animation"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/raf_canvas"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/raf_touch_animation"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/repaint_amazon_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_cnn_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_facebook_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_google_search_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_instagram_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_reddit_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_theverge_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_twitter_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_wikipedia_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/repaint_yahoo_homepage_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/runway_2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/san_angeles"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/second_batch_js_heavy"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/second_batch_js_light"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/second_batch_js_medium"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/sheets_render.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/simple_text_page"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/simple_touch_drag"
+    },
+    {
+        "duration": "71.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "64.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020_fast_call"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/small_texture_uploads"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/smash_cat"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/spielzeugz"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/stroke_shapes"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/sync_scroll_offset"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/techcrunch_2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/throughput_scrolling_composited"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "64.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "64.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020_fast_call"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/toBlob_duration.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/touch_handler_scrolling"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/transform_transitions"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/transform_transitions_js_block"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/twitch_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/twitch_pinch_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/twitter_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/twitter_pinch_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/video_to_sub_texture"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/video_to_texture"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/web_animation_value_type_color"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animation_value_type_path"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/web_animations_many_keyframes"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animations_set_current_time"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/web_animations_simultaneous"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/webgl_to_texture"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/wikipedia_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/wordpress_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/yahoo_answers_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/yahoo_news_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/yahoo_news_pinch_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/yahoo_sports_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/yahoo_sports_pinch_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/youtube_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/youtube_pinch_2018"
+    },
+    {
+        "duration": "51.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "50.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "91.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "90.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "88.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.common_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "83.0",
+        "name": "system_health.common_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "98.0",
+        "name": "system_health.common_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "69.0",
+        "name": "system_health.common_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.common_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "77.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "90.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "60.0",
+        "name": "system_health.common_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.common_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "76.0",
+        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.common_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.common_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "79.0",
+        "name": "system_health.common_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.common_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/load:games:lazors"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_desktop/load:media:9gag"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.common_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "140.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.common_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.common_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.memory_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "74.0",
+        "name": "system_health.memory_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "92.0",
+        "name": "system_health.memory_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.memory_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "69.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "76.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.memory_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.memory_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "67.0",
+        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "58.0",
+        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.memory_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.memory_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.memory_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:games:lazors"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_desktop/load:media:9gag"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "0.0",
+        "name": "tab_switching.typical_25/multitab:misc:typical24"
+    },
+    {
+        "duration": "16.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "14.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "16.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "16.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "22.0",
+        "name": "v8.browsing_desktop-future/browse:media:imgur"
+    },
+    {
+        "duration": "109.0",
+        "name": "v8.browsing_desktop-future/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_desktop-future/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "85.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "92.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "v8.browsing_desktop-future/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "v8.browsing_desktop-future/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "73.0",
+        "name": "v8.browsing_desktop-future/browse:news:reddit:2020"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_desktop-future/browse:search:google:2020"
+    },
+    {
+        "duration": "94.0",
+        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "83.0",
+        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "64.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter:2018"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "80.0",
+        "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "52.0",
+        "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "94.0",
+        "name": "v8.browsing_desktop-future/browse:tools:earth:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "112.0",
+        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "84.0",
+        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "88.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "94.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "v8.browsing_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "76.0",
+        "name": "v8.browsing_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "100.0",
+        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "86.0",
+        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "66.0",
+        "name": "v8.browsing_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "84.0",
+        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "55.0",
+        "name": "v8.browsing_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "95.0",
+        "name": "v8.browsing_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "v8.browsing_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "38.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "38.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "38.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "40.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "43.0",
+        "name": "webrtc/pause_play_peerconnections"
+    },
+    {
+        "duration": "210.0",
+        "name": "performance_browser_tests/_gtest_"
+    },
+    {
+        "duration": "3.0",
+        "name": "load_library_perf_tests/_gtest_"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/mac-m1_mini_2020-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/mac-m1_mini_2020-perf-pgo_timing.json
new file mode 100644
index 0000000..a2d5939
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/mac-m1_mini_2020-perf-pgo_timing.json
@@ -0,0 +1,4506 @@
+[
+    {
+        "duration": "43.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-display-none.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/post-message.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/sequence-conversion-array.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/serialize-array.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/FocusUpdate.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/LoadBootstrapBlog.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "43.0",
+        "name": "blink_perf.dom/insert-text-with-dir-auto.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.dom/replace-text-with-dir-auto.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/css-contain-change-text-different-subtree-root.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/css-contain-change-text-without-subtree-root.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/css-contain-change-text.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-repeat-append.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/line-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "73.0",
+        "name": "blink_perf.shadow_dom/imperative-shadow-dom-overhead.html"
+    },
+    {
+        "duration": "68.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead-iframe.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-slot-append.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/FlowerFromMyGarden.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/FoodLeifLodahl.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/France.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/HarveyRayner.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/HereGear.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/UnderTheSee.html"
+    },
+    {
+        "duration": "2.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "57.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "59.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "60.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.webgl/binding-bind-buffer.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl/binding-draw-arrays.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.webgl_fast_call/binding-bind-buffer.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl_fast_call/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webgl_fast_call/binding-draw-arrays.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.webgpu/binding-draw.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.webgpu_fast_call/binding-draw.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "desktop_ui/download_shelf:1file"
+    },
+    {
+        "duration": "27.0",
+        "name": "desktop_ui/download_shelf:5file"
+    },
+    {
+        "duration": "25.0",
+        "name": "desktop_ui/download_shelf:measure_memory"
+    },
+    {
+        "duration": "33.0",
+        "name": "desktop_ui/download_shelf:top10:loading"
+    },
+    {
+        "duration": "26.0",
+        "name": "desktop_ui/download_shelf_webui:1file"
+    },
+    {
+        "duration": "27.0",
+        "name": "desktop_ui/download_shelf_webui:5file"
+    },
+    {
+        "duration": "25.0",
+        "name": "desktop_ui/download_shelf_webui:measure_memory"
+    },
+    {
+        "duration": "28.0",
+        "name": "desktop_ui/download_shelf_webui:top10:loading"
+    },
+    {
+        "duration": "9.0",
+        "name": "desktop_ui/tab_search:clean_slate"
+    },
+    {
+        "duration": "24.0",
+        "name": "desktop_ui/tab_search:close_and_open:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "desktop_ui/tab_search:close_and_open:loading:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/tab_search:measure_memory:2tab_search"
+    },
+    {
+        "duration": "16.0",
+        "name": "desktop_ui/tab_search:measure_memory:3tab_search"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/tab_search:measure_memory:after"
+    },
+    {
+        "duration": "16.0",
+        "name": "desktop_ui/tab_search:measure_memory:before"
+    },
+    {
+        "duration": "20.0",
+        "name": "desktop_ui/tab_search:measure_memory:multiwindow"
+    },
+    {
+        "duration": "32.0",
+        "name": "desktop_ui/tab_search:scroll_up_and_down:2020"
+    },
+    {
+        "duration": "32.0",
+        "name": "desktop_ui/tab_search:top10:2020"
+    },
+    {
+        "duration": "19.0",
+        "name": "desktop_ui/tab_search:top10:loading:2020"
+    },
+    {
+        "duration": "62.0",
+        "name": "desktop_ui/tab_search:top50:2020"
+    },
+    {
+        "duration": "35.0",
+        "name": "desktop_ui/tab_search:top50:loading:2020"
+    },
+    {
+        "duration": "37.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "34.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "49.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "28.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "8.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "171.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "87.0",
+        "name": "jetstream2/JetStream2"
+    },
+    {
+        "duration": "20.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/24h_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/24h_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/AirBnB_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/AirBnB_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Aljayyash_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Aljayyash_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/AllRecipes_cold"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/AllRecipes_warm"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/ArsTechnica_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/ArsTechnica_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Baidu_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Baidu_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Bhaskar_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Bhaskar_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Chosun_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Chosun_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Colorado.edu_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Colorado.edu_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Danawa_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Danawa_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Daum_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Daum_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Donga_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Donga_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Economist_cold"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/Economist_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Elmundo_cold"
+    },
+    {
+        "duration": "3.0",
+        "name": "loading.desktop/Elmundo_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/FC2Blog_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/FC2Blog_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/FIFA_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/FIFA_warm"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/FarsNews_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/FarsNews_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Flickr_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Flickr_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/FlipKart_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/FlipKart_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Free.fr_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Free.fr_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/HTML5Rocks_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/HTML5Rocks_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Haraj_cold"
+    },
+    {
+        "duration": "11.0",
+        "name": "loading.desktop/Haraj_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/HatenaBookmark_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/HatenaBookmark_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/IGN_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/IGN_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/IMDB_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/IMDB_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/IndiaTimes_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/IndiaTimes_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Kakaku_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Kakaku_warm"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Kenh14_cold"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Kenh14_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Mercadolivre_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Mercadolivre_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Naver_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Naver_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Orange_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Orange_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Pantip_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Pantip_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/PremierLeague_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/PremierLeague_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/QQ_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/QQ_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/REI_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/REI_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Ruten_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/Ruten_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/Sina_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Sina_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Taobao_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/Taobao_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/TheOnion_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/TheOnion_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/TheVerge_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/TheVerge_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/TicketMaster_cold"
+    },
+    {
+        "duration": "16.0",
+        "name": "loading.desktop/TicketMaster_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/Vietnamnet_cold"
+    },
+    {
+        "duration": "18.0",
+        "name": "loading.desktop/Vietnamnet_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Vnexpress_cold"
+    },
+    {
+        "duration": "15.0",
+        "name": "loading.desktop/Vnexpress_warm"
+    },
+    {
+        "duration": "4.0",
+        "name": "loading.desktop/Walgreens_cold"
+    },
+    {
+        "duration": "4.0",
+        "name": "loading.desktop/Walgreens_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/Yandex_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/Yandex_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/amazon.co.jp_cold"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/amazon.co.jp_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/ja.wikipedia_cold"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/ja.wikipedia_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/money.cnn_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/money.cnn_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/ru.wikipedia_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "loading.desktop/ru.wikipedia_warm"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/uol.com.br_cold"
+    },
+    {
+        "duration": "17.0",
+        "name": "loading.desktop/uol.com.br_warm"
+    },
+    {
+        "duration": "13.0",
+        "name": "loading.desktop/yahoo.co.jp_cold"
+    },
+    {
+        "duration": "14.0",
+        "name": "loading.desktop/yahoo.co.jp_warm"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/mse.html?media=tulip0.av1.mp4"
+    },
+    {
+        "duration": "11.0",
+        "name": "media.desktop/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "128.0",
+        "name": "media.desktop/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=crowd1080.mp4"
+    },
+    {
+        "duration": "18.0",
+        "name": "media.desktop/video.html?src=crowd1080.webm"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
+    },
+    {
+        "duration": "130.0",
+        "name": "media.desktop/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "7.0",
+        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
+    },
+    {
+        "duration": "7.0",
+        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
+    },
+    {
+        "duration": "10.0",
+        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4"
+    },
+    {
+        "duration": "7.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4&seek"
+    },
+    {
+        "duration": "23.0",
+        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "23.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "7.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "23.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "65.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "23.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "7.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "23.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "17.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "14.0",
+        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "14.0",
+        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "14.0",
+        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "14.0",
+        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "14.0",
+        "name": "memory.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "15.0",
+        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "14.0",
+        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/WebWorker"
+    },
+    {
+        "duration": "41.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "35.0",
+        "name": "power.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "35.0",
+        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "35.0",
+        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "35.0",
+        "name": "power.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "35.0",
+        "name": "power.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "38.0",
+        "name": "power.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "35.0",
+        "name": "power.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "40.0",
+        "name": "power.desktop/abcnews"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/indiatimes"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/instagram"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/microsoft"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/sina"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/slideshare"
+    },
+    {
+        "duration": "36.0",
+        "name": "power.desktop/uol"
+    },
+    {
+        "duration": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/accu_weather_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/accu_weather_pinch_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/amazon_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/amazon_pinch_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/analog_clock_svg"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/animometer_webgl"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/animometer_webgl_fast_call"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/animometer_webgl_indexed"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_fast_call"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw_base_vertex_base_instance"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/aquarium"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/aquarium_20k"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/aquarium_20k_fast_call"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/background_color_animation"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/balls_javascript_canvas"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/balls_javascript_css"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/balls_svg_animations"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/blob"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/blogspot_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/blogspot_pinch_2018"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.desktop/blur_rotating_background"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/booking.com_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/booking_pinch_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/bouncing_balls_15"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/bouncing_balls_shadow"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/bouncing_gradient_circles"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/bouncing_png_images"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/bouncing_svg_images"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/camera_to_webgl"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/canvas_animation_no_clear"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_arcs"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_font_cycler"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_lines"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/canvas_to_blob"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/cc_poster_circle"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/cc_scroll_text_only"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/chip_tune"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/cnn_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/cnn_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/compositor_heavy_animation"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/crafty_mind"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_animations_many_keyframes"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_transitions_inline_style"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_transitions_new_element"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_transitions_style_element"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_transitions_updating_class"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_value_type_color"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_value_type_filter"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_value_type_length"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_value_type_length_complex"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/css_value_type_length_simple"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_value_type_path"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_value_type_shadow"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_value_type_transform_complex"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/css_value_type_transform_simple"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/docs_paper.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/docs_resume.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/docs_table.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/draw_image"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/dynamic_cube_map"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/earth"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/ebay_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/ebay_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/effect_games"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/espn_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/espn_pinch_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/extra_large_texture_uploads"
+    },
+    {
+        "duration": "10.0",
+        "name": "rendering.desktop/facebook_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/facebook_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/fill_clear_rect.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/fill_shapes"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/filter_terrain_svg"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/get_image_data_cpu.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/get_image_data_gpu.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/gmail_2018"
+    },
+    {
+        "duration": "72.0",
+        "name": "rendering.desktop/gmail_move_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/gmail_pinch_2018"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.desktop/google_calendar_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_calendar_pinch_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/google_docs_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_image_pinch_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/google_image_search_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_plus_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/google_search_pinch_2018"
+    },
+    {
+        "duration": "10.0",
+        "name": "rendering.desktop/google_web_search_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/gpu_bound_shader.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/guimark_vector_chart"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/hakim"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/ie_chalkboard"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/ie_pirate_mark"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/jarro_doverson"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/js_full_screen_invalidation"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/js_poster_circle"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/js_scroll_text_only"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/kevs_3d"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/keyframed_animations"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/large_texture_uploads"
+    },
+    {
+        "duration": "10.0",
+        "name": "rendering.desktop/linkedin_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/linkedin_pinch_2018"
+    },
+    {
+        "duration": "53.0",
+        "name": "rendering.desktop/lost_crypt"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/lost_crypt_fast_call"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/main_animations_half_presented"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/man_in_blue"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/many_images"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/many_planets_deep"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/maps_move_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/maps_perf_test"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/medium_texture_uploads"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/megi_dish"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/microgame_fps"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/microgame_fps_fast_call"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_fireflies"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/microsoft_performance"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_snow"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_speed_reading"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_tweet_map"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_video_city"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/microsoft_worker_fountains"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/mix_10k"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/motionmark_ramp_canvas_arcs"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/motionmark_ramp_canvas_lines"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/motionmark_ramp_design"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/motionmark_ramp_images"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/motionmark_ramp_leaves"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/motionmark_ramp_multiply"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/motionmark_ramp_paths"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/motionmark_ramp_suits"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/new_tilings"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/off_screen_main_60fps"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/particles"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/pinterest_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/put_get_image_data"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/put_image_data.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/raf"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/raf_animation"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/raf_canvas"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/raf_touch_animation"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/repaint_amazon_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_cnn_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_facebook_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_google_search_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_instagram_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_reddit_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_theverge_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_twitter_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_wikipedia_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/repaint_yahoo_homepage_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/runway_2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/san_angeles"
+    },
+    {
+        "duration": "8.0",
+        "name": "rendering.desktop/second_batch_js_heavy"
+    },
+    {
+        "duration": "8.0",
+        "name": "rendering.desktop/second_batch_js_light"
+    },
+    {
+        "duration": "8.0",
+        "name": "rendering.desktop/second_batch_js_medium"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/sheets_render.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/simple_text_page"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/simple_touch_drag"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020_fast_call"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/small_texture_uploads"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/smash_cat"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/spielzeugz"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/stroke_shapes"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/sync_scroll_offset"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/techcrunch_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_composited"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "53.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020_fast_call"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/toBlob_duration.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/touch_handler_scrolling"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/transform_transitions"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/transform_transitions_js_block"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/twitch_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.desktop/twitch_pinch_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/twitter_2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/twitter_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/video_to_sub_texture"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/video_to_texture"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/web_animation_value_type_color"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animation_value_type_path"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_many_keyframes"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_set_current_time"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_simultaneous"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/webgl_to_texture"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "11.0",
+        "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/wikipedia_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/wordpress_2018"
+    },
+    {
+        "duration": "9.0",
+        "name": "rendering.desktop/yahoo_answers_2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "rendering.desktop/yahoo_news_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/yahoo_news_pinch_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.desktop/yahoo_sports_2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "rendering.desktop/yahoo_sports_pinch_2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/youtube_2018"
+    },
+    {
+        "duration": "4.0",
+        "name": "rendering.desktop/youtube_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "22.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "44.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "43.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "44.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "68.0",
+        "name": "system_health.common_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "88.0",
+        "name": "system_health.common_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "71.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.common_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.common_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.common_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.common_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:games:lazors"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:media:9gag"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.common_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.common_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.common_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.memory_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "87.0",
+        "name": "system_health.memory_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.memory_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.memory_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.memory_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "62.0",
+        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.memory_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "1.0",
+        "name": "system_health.memory_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:games:lazors"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:9gag"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.memory_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "0.0",
+        "name": "system_health.pcscan/browse:news:cnn:2021"
+    },
+    {
+        "duration": "0.0",
+        "name": "tab_switching.typical_25/multitab:misc:typical24"
+    },
+    {
+        "duration": "8.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "9.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
+    },
+    {
+        "duration": "7.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
+    },
+    {
+        "duration": "32.0",
+        "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:media:imgur"
+    },
+    {
+        "duration": "90.0",
+        "name": "v8.browsing_desktop-future/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "59.0",
+        "name": "v8.browsing_desktop-future/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "73.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.browsing_desktop-future/browse:news:cnn:2021"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.browsing_desktop-future/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:news:reddit:2020"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.browsing_desktop-future/browse:search:google:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "v8.browsing_desktop-future/browse:search:google_india:2021"
+    },
+    {
+        "duration": "70.0",
+        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:earth:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "91.0",
+        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.browsing_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.browsing_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "52.0",
+        "name": "v8.browsing_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "v8.browsing_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "70.0",
+        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "51.0",
+        "name": "v8.browsing_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "65.0",
+        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.browsing_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.browsing_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "5.0",
+        "name": "v8.browsing_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "0.0",
+        "name": "wasmpspdfkit/https://pspdfkit.com/webassembly-benchmark/"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "27.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "27.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "27.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "16.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "16.0",
+        "name": "webrtc/insertable_streams_audio_processing"
+    },
+    {
+        "duration": "67.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_noop_video"
+    },
+    {
+        "duration": "60.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "63.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "17.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "67.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "27.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "9.0",
+        "name": "webrtc/negotiate-timing"
+    },
+    {
+        "duration": "29.0",
+        "name": "webrtc/pause_play_peerconnections"
+    },
+    {
+        "duration": "300.0",
+        "name": "base_perftests/_gtest_"
+    },
+    {
+        "duration": "190.0",
+        "name": "performance_browser_tests/_gtest_"
+    },
+    {
+        "duration": "330.0",
+        "name": "dawn_perf_tests/_gtest_"
+    },
+    {
+        "duration": "7.0",
+        "name": "views_perftests/_gtest_"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/win-10-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/win-10-perf-pgo_timing.json
new file mode 100644
index 0000000..6310f8c
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/win-10-perf-pgo_timing.json
@@ -0,0 +1,4350 @@
+[
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/post-message.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/sequence-conversion-array.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/serialize-array.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "11.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": "10.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout-repeat-append.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.parser/simple-url.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/textarea-parsing.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/tiny-innerHTML.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
+    },
+    {
+        "duration": "5.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": "5.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "4.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": "5.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "4.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": "6.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "6.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": "11.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "5.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": "5.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": "6.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/UnderTheSee.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "65.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "66.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "65.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgl/binding-draw-arrays.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgl_fast_call/binding-draw-arrays.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgpu/binding-draw.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.webgpu_fast_call/binding-draw.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "desktop_ui/tab_search:clean_slate"
+    },
+    {
+        "duration": "65.0",
+        "name": "desktop_ui/tab_search:close_and_open:2020"
+    },
+    {
+        "duration": "68.0",
+        "name": "desktop_ui/tab_search:close_and_open:loading:2020"
+    },
+    {
+        "duration": "21.0",
+        "name": "desktop_ui/tab_search:measure_memory:2tab_search"
+    },
+    {
+        "duration": "21.0",
+        "name": "desktop_ui/tab_search:measure_memory:3tab_search"
+    },
+    {
+        "duration": "21.0",
+        "name": "desktop_ui/tab_search:measure_memory:after"
+    },
+    {
+        "duration": "22.0",
+        "name": "desktop_ui/tab_search:measure_memory:before"
+    },
+    {
+        "duration": "24.0",
+        "name": "desktop_ui/tab_search:measure_memory:multiwindow"
+    },
+    {
+        "duration": "304.0",
+        "name": "desktop_ui/tab_search:scroll_up_and_down:2020"
+    },
+    {
+        "duration": "92.0",
+        "name": "desktop_ui/tab_search:top10:2020"
+    },
+    {
+        "duration": "68.0",
+        "name": "desktop_ui/tab_search:top10:loading:2020"
+    },
+    {
+        "duration": "201.0",
+        "name": "desktop_ui/tab_search:top50:2020"
+    },
+    {
+        "duration": "190.0",
+        "name": "desktop_ui/tab_search:top50:loading:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "34.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "49.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "29.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "11.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "169.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "134.0",
+        "name": "jetstream2/JetStream2"
+    },
+    {
+        "duration": "21.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/24h_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/24h_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/AirBnB_cold"
+    },
+    {
+        "duration": "36.0",
+        "name": "loading.desktop/AirBnB_warm"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/Aljayyash_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Aljayyash_warm"
+    },
+    {
+        "duration": "8.0",
+        "name": "loading.desktop/AllRecipes_cold"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/AllRecipes_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/ArsTechnica_cold"
+    },
+    {
+        "duration": "34.0",
+        "name": "loading.desktop/ArsTechnica_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Baidu_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Baidu_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Bhaskar_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Bhaskar_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Chosun_cold"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Chosun_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Colorado.edu_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Colorado.edu_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Danawa_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Danawa_warm"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/Daum_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Daum_warm"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/Donga_cold"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Donga_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Economist_cold"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/Economist_warm"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Elmundo_cold"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.desktop/Elmundo_warm"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/FC2Blog_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/FC2Blog_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/FIFA_cold"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/FIFA_warm"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/FarsNews_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/FarsNews_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Flickr_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Flickr_warm"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/FlipKart_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/FlipKart_warm"
+    },
+    {
+        "duration": "19.0",
+        "name": "loading.desktop/Free.fr_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/Free.fr_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/HTML5Rocks_cold"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/HTML5Rocks_warm"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/Haraj_cold"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/Haraj_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/HatenaBookmark_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/HatenaBookmark_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/IGN_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/IGN_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/IMDB_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/IMDB_warm"
+    },
+    {
+        "duration": "21.0",
+        "name": "loading.desktop/IndiaTimes_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/IndiaTimes_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Kakaku_cold"
+    },
+    {
+        "duration": "38.0",
+        "name": "loading.desktop/Kakaku_warm"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/Kenh14_cold"
+    },
+    {
+        "duration": "36.0",
+        "name": "loading.desktop/Kenh14_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/Mercadolivre_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Mercadolivre_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Naver_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Naver_warm"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.desktop/Orange_cold"
+    },
+    {
+        "duration": "7.0",
+        "name": "loading.desktop/Orange_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/Pantip_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Pantip_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/PremierLeague_cold"
+    },
+    {
+        "duration": "28.0",
+        "name": "loading.desktop/PremierLeague_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/QQ_cold"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/QQ_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/REI_cold"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/REI_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Ruten_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/Ruten_warm"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/Sina_cold"
+    },
+    {
+        "duration": "35.0",
+        "name": "loading.desktop/Sina_warm"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/Taobao_cold"
+    },
+    {
+        "duration": "36.0",
+        "name": "loading.desktop/Taobao_warm"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/TheOnion_cold"
+    },
+    {
+        "duration": "8.0",
+        "name": "loading.desktop/TheOnion_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/TheVerge_cold"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/TheVerge_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/TicketMaster_cold"
+    },
+    {
+        "duration": "31.0",
+        "name": "loading.desktop/TicketMaster_warm"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/Vietnamnet_cold"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/Vietnamnet_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/Vnexpress_cold"
+    },
+    {
+        "duration": "31.0",
+        "name": "loading.desktop/Vnexpress_warm"
+    },
+    {
+        "duration": "8.0",
+        "name": "loading.desktop/Walgreens_cold"
+    },
+    {
+        "duration": "8.0",
+        "name": "loading.desktop/Walgreens_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/Yandex_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/Yandex_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/amazon.co.jp_cold"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/amazon.co.jp_warm"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/ja.wikipedia_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/ja.wikipedia_warm"
+    },
+    {
+        "duration": "27.0",
+        "name": "loading.desktop/money.cnn_cold"
+    },
+    {
+        "duration": "44.0",
+        "name": "loading.desktop/money.cnn_warm"
+    },
+    {
+        "duration": "22.0",
+        "name": "loading.desktop/ru.wikipedia_cold"
+    },
+    {
+        "duration": "23.0",
+        "name": "loading.desktop/ru.wikipedia_warm"
+    },
+    {
+        "duration": "26.0",
+        "name": "loading.desktop/uol.com.br_cold"
+    },
+    {
+        "duration": "33.0",
+        "name": "loading.desktop/uol.com.br_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "loading.desktop/yahoo.co.jp_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/yahoo.co.jp_warm"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "15.0",
+        "name": "media.desktop/mse.html?media=tulip0.av1.mp4"
+    },
+    {
+        "duration": "17.0",
+        "name": "media.desktop/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "132.0",
+        "name": "media.desktop/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "21.0",
+        "name": "media.desktop/video.html?src=crowd1080.mp4"
+    },
+    {
+        "duration": "22.0",
+        "name": "media.desktop/video.html?src=crowd1080.webm"
+    },
+    {
+        "duration": "20.0",
+        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
+    },
+    {
+        "duration": "132.0",
+        "name": "media.desktop/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
+    },
+    {
+        "duration": "21.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4"
+    },
+    {
+        "duration": "14.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4&seek"
+    },
+    {
+        "duration": "28.0",
+        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "28.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "15.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "28.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "28.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "28.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "14.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "28.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "21.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "28.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "32.0",
+        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "31.0",
+        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "48.0",
+        "name": "memory.desktop/WebWorker"
+    },
+    {
+        "duration": "37.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "40.0",
+        "name": "power.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "42.0",
+        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "41.0",
+        "name": "power.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "5.0",
+        "name": "power.desktop/abcnews"
+    },
+    {
+        "duration": "40.0",
+        "name": "power.desktop/indiatimes"
+    },
+    {
+        "duration": "40.0",
+        "name": "power.desktop/instagram"
+    },
+    {
+        "duration": "40.0",
+        "name": "power.desktop/microsoft"
+    },
+    {
+        "duration": "45.0",
+        "name": "power.desktop/sina"
+    },
+    {
+        "duration": "44.0",
+        "name": "power.desktop/slideshare"
+    },
+    {
+        "duration": "40.0",
+        "name": "power.desktop/uol"
+    },
+    {
+        "duration": "22.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "10.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": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "0.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/accu_weather_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/accu_weather_pinch_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/amazon_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/amazon_pinch_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/analog_clock_svg"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/animometer_webgl"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/animometer_webgl_fast_call"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/animometer_webgl_indexed"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_fast_call"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw_base_vertex_base_instance"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "44.0",
+        "name": "rendering.desktop/aquarium"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/aquarium_20k"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.desktop/aquarium_20k_fast_call"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/background_color_animation"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/balls_javascript_canvas"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/balls_javascript_css"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/balls_svg_animations"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/blob"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/blogspot_2018"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.desktop/blogspot_pinch_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/blur_rotating_background"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/booking.com_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/booking_pinch_2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/bouncing_balls_15"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/bouncing_balls_shadow"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/bouncing_gradient_circles"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/bouncing_png_images"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/bouncing_svg_images"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/camera_to_webgl"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/canvas_animation_no_clear"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/canvas_arcs"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/canvas_font_cycler"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/canvas_lines"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/canvas_to_blob"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/cc_poster_circle"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/cc_scroll_text_only"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/chip_tune"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/cnn_2018"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/cnn_pinch_2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/compositor_heavy_animation"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/crafty_mind"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/css_animations_many_keyframes"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_transitions_inline_style"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/css_transitions_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_transitions_updating_class"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_color"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_filter"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_length"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_length_complex"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_length_simple"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/css_value_type_path"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_shadow"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_transform_complex"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/css_value_type_transform_simple"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/docs_paper.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/docs_resume.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/docs_table.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/draw_image"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/dynamic_cube_map"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/earth"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/ebay_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/ebay_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/effect_games"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/espn_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/espn_pinch_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/extra_large_texture_uploads"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/facebook_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/facebook_pinch_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/fill_clear_rect.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/fill_shapes"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/filter_terrain_svg"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/get_image_data_cpu.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/get_image_data_gpu.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/gmail_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/gmail_move_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/gmail_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/google_calendar_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/google_calendar_pinch_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/google_docs_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/google_image_pinch_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/google_image_search_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/google_plus_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/google_search_pinch_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/google_web_search_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/gpu_bound_shader.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/guimark_vector_chart"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/hakim"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.desktop/ie_chalkboard"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/ie_pirate_mark"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/jarro_doverson"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/js_full_screen_invalidation"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/js_poster_circle"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/js_scroll_text_only"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/kevs_3d"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/keyframed_animations"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/large_texture_uploads"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/linkedin_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/linkedin_pinch_2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.desktop/lost_crypt"
+    },
+    {
+        "duration": "53.0",
+        "name": "rendering.desktop/lost_crypt_fast_call"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/main_animations_half_presented"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/man_in_blue"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/many_images"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/many_planets_deep"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/maps_move_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/maps_perf_test"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/medium_texture_uploads"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/megi_dish"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/microgame_fps"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/microgame_fps_fast_call"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/microsoft_fireflies"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/microsoft_performance"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/microsoft_snow"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/microsoft_speed_reading"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/microsoft_tweet_map"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/microsoft_video_city"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/microsoft_worker_fountains"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/mix_10k"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/new_tilings"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/off_screen_main_60fps"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/particles"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/pinterest_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/put_get_image_data"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/put_image_data.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/raf"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/raf_animation"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/raf_canvas"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/raf_touch_animation"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/repaint_amazon_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/repaint_cnn_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/repaint_facebook_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/repaint_google_search_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/repaint_instagram_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/repaint_reddit_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/repaint_theverge_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/repaint_twitter_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/repaint_wikipedia_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.desktop/repaint_yahoo_homepage_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/runway_2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/san_angeles"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/second_batch_js_heavy"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/second_batch_js_light"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/second_batch_js_medium"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/sheets_render.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/simple_text_page"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/simple_touch_drag"
+    },
+    {
+        "duration": "75.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020_fast_call"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/small_texture_uploads"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/smash_cat"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/spielzeugz"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/stroke_shapes"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/sync_scroll_offset"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/techcrunch_2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.desktop/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.desktop/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "44.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/throughput_scrolling_composited"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020_fast_call"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/toBlob_duration.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/touch_handler_scrolling"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/transform_transitions"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/transform_transitions_js_block"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.desktop/twitch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/twitch_pinch_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/twitter_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/twitter_pinch_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/video_to_sub_texture"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/video_to_texture"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_color"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_path"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/web_animations_many_keyframes"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animations_set_current_time"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animations_simultaneous"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/webgl_to_texture"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.desktop/wikipedia_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/wordpress_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.desktop/yahoo_answers_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.desktop/yahoo_news_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.desktop/yahoo_news_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/yahoo_sports_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/yahoo_sports_pinch_2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/youtube_2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.desktop/youtube_pinch_2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "33.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "60.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "67.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "58.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.common_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "74.0",
+        "name": "system_health.common_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "90.0",
+        "name": "system_health.common_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "system_health.common_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.common_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.common_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.common_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.common_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "38.0",
+        "name": "system_health.common_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "75.0",
+        "name": "system_health.common_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.common_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:games:lazors"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.common_desktop/load:media:9gag"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "133.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "7.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.common_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.memory_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.memory_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "84.0",
+        "name": "system_health.memory_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.memory_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "60.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.memory_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "58.0",
+        "name": "system_health.memory_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "67.0",
+        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.memory_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.memory_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.memory_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "system_health.memory_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:games:lazors"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:media:9gag"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "system_health.memory_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "127.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "3.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "0.0",
+        "name": "tab_switching.typical_25/multitab:misc:typical24"
+    },
+    {
+        "duration": "16.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "14.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "13.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "14.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "13.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "14.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama"
+    },
+    {
+        "duration": "16.0",
+        "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "13.0",
+        "name": "v8.browsing_desktop-future/browse:media:imgur"
+    },
+    {
+        "duration": "97.0",
+        "name": "v8.browsing_desktop-future/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "66.0",
+        "name": "v8.browsing_desktop-future/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "73.0",
+        "name": "v8.browsing_desktop-future/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "63.0",
+        "name": "v8.browsing_desktop-future/browse:news:reddit:2020"
+    },
+    {
+        "duration": "61.0",
+        "name": "v8.browsing_desktop-future/browse:search:google:2020"
+    },
+    {
+        "duration": "96.0",
+        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "70.0",
+        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "56.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter:2018"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "v8.browsing_desktop-future/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "97.0",
+        "name": "v8.browsing_desktop-future/browse:tools:earth:2020"
+    },
+    {
+        "duration": "13.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "80.0",
+        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "v8.browsing_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "16.0",
+        "name": "v8.browsing_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "100.0",
+        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "69.0",
+        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "v8.browsing_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "84.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "62.0",
+        "name": "v8.browsing_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "v8.browsing_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "16.0",
+        "name": "v8.browsing_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "64.0",
+        "name": "v8.browsing_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "98.0",
+        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "74.0",
+        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.browsing_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "72.0",
+        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "70.0",
+        "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "v8.browsing_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.browsing_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "87.0",
+        "name": "v8.browsing_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "17.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "82.0",
+        "name": "v8.browsing_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "16.0",
+        "name": "v8.browsing_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "35.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "35.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "35.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "24.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_noop_video"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "25.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "36.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/negotiate-timing"
+    },
+    {
+        "duration": "11.0",
+        "name": "webrtc/pause_play_peerconnections"
+    },
+    {
+        "duration": "7.0",
+        "name": "views_perftests/_gtest_"
+    },
+    {
+        "duration": "600.0",
+        "name": "dawn_perf_tests/_gtest_"
+    },
+    {
+        "duration": "125.0",
+        "name": "components_perftests/_gtest_"
+    },
+    {
+        "duration": "200.0",
+        "name": "base_perftests/_gtest_"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/win-10_amd_laptop-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/win-10_amd_laptop-perf-pgo_timing.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/win-10_amd_laptop-perf-pgo_timing.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf-pgo_timing.json b/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf-pgo_timing.json
new file mode 100644
index 0000000..afc51a3d
--- /dev/null
+++ b/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf-pgo_timing.json
@@ -0,0 +1,5330 @@
+[
+    {
+        "duration": "48.0",
+        "name": "blink_perf.accessibility/build-table.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.accessibility/focus-links.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "blink_perf.accessibility/insert-block-child-after-many-inline-children.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.accessibility/line-breaks.html"
+    },
+    {
+        "duration": "72.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-content-visibility-auto.html"
+    },
+    {
+        "duration": "63.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-content-visibility-hidden.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-display-none-in-focusable.html"
+    },
+    {
+        "duration": "45.0",
+        "name": "blink_perf.accessibility/many-nodes-toggle-display-none.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/slot-updates.html"
+    },
+    {
+        "duration": "27.0",
+        "name": "blink_perf.accessibility/text-changes-ignored-in-focusable.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.accessibility/text-changes-unignored-in-focusable.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.accessibility/textarea-append.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "blink_perf.accessibility/unassignable-slots-deep-tree.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "blink_perf.accessibility/unassignable-slots-focusable-containers.html"
+    },
+    {
+        "duration": "62.0",
+        "name": "blink_perf.accessibility/unassignable-slots-wide-tree.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.bindings/append-child.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/create-element.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/document-implementation.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/dom-attribute-on-prototoype.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/first-child.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/gc-forest.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.bindings/gc-mini-tree.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "blink_perf.bindings/gc-tree.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-attribute-rare.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-attribute.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-element-by-id.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/get-elements-by-tag-name.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/id-getter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/id-setter.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/indexed-getter.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/insert-before.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/named-property-enumerator.html"
+    },
+    {
+        "duration": "45.0",
+        "name": "blink_perf.bindings/node-list-access.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/node-type.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/post-message.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.bindings/sequence-conversion-array.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.bindings/serialize-array.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/serialize-long-string.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/serialize-map.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/serialize-nested-array.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/set-attribute-rare.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/set-attribute.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/structured-clone-json-deserialize.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/structured-clone-json-serialize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.bindings/structured-clone-long-string-serialize.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-array.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-same-type.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-construct-from-typed.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/typed-array-set-from-typed.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/undefined-first-child.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.bindings/undefined-get-element-by-id.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.bindings/undefined-id-getter.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html"
+    },
+    {
+        "duration": "28.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/worker-transferable-from-worker.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/worker-transferable-roundtrip.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.bindings/worker-transferable-to-worker.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.css/AttributeDescendantSelector.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CSSLogicalDirection.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/CSSPropertySetterGetter.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/CSSPropertySetterGetterMethods.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/CSSPropertyUpdateValue.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.css/ChangeStyleCSSVariableRecalc.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleChildClassSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleChildElementSelectors.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleElementSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/ChangeStyleShallowTree.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleSingleClassSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleUniversalSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.css/ClassDescendantSelector.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.css/ClassInvalidation.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesCascade.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/CustomPropertiesDependency.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesRootInheritance.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/CustomPropertiesVarAlias.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.css/ExplicitInheritance.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.css/FocusUpdate.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.css/HasDescendantInAncestorPositionInvalidation.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.css/HasDescendantInvalidation.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/HasDescendantInvalidationAllSubjects.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.css/HasDescendantInvalidationMultipleSubjects.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/HasInvalidationFiltering.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.css/HasSiblingDescendantInvalidation.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/HasSiblingDescendantInvalidationAllSubjects.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.css/HasSiblingInvalidation.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.css/HasSiblingInvalidationAllSubjects.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.css/HighlightInheritanceRecalc.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/LoadBootstrapBlog.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.css/LoadMaterializeStarterPage.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.css/LoadSemanticPageExample.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.css/PseudoClassSelectors.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.css/SelectorCountScaling.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.dom/custom-element-default-style-with-shadow.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.dom/custom-element-default-style.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.dom/insert-text-with-dir-auto.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.dom/long-sibling-list.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/modify-element-classname.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.dom/modify-element-id.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.dom/modify-element-title.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.dom/replace-text-with-dir-auto.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.dom/select-multiple-add.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.dom/select-single-add.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.dom/select-single-remove.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.events/EventsDispatching.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html"
+    },
+    {
+        "duration": "64.0",
+        "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "blink_perf.events/hit-test-lots-of-layers.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.events/is-input-pending-default-events.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.events/is-input-pending-include-continuous-events.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "blink_perf.image_decoder/decode-gif.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v1.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h1v2.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v1.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "blink_perf.image_decoder/decode-lossless-webp.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.image_decoder/decode-lossy-webp.html"
+    },
+    {
+        "duration": "32.0",
+        "name": "blink_perf.image_decoder/decode-png-palette-opaque.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.image_decoder/decode-png-palette.html"
+    },
+    {
+        "duration": "35.0",
+        "name": "blink_perf.image_decoder/decode-png.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "blink_perf.layout/ArabicLineLayout.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/Shapes/MultipleShapes.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/SimpleTextPathLineLayout.html"
+    },
+    {
+        "duration": "36.0",
+        "name": "blink_perf.layout/abspos.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/add-remove-inline-floats.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/animate-abspos-deep.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/attach-inlines-2.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/attach-inlines.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-data.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/chapter-reflow-once-random.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/chapter-reflow-once.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/chapter-reflow-thrice.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/chapter-reflow-twice.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.layout/chapter-reflow.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/character_fallback.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/contain-content-style-change.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/css-contain-change-text-different-subtree-root.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.layout/css-contain-change-text-without-subtree-root.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.layout/css-contain-change-text.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/culled-inline-bounding-rects.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/culled-inline-hittest.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/deeply-nested-grid.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/editing_append.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/editing_append_single_line.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/editing_delete.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/editing_insert.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/editing_prepend.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-blocks.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/fit-content-change-available-size-text.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-data.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/flexbox-column-nowrap.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/flexbox-column-wrap.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/flexbox-hittest.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/flexbox-input.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/flexbox-lots-of-data.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/flexbox-nested-rows-and-columns-auto-overflow.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/flexbox-row-nowrap.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-definite.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/flexbox-row-stretch-height-indefinite.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/flexbox-row-wrap.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/flexbox-with-stretch-layout.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.layout/flexbox_with_list_item.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.layout/floats_100_100.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/floats_100_100_nested.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.layout/floats_10_1000.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.layout/floats_20_100.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/floats_20_100_nested.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/floats_2_100.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/floats_2_100_nested.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/floats_50_100.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.layout/floats_50_100_nested.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/floats_show_hide.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/grid-nested-baseline.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.layout/grid-with-block-constraints-dependence.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.layout/hindi-line-layout.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/hittest-block-children.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/hittest-nested-inline-blocks-listbased.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "13.0",
+        "name": "blink_perf.layout/large-grid.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/large-spanning-grid-item.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.layout/latin-ebook-resize.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/latin-ebook.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/layers_overlap_2d.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/layers_overlap_3d.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.layout/line-layout-fit-content-break-word.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/line-layout-fit-content.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.layout/line-layout-line-height.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.layout/line-layout-repeat-append-select.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout-repeat-append.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/line-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/long-line-nowrap-collapse.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/long-line-nowrap.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/many-block-children-auto-inline-size.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/many-block-children-fixed-inline-size.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/many-block-children-rebuild-box-tree.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/balance-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/deeply-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-balanced.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-autofill.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/multicol/lots-of-text-balanced.html"
+    },
+    {
+        "duration": "43.0",
+        "name": "blink_perf.layout/multicol/nested-forced-breaks.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html"
+    },
+    {
+        "duration": "9.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": "10.0",
+        "name": "blink_perf.layout/nested-grid-lots-of-tracks.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/nested-grid.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.layout/nested-percent-height-tables.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/nested-tables-with-overflow-auto.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.layout/ruby.html"
+    },
+    {
+        "duration": "102.0",
+        "name": "blink_perf.layout/subtree-detaching.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "blink_perf.layout/subtree-layout-scrollable-area.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-break-break-all.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-break-break-word.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.layout/word-wrap-break-word.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.owp_storage/blob-perf-files.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.owp_storage/blob-perf-ipc.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.owp_storage/blob-perf-shm.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.owp_storage/blob-perf-tiny.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.owp_storage/idb-load-docs.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.paint/appending-text.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "blink_perf.paint/color-changes.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.paint/complex-content-slow-scroll.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.paint/complex-iframe-filtered.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "blink_perf.paint/contain-update-layer-tree.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "blink_perf.paint/containment-resize.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "blink_perf.paint/custom-highlights-baseline.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "blink_perf.paint/custom-highlights.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "blink_perf.paint/fixed-and-many-layers-scroll.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.paint/large-table-background-change.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "blink_perf.paint/large-table-collapsed-border-change.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "blink_perf.paint/modify-selection.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.paint/move-text-with-mask.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "blink_perf.paint/paint-offset-changes.html"
+    },
+    {
+        "duration": "30.0",
+        "name": "blink_perf.paint/transform-changes.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.parser/css-parser-yui.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "blink_perf.parser/declarative-shadow-dom-cloning.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/declarative-shadow-dom.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/html-parser-threaded.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/html-parser.html"
+    },
+    {
+        "duration": "55.0",
+        "name": "blink_perf.parser/html5-full-render.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "blink_perf.parser/iframe-append-remove.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/innerHTML-setter-siblings.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/innerHTML-setter.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-attribute-complex.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-attribute.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-class-deep.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-class-first.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-class-last.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.parser/query-selector-all-class.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-deep.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-first.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-id-deep.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-id-first.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-all-id-last.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-all-last.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-deep.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-first.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-id-deep.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/query-selector-id-last.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.parser/query-selector-last.html"
+    },
+    {
+        "duration": "10.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": "19.0",
+        "name": "blink_perf.parser/url-parser.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.parser/xml-parser.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.shadow_dom/declarative-api.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-appendchild.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assign.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-elements.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-assigned-slot.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary-large.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-custom-detail-summary.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary-large.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-detail-summary.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api-insertbefore.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/imperative-api.html"
+    },
+    {
+        "duration": "326.0",
+        "name": "blink_perf.shadow_dom/imperative-shadow-dom-overhead.html"
+    },
+    {
+        "duration": "285.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead-iframe.html"
+    },
+    {
+        "duration": "104.0",
+        "name": "blink_perf.shadow_dom/shadow-dom-overhead.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/shadow-style-share.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/style-sheet-insert.html"
+    },
+    {
+        "duration": "39.0",
+        "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-host-child-append.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.shadow_dom/v1-large-deep-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-append-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-large-shallow-prepend-layout.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-slot-append.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.shadow_dom/v1-small-deep-layout.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.svg/AzLizardBenjiPark.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/Bamboo.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Cactus.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/Cowboy.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/Cowboy_transform.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/CrawFishGanson.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Debian.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/DropsOnABlade.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/FlowerFromMyGarden.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/FoodLeifLodahl.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/France.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/GearFlowers.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/HarveyRayner.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/HereGear.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "blink_perf.svg/MtSaintHelens.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/Samurai.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "blink_perf.svg/SierpinskiCarpet.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/SvgCubics.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/SvgHitTesting.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.svg/SvgNestedUse.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.svg/UnderTheSee.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.svg/WorldIso.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.svg/Worldcup.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "blink_perf.webaudio/audio-buffer-source-node.html"
+    },
+    {
+        "duration": "135.0",
+        "name": "blink_perf.webaudio/audio-worklet-node.html"
+    },
+    {
+        "duration": "134.0",
+        "name": "blink_perf.webaudio/biquad-filter-node.html"
+    },
+    {
+        "duration": "106.0",
+        "name": "blink_perf.webaudio/dynamics-compressor-node-knee.html"
+    },
+    {
+        "duration": "105.0",
+        "name": "blink_perf.webaudio/dynamics-compressor-node-post-knee.html"
+    },
+    {
+        "duration": "103.0",
+        "name": "blink_perf.webaudio/dynamics-compressor-node-pre-knee.html"
+    },
+    {
+        "duration": "129.0",
+        "name": "blink_perf.webaudio/gain-node.html"
+    },
+    {
+        "duration": "44.0",
+        "name": "blink_perf.webaudio/panner-node.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "blink_perf.webaudio/timeline-insert-event.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "blink_perf.webcodecs/hardware-video-encoding.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "blink_perf.webcodecs/software-video-encoding.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webcodecs/videoFrame-createImageBitmap-canvas.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webcodecs/videoFrame-createImageBitmap-imageDecoder.html"
+    },
+    {
+        "duration": "3.0",
+        "name": "blink_perf.webcodecs/videoFrame-createImageBitmap-videoDecoder.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webcodecs/videoFrame-drawImage-imageDecoder.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webcodecs/videoFrame-drawImage.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webcodecs/videoFrame-texImage2d.html"
+    },
+    {
+        "duration": "12.0",
+        "name": "blink_perf.webgl/binding-bind-buffer.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webgl/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.webgl/binding-draw-arrays.html"
+    },
+    {
+        "duration": "6.0",
+        "name": "blink_perf.webgl/binding-typed-array-uniforms.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "blink_perf.webgl_fast_call/binding-bind-buffer.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webgl_fast_call/binding-buffer-sub-data.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "blink_perf.webgl_fast_call/binding-draw-arrays.html"
+    },
+    {
+        "duration": "5.0",
+        "name": "blink_perf.webgl_fast_call/binding-typed-array-uniforms.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.webgpu/binding-draw.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "blink_perf.webgpu_fast_call/binding-draw.html"
+    },
+    {
+        "duration": "42.0",
+        "name": "desktop_ui/download_shelf:1file"
+    },
+    {
+        "duration": "45.0",
+        "name": "desktop_ui/download_shelf:5file"
+    },
+    {
+        "duration": "36.0",
+        "name": "desktop_ui/download_shelf:measure_memory"
+    },
+    {
+        "duration": "67.0",
+        "name": "desktop_ui/download_shelf:top10:loading"
+    },
+    {
+        "duration": "37.0",
+        "name": "desktop_ui/download_shelf_webui:1file"
+    },
+    {
+        "duration": "58.0",
+        "name": "desktop_ui/download_shelf_webui:5file"
+    },
+    {
+        "duration": "36.0",
+        "name": "desktop_ui/download_shelf_webui:measure_memory"
+    },
+    {
+        "duration": "59.0",
+        "name": "desktop_ui/download_shelf_webui:top10:loading"
+    },
+    {
+        "duration": "30.0",
+        "name": "desktop_ui/new_tab_page:loading"
+    },
+    {
+        "duration": "23.0",
+        "name": "desktop_ui/omnibox:pedal"
+    },
+    {
+        "duration": "23.0",
+        "name": "desktop_ui/omnibox:scoped_search"
+    },
+    {
+        "duration": "22.0",
+        "name": "desktop_ui/omnibox:search"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/side_search:measure_memory"
+    },
+    {
+        "duration": "15.0",
+        "name": "desktop_ui/side_search:navigation"
+    },
+    {
+        "duration": "279.0",
+        "name": "desktop_ui/tab_search:100_recently_closed"
+    },
+    {
+        "duration": "47.0",
+        "name": "desktop_ui/tab_search:10_recently_closed"
+    },
+    {
+        "duration": "150.0",
+        "name": "desktop_ui/tab_search:50_recently_closed"
+    },
+    {
+        "duration": "19.0",
+        "name": "desktop_ui/tab_search:clean_slate"
+    },
+    {
+        "duration": "58.0",
+        "name": "desktop_ui/tab_search:close_and_open:2020"
+    },
+    {
+        "duration": "45.0",
+        "name": "desktop_ui/tab_search:close_and_open:loading:2020"
+    },
+    {
+        "duration": "28.0",
+        "name": "desktop_ui/tab_search:measure_memory:2tab_search"
+    },
+    {
+        "duration": "28.0",
+        "name": "desktop_ui/tab_search:measure_memory:3tab_search"
+    },
+    {
+        "duration": "26.0",
+        "name": "desktop_ui/tab_search:measure_memory:after"
+    },
+    {
+        "duration": "27.0",
+        "name": "desktop_ui/tab_search:measure_memory:before"
+    },
+    {
+        "duration": "31.0",
+        "name": "desktop_ui/tab_search:measure_memory:multiwindow"
+    },
+    {
+        "duration": "83.0",
+        "name": "desktop_ui/tab_search:scroll_up_and_down:2020"
+    },
+    {
+        "duration": "64.0",
+        "name": "desktop_ui/tab_search:top10:2020"
+    },
+    {
+        "duration": "53.0",
+        "name": "desktop_ui/tab_search:top10:loading:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "desktop_ui/tab_search:top50:2020"
+    },
+    {
+        "duration": "93.0",
+        "name": "desktop_ui/tab_search:top50:loading:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "desktop_ui/webui_tab_strip:clean_slate"
+    },
+    {
+        "duration": "26.0",
+        "name": "desktop_ui/webui_tab_strip:measure_memory"
+    },
+    {
+        "duration": "28.0",
+        "name": "desktop_ui/webui_tab_strip:measure_memory:2window"
+    },
+    {
+        "duration": "71.0",
+        "name": "desktop_ui/webui_tab_strip:top10:2020"
+    },
+    {
+        "duration": "73.0",
+        "name": "desktop_ui/webui_tab_strip:top10:loading:2020"
+    },
+    {
+        "duration": "34.0",
+        "name": "dromaeo/http://dromaeo.com?dom-attr"
+    },
+    {
+        "duration": "34.0",
+        "name": "dromaeo/http://dromaeo.com?dom-modify"
+    },
+    {
+        "duration": "50.0",
+        "name": "dromaeo/http://dromaeo.com?dom-query"
+    },
+    {
+        "duration": "30.0",
+        "name": "dromaeo/http://dromaeo.com?dom-traverse"
+    },
+    {
+        "duration": "4.0",
+        "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "4.0",
+        "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html"
+    },
+    {
+        "duration": "229.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "347.0",
+        "name": "jetstream2/JetStream2"
+    },
+    {
+        "duration": "38.0",
+        "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html"
+    },
+    {
+        "duration": "60.0",
+        "name": "loading.desktop/24h_cold"
+    },
+    {
+        "duration": "70.0",
+        "name": "loading.desktop/24h_warm"
+    },
+    {
+        "duration": "49.0",
+        "name": "loading.desktop/AirBnB_cold"
+    },
+    {
+        "duration": "65.0",
+        "name": "loading.desktop/AirBnB_warm"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Aljayyash_cold"
+    },
+    {
+        "duration": "39.0",
+        "name": "loading.desktop/Aljayyash_warm"
+    },
+    {
+        "duration": "29.0",
+        "name": "loading.desktop/AllRecipes_cold"
+    },
+    {
+        "duration": "68.0",
+        "name": "loading.desktop/AllRecipes_warm"
+    },
+    {
+        "duration": "62.0",
+        "name": "loading.desktop/ArsTechnica_cold"
+    },
+    {
+        "duration": "64.0",
+        "name": "loading.desktop/ArsTechnica_warm"
+    },
+    {
+        "duration": "35.0",
+        "name": "loading.desktop/Baidu_cold"
+    },
+    {
+        "duration": "42.0",
+        "name": "loading.desktop/Baidu_warm"
+    },
+    {
+        "duration": "45.0",
+        "name": "loading.desktop/Bhaskar_cold"
+    },
+    {
+        "duration": "57.0",
+        "name": "loading.desktop/Bhaskar_warm"
+    },
+    {
+        "duration": "46.0",
+        "name": "loading.desktop/Chosun_cold"
+    },
+    {
+        "duration": "64.0",
+        "name": "loading.desktop/Chosun_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/Colorado.edu_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "loading.desktop/Colorado.edu_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/Danawa_cold"
+    },
+    {
+        "duration": "49.0",
+        "name": "loading.desktop/Danawa_warm"
+    },
+    {
+        "duration": "45.0",
+        "name": "loading.desktop/Daum_cold"
+    },
+    {
+        "duration": "53.0",
+        "name": "loading.desktop/Daum_warm"
+    },
+    {
+        "duration": "46.0",
+        "name": "loading.desktop/Donga_cold"
+    },
+    {
+        "duration": "56.0",
+        "name": "loading.desktop/Donga_warm"
+    },
+    {
+        "duration": "45.0",
+        "name": "loading.desktop/Economist_cold"
+    },
+    {
+        "duration": "60.0",
+        "name": "loading.desktop/Economist_warm"
+    },
+    {
+        "duration": "65.0",
+        "name": "loading.desktop/Elmundo_cold"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/Elmundo_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "loading.desktop/FC2Blog_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "loading.desktop/FC2Blog_warm"
+    },
+    {
+        "duration": "41.0",
+        "name": "loading.desktop/FIFA_cold"
+    },
+    {
+        "duration": "50.0",
+        "name": "loading.desktop/FIFA_warm"
+    },
+    {
+        "duration": "45.0",
+        "name": "loading.desktop/FarsNews_cold"
+    },
+    {
+        "duration": "42.0",
+        "name": "loading.desktop/FarsNews_warm"
+    },
+    {
+        "duration": "44.0",
+        "name": "loading.desktop/Flickr_cold"
+    },
+    {
+        "duration": "53.0",
+        "name": "loading.desktop/Flickr_warm"
+    },
+    {
+        "duration": "38.0",
+        "name": "loading.desktop/FlipKart_cold"
+    },
+    {
+        "duration": "46.0",
+        "name": "loading.desktop/FlipKart_warm"
+    },
+    {
+        "duration": "49.0",
+        "name": "loading.desktop/Free.fr_cold"
+    },
+    {
+        "duration": "54.0",
+        "name": "loading.desktop/Free.fr_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/Google_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "loading.desktop/Google_warm"
+    },
+    {
+        "duration": "42.0",
+        "name": "loading.desktop/HTML5Rocks_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "loading.desktop/HTML5Rocks_warm"
+    },
+    {
+        "duration": "32.0",
+        "name": "loading.desktop/Haraj_cold"
+    },
+    {
+        "duration": "70.0",
+        "name": "loading.desktop/Haraj_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/HatenaBookmark_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "loading.desktop/HatenaBookmark_warm"
+    },
+    {
+        "duration": "41.0",
+        "name": "loading.desktop/IGN_cold"
+    },
+    {
+        "duration": "69.0",
+        "name": "loading.desktop/IGN_warm"
+    },
+    {
+        "duration": "45.0",
+        "name": "loading.desktop/IMDB_cold"
+    },
+    {
+        "duration": "55.0",
+        "name": "loading.desktop/IMDB_warm"
+    },
+    {
+        "duration": "52.0",
+        "name": "loading.desktop/IndiaTimes_cold"
+    },
+    {
+        "duration": "63.0",
+        "name": "loading.desktop/IndiaTimes_warm"
+    },
+    {
+        "duration": "53.0",
+        "name": "loading.desktop/Kakaku_cold"
+    },
+    {
+        "duration": "50.0",
+        "name": "loading.desktop/Kakaku_warm"
+    },
+    {
+        "duration": "71.0",
+        "name": "loading.desktop/Kenh14_cold"
+    },
+    {
+        "duration": "73.0",
+        "name": "loading.desktop/Kenh14_warm"
+    },
+    {
+        "duration": "53.0",
+        "name": "loading.desktop/Mercadolivre_cold"
+    },
+    {
+        "duration": "62.0",
+        "name": "loading.desktop/Mercadolivre_warm"
+    },
+    {
+        "duration": "45.0",
+        "name": "loading.desktop/Naver_cold"
+    },
+    {
+        "duration": "52.0",
+        "name": "loading.desktop/Naver_warm"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/Orange_cold"
+    },
+    {
+        "duration": "30.0",
+        "name": "loading.desktop/Orange_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/Pantip_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "loading.desktop/Pantip_warm"
+    },
+    {
+        "duration": "46.0",
+        "name": "loading.desktop/PremierLeague_cold"
+    },
+    {
+        "duration": "68.0",
+        "name": "loading.desktop/PremierLeague_warm"
+    },
+    {
+        "duration": "42.0",
+        "name": "loading.desktop/QQ_cold"
+    },
+    {
+        "duration": "53.0",
+        "name": "loading.desktop/QQ_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "loading.desktop/REI_cold"
+    },
+    {
+        "duration": "49.0",
+        "name": "loading.desktop/REI_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "loading.desktop/Ruten_cold"
+    },
+    {
+        "duration": "80.0",
+        "name": "loading.desktop/Ruten_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "loading.desktop/Sina_cold"
+    },
+    {
+        "duration": "50.0",
+        "name": "loading.desktop/Sina_warm"
+    },
+    {
+        "duration": "42.0",
+        "name": "loading.desktop/Taobao_cold"
+    },
+    {
+        "duration": "57.0",
+        "name": "loading.desktop/Taobao_warm"
+    },
+    {
+        "duration": "44.0",
+        "name": "loading.desktop/TheOnion_cold"
+    },
+    {
+        "duration": "24.0",
+        "name": "loading.desktop/TheOnion_warm"
+    },
+    {
+        "duration": "44.0",
+        "name": "loading.desktop/TheVerge_cold"
+    },
+    {
+        "duration": "56.0",
+        "name": "loading.desktop/TheVerge_warm"
+    },
+    {
+        "duration": "47.0",
+        "name": "loading.desktop/TicketMaster_cold"
+    },
+    {
+        "duration": "60.0",
+        "name": "loading.desktop/TicketMaster_warm"
+    },
+    {
+        "duration": "67.0",
+        "name": "loading.desktop/Vietnamnet_cold"
+    },
+    {
+        "duration": "80.0",
+        "name": "loading.desktop/Vietnamnet_warm"
+    },
+    {
+        "duration": "65.0",
+        "name": "loading.desktop/Vnexpress_cold"
+    },
+    {
+        "duration": "78.0",
+        "name": "loading.desktop/Vnexpress_warm"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Walgreens_cold"
+    },
+    {
+        "duration": "25.0",
+        "name": "loading.desktop/Walgreens_warm"
+    },
+    {
+        "duration": "52.0",
+        "name": "loading.desktop/Yandex_cold"
+    },
+    {
+        "duration": "56.0",
+        "name": "loading.desktop/Yandex_warm"
+    },
+    {
+        "duration": "42.0",
+        "name": "loading.desktop/amazon.co.jp_cold"
+    },
+    {
+        "duration": "54.0",
+        "name": "loading.desktop/amazon.co.jp_warm"
+    },
+    {
+        "duration": "41.0",
+        "name": "loading.desktop/ja.wikipedia_cold"
+    },
+    {
+        "duration": "51.0",
+        "name": "loading.desktop/ja.wikipedia_warm"
+    },
+    {
+        "duration": "50.0",
+        "name": "loading.desktop/money.cnn_cold"
+    },
+    {
+        "duration": "65.0",
+        "name": "loading.desktop/money.cnn_warm"
+    },
+    {
+        "duration": "50.0",
+        "name": "loading.desktop/ru.wikipedia_cold"
+    },
+    {
+        "duration": "59.0",
+        "name": "loading.desktop/ru.wikipedia_warm"
+    },
+    {
+        "duration": "59.0",
+        "name": "loading.desktop/uol.com.br_cold"
+    },
+    {
+        "duration": "79.0",
+        "name": "loading.desktop/uol.com.br_warm"
+    },
+    {
+        "duration": "38.0",
+        "name": "loading.desktop/yahoo.co.jp_cold"
+    },
+    {
+        "duration": "47.0",
+        "name": "loading.desktop/yahoo.co.jp_warm"
+    },
+    {
+        "duration": "20.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4"
+    },
+    {
+        "duration": "21.0",
+        "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4"
+    },
+    {
+        "duration": "20.0",
+        "name": "media.desktop/mse.html?media=h264_video.mp4"
+    },
+    {
+        "duration": "19.0",
+        "name": "media.desktop/mse.html?media=tulip0.av1.mp4"
+    },
+    {
+        "duration": "21.0",
+        "name": "media.desktop/mse.html?media=tulip2.vp9.webm"
+    },
+    {
+        "duration": "139.0",
+        "name": "media.desktop/video.html?src=boat_1080p60fps_vp9.webm"
+    },
+    {
+        "duration": "26.0",
+        "name": "media.desktop/video.html?src=crowd1080.mp4"
+    },
+    {
+        "duration": "27.0",
+        "name": "media.desktop/video.html?src=crowd1080.webm"
+    },
+    {
+        "duration": "25.0",
+        "name": "media.desktop/video.html?src=crowd1080_vp9.webm"
+    },
+    {
+        "duration": "138.0",
+        "name": "media.desktop/video.html?src=foodmarket_720p30fps.mp4"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/video.html?src=garden2_10s.mp4&seek"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/video.html?src=garden2_10s.webm&seek"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek"
+    },
+    {
+        "duration": "12.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4"
+    },
+    {
+        "duration": "17.0",
+        "name": "media.desktop/video.html?src=tulip0.av1.mp4&seek"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.desktop/video.html?src=tulip2.m4a&type=audio"
+    },
+    {
+        "duration": "31.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4"
+    },
+    {
+        "duration": "74.0",
+        "name": "media.desktop/video.html?src=tulip2.mp4&busyjs"
+    },
+    {
+        "duration": "31.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio"
+    },
+    {
+        "duration": "16.0",
+        "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm"
+    },
+    {
+        "duration": "26.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm&background"
+    },
+    {
+        "duration": "32.0",
+        "name": "media.desktop/video.html?src=tulip2.vp9.webm_WiFi"
+    },
+    {
+        "duration": "23.0",
+        "name": "memory.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "25.0",
+        "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "24.0",
+        "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "23.0",
+        "name": "memory.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "25.0",
+        "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "23.0",
+        "name": "memory.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "25.0",
+        "name": "memory.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "23.0",
+        "name": "memory.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "64.0",
+        "name": "memory.desktop/WebWorker"
+    },
+    {
+        "duration": "50.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "49.0",
+        "name": "power.desktop/TrivialAnimationPageSharedPageState"
+    },
+    {
+        "duration": "49.0",
+        "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState"
+    },
+    {
+        "duration": "50.0",
+        "name": "power.desktop/TrivialBlurAnimationPageSharedPageState"
+    },
+    {
+        "duration": "49.0",
+        "name": "power.desktop/TrivialCanvasPageSharedPageState"
+    },
+    {
+        "duration": "50.0",
+        "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState"
+    },
+    {
+        "duration": "49.0",
+        "name": "power.desktop/TrivialGifPageSharedPageState"
+    },
+    {
+        "duration": "53.0",
+        "name": "power.desktop/TrivialScrollingPageSharedPageState"
+    },
+    {
+        "duration": "50.0",
+        "name": "power.desktop/TrivialWebGLPageSharedPageState"
+    },
+    {
+        "duration": "16.0",
+        "name": "power.desktop/abcnews"
+    },
+    {
+        "duration": "52.0",
+        "name": "power.desktop/indiatimes"
+    },
+    {
+        "duration": "50.0",
+        "name": "power.desktop/instagram"
+    },
+    {
+        "duration": "51.0",
+        "name": "power.desktop/microsoft"
+    },
+    {
+        "duration": "53.0",
+        "name": "power.desktop/sina"
+    },
+    {
+        "duration": "60.0",
+        "name": "power.desktop/slideshare"
+    },
+    {
+        "duration": "53.0",
+        "name": "power.desktop/uol"
+    },
+    {
+        "duration": "29.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html"
+    },
+    {
+        "duration": "14.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html"
+    },
+    {
+        "duration": "24.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": "12.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html"
+    },
+    {
+        "duration": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html"
+    },
+    {
+        "duration": "9.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html"
+    },
+    {
+        "duration": "18.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html"
+    },
+    {
+        "duration": "10.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html"
+    },
+    {
+        "duration": "8.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html"
+    },
+    {
+        "duration": "13.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": "11.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html"
+    },
+    {
+        "duration": "1.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html"
+    },
+    {
+        "duration": "15.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html"
+    },
+    {
+        "duration": "16.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html"
+    },
+    {
+        "duration": "19.0",
+        "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html"
+    },
+    {
+        "duration": "67.0",
+        "name": "rendering.desktop/accu_weather_2018"
+    },
+    {
+        "duration": "71.0",
+        "name": "rendering.desktop/accu_weather_pinch_2018"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/amazon_2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/amazon_pinch_2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/analog_clock_svg"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.desktop/animometer_webgl"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.desktop/animometer_webgl_fast_call"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.desktop/animometer_webgl_indexed"
+    },
+    {
+        "duration": "42.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_fast_call"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/animometer_webgl_indexed_multi_draw_base_vertex_base_instance"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/aquarium"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.desktop/aquarium_20k"
+    },
+    {
+        "duration": "45.0",
+        "name": "rendering.desktop/aquarium_20k_fast_call"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/background_color_animation"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/balls_javascript_canvas"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/balls_javascript_css"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/balls_svg_animations"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/blob"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/blogspot_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/blogspot_pinch_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/blur_rotating_background"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/booking.com_2018"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/booking_pinch_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/bouncing_balls_15"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/bouncing_balls_shadow"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/bouncing_gradient_circles"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/bouncing_png_images"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/bouncing_svg_images"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/camera_to_webgl"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.desktop/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/canvas_animation_no_clear"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/canvas_arcs"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/canvas_font_cycler"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/canvas_lines"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/canvas_to_blob"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/cc_poster_circle"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/cc_scroll_text_only"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/chip_tune"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/cnn_2018"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/cnn_pinch_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/compositor_heavy_animation"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/crafty_mind"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/css_animations_many_keyframes"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.desktop/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.desktop/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.desktop/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.desktop/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/css_transitions_inline_style"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/css_transitions_new_element"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.desktop/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.desktop/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/css_transitions_style_element"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.desktop/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/css_transitions_updating_class"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/css_value_type_color"
+    },
+    {
+        "duration": "53.0",
+        "name": "rendering.desktop/css_value_type_filter"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.desktop/css_value_type_length"
+    },
+    {
+        "duration": "57.0",
+        "name": "rendering.desktop/css_value_type_length_complex"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.desktop/css_value_type_length_simple"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/css_value_type_path"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/css_value_type_shadow"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/css_value_type_transform_complex"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/css_value_type_transform_simple"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/docs_paper.html"
+    },
+    {
+        "duration": "59.0",
+        "name": "rendering.desktop/docs_resume.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/docs_table.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/draw_image"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/dynamic_cube_map"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/earth"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/ebay_2018"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/ebay_pinch_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/effect_games"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/espn_2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/espn_pinch_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/extra_large_texture_uploads"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/facebook_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/facebook_pinch_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/fill_clear_rect.html"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/fill_shapes"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/filter_terrain_svg"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/get_image_data_cpu.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/get_image_data_gpu.html"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/gmail_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.desktop/gmail_move_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/gmail_pinch_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.desktop/google_calendar_2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/google_calendar_pinch_2018"
+    },
+    {
+        "duration": "89.0",
+        "name": "rendering.desktop/google_docs_2018"
+    },
+    {
+        "duration": "71.0",
+        "name": "rendering.desktop/google_image_pinch_2018"
+    },
+    {
+        "duration": "64.0",
+        "name": "rendering.desktop/google_image_search_2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.desktop/google_plus_2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.desktop/google_search_pinch_2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "rendering.desktop/google_web_search_2018"
+    },
+    {
+        "duration": "61.0",
+        "name": "rendering.desktop/gpu_bound_shader.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/guimark_vector_chart"
+    },
+    {
+        "duration": "68.0",
+        "name": "rendering.desktop/hakim"
+    },
+    {
+        "duration": "64.0",
+        "name": "rendering.desktop/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "44.0",
+        "name": "rendering.desktop/ie_chalkboard"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/ie_pirate_mark"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.desktop/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "64.0",
+        "name": "rendering.desktop/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.desktop/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "72.0",
+        "name": "rendering.desktop/jarro_doverson"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "58.0",
+        "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "70.0",
+        "name": "rendering.desktop/js_full_screen_invalidation"
+    },
+    {
+        "duration": "65.0",
+        "name": "rendering.desktop/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.desktop/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "65.0",
+        "name": "rendering.desktop/js_poster_circle"
+    },
+    {
+        "duration": "61.0",
+        "name": "rendering.desktop/js_scroll_text_only"
+    },
+    {
+        "duration": "68.0",
+        "name": "rendering.desktop/kevs_3d"
+    },
+    {
+        "duration": "62.0",
+        "name": "rendering.desktop/keyframed_animations"
+    },
+    {
+        "duration": "63.0",
+        "name": "rendering.desktop/large_texture_uploads"
+    },
+    {
+        "duration": "69.0",
+        "name": "rendering.desktop/linkedin_2018"
+    },
+    {
+        "duration": "70.0",
+        "name": "rendering.desktop/linkedin_pinch_2018"
+    },
+    {
+        "duration": "111.0",
+        "name": "rendering.desktop/lost_crypt"
+    },
+    {
+        "duration": "99.0",
+        "name": "rendering.desktop/lost_crypt_fast_call"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "59.0",
+        "name": "rendering.desktop/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.desktop/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "60.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "51.0",
+        "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "65.0",
+        "name": "rendering.desktop/main_animations_half_presented"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/man_in_blue"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/many_images"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/many_planets_deep"
+    },
+    {
+        "duration": "66.0",
+        "name": "rendering.desktop/maps_move_2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/maps_perf_test"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/medium_texture_uploads"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/megi_dish"
+    },
+    {
+        "duration": "76.0",
+        "name": "rendering.desktop/microgame_fps"
+    },
+    {
+        "duration": "69.0",
+        "name": "rendering.desktop/microgame_fps_fast_call"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/microsoft_fireflies"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/microsoft_performance"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.desktop/microsoft_snow"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/microsoft_speed_reading"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/microsoft_tweet_map"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/microsoft_video_city"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/microsoft_worker_fountains"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/mix_10k"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "59.0",
+        "name": "rendering.desktop/motionmark_ramp_canvas_arcs"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/motionmark_ramp_canvas_lines"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/motionmark_ramp_design"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/motionmark_ramp_images"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/motionmark_ramp_leaves"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.desktop/motionmark_ramp_multiply"
+    },
+    {
+        "duration": "55.0",
+        "name": "rendering.desktop/motionmark_ramp_paths"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/motionmark_ramp_suits"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/new_tilings"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/no_update_compositor_animation_with_janky_main_animation"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.desktop/non_opaque_background_compositor_thread_scrolling_00050_pixels_per_second"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.desktop/non_opaque_background_main_thread_scrolling_00050_pixels_per_second"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/off_screen_main_60fps"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/offscreen_animation_no_damage"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/paint_worklet"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/particles"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/pinterest_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/put_get_image_data"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/put_image_data.html"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/raf"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/raf_animation"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/raf_canvas"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/raf_touch_animation"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.desktop/repaint_amazon_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/repaint_cnn_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/repaint_facebook_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/repaint_google_search_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/repaint_instagram_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/repaint_reddit_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/repaint_theverge_2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/repaint_twitter_2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "rendering.desktop/repaint_wikipedia_2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/repaint_yahoo_homepage_2018"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/runway_2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.desktop/san_angeles"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/second_batch_js_heavy"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/second_batch_js_light"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/second_batch_js_medium"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/sheets_render.html"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/simple_text_page"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.desktop/simple_touch_drag"
+    },
+    {
+        "duration": "81.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "73.0",
+        "name": "rendering.desktop/skelebuddies_wasm_2020_fast_call"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/small_texture_uploads"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/smash_cat"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/spielzeugz"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "38.0",
+        "name": "rendering.desktop/stroke_shapes"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/sync_scroll_offset"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/techcrunch_2018"
+    },
+    {
+        "duration": "51.0",
+        "name": "rendering.desktop/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.desktop/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "52.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "47.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_fling_05000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_fling_10000_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/text_fling_20000_pixels_per_second"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "44.0",
+        "name": "rendering.desktop/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "46.0",
+        "name": "rendering.desktop/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "54.0",
+        "name": "rendering.desktop/text_scrollbar_100_pixels_per_second"
+    },
+    {
+        "duration": "49.0",
+        "name": "rendering.desktop/text_scrollbar_1200_pixels_per_second"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/text_scrollbar_200_pixels_per_second"
+    },
+    {
+        "duration": "48.0",
+        "name": "rendering.desktop/text_scrollbar_2300_pixels_per_second"
+    },
+    {
+        "duration": "50.0",
+        "name": "rendering.desktop/text_scrollbar_700_pixels_per_second"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.desktop/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/throughput_scrolling_composited"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "78.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "70.0",
+        "name": "rendering.desktop/tiny_racing_v3_wasm_2020_fast_call"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/toBlob_duration.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.desktop/touch_handler_scrolling"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/transform_transitions"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/transform_transitions_js_block"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/twitch_2018"
+    },
+    {
+        "duration": "43.0",
+        "name": "rendering.desktop/twitch_pinch_2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/twitter_2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/twitter_pinch_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/video_to_sub_texture"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/video_to_texture"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/web_animation_value_type_color"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/web_animation_value_type_path"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "40.0",
+        "name": "rendering.desktop/web_animations_many_keyframes"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/web_animations_set_current_time"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.desktop/web_animations_simultaneous"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.desktop/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/webgl_to_texture"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.desktop/wikipedia_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/wordpress_2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.desktop/yahoo_answers_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/yahoo_news_2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.desktop/yahoo_news_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/yahoo_sports_2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "rendering.desktop/yahoo_sports_pinch_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/youtube_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.desktop/youtube_pinch_2018"
+    },
+    {
+        "duration": "77.0",
+        "name": "speedometer-future/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "82.0",
+        "name": "speedometer/http://browserbench.org/Speedometer/"
+    },
+    {
+        "duration": "118.0",
+        "name": "speedometer2-future/Speedometer2"
+    },
+    {
+        "duration": "122.0",
+        "name": "speedometer2-pcscan/Speedometer2"
+    },
+    {
+        "duration": "122.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "91.0",
+        "name": "system_health.common_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "103.0",
+        "name": "system_health.common_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "89.0",
+        "name": "system_health.common_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "81.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "90.0",
+        "name": "system_health.common_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "96.0",
+        "name": "system_health.common_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "83.0",
+        "name": "system_health.common_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.common_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "80.0",
+        "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "65.0",
+        "name": "system_health.common_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "78.0",
+        "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.common_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "system_health.common_desktop/browse:tools:photoshop:2021"
+    },
+    {
+        "duration": "175.0",
+        "name": "system_health.common_desktop/browse:tools:photoshop_warm:2021"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "11.0",
+        "name": "system_health.common_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.common_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:games:lazors"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.common_desktop/load:media:9gag"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.common_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.common_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.common_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "system_health.common_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.common_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.common_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.common_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.common_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.common_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "12.0",
+        "name": "system_health.common_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "31.0",
+        "name": "system_health.common_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.common_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.common_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "61.0",
+        "name": "system_health.common_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.memory_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "81.0",
+        "name": "system_health.memory_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "89.0",
+        "name": "system_health.memory_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "64.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "system_health.memory_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.memory_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "86.0",
+        "name": "system_health.memory_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "66.0",
+        "name": "system_health.memory_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.memory_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.memory_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.memory_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "59.0",
+        "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.memory_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "73.0",
+        "name": "system_health.memory_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/browse:tools:photoshop:2021"
+    },
+    {
+        "duration": "5.0",
+        "name": "system_health.memory_desktop/browse:tools:photoshop_warm:2021"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/browse_accessibility:media:youtube"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch:2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "system_health.memory_desktop/load:chrome:blank"
+    },
+    {
+        "duration": "40.0",
+        "name": "system_health.memory_desktop/load:games:alphabetty:2018"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.memory_desktop/load:games:bubbles:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_desktop/load:games:lazors"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/load:games:miniclip:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_desktop/load:games:spychase:2018"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.memory_desktop/load:media:9gag"
+    },
+    {
+        "duration": "45.0",
+        "name": "system_health.memory_desktop/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "43.0",
+        "name": "system_health.memory_desktop/load:media:facebook_feed:desktop:2020"
+    },
+    {
+        "duration": "43.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:2018"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.memory_desktop/load:media:facebook_photos:desktop:2020"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.memory_desktop/load:media:flickr:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_desktop/load:media:google_images:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_desktop/load:media:imgur:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_desktop/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_desktop/load:media:youtube:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/load:media:youtubelivingroom:2020"
+    },
+    {
+        "duration": "39.0",
+        "name": "system_health.memory_desktop/load:news:bbc:2018"
+    },
+    {
+        "duration": "43.0",
+        "name": "system_health.memory_desktop/load:news:cnn:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/load:news:flipboard"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_desktop/load:news:hackernews:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_desktop/load:news:nytimes:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/load:news:qq:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/load:news:reddit:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "37.0",
+        "name": "system_health.memory_desktop/load:search:amazon:2018"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.memory_desktop/load:search:baidu:2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_desktop/load:search:ebay:2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_desktop/load:search:flipkart:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_desktop/load:search:google:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_desktop/load:search:taobao:2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "system_health.memory_desktop/load:search:yahoo:2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/load:search:yandex:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_desktop/load:social:instagram:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_desktop/load:social:pinterest:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_desktop/load:social:vk:2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:tools:chat:2020"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:tools:docs:2019"
+    },
+    {
+        "duration": "15.0",
+        "name": "system_health.memory_desktop/load:tools:drive:2019"
+    },
+    {
+        "duration": "9.0",
+        "name": "system_health.memory_desktop/load:tools:gmail:2019"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_desktop/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "system_health.memory_desktop/load:tools:weather:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018"
+    },
+    {
+        "duration": "147.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "153.0",
+        "name": "system_health.memory_desktop/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24"
+    },
+    {
+        "duration": "13.0",
+        "name": "system_health.memory_desktop/multitab:misc:typical24:2018"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.memory_desktop/play:media:google_play_music"
+    },
+    {
+        "duration": "44.0",
+        "name": "system_health.memory_desktop/play:media:soundcloud:2018"
+    },
+    {
+        "duration": "0.0",
+        "name": "system_health.pcscan/browse:news:cnn:2021"
+    },
+    {
+        "duration": "0.0",
+        "name": "tab_switching.typical_25/multitab:misc:typical24"
+    },
+    {
+        "duration": "16.0",
+        "name": "tracing.tracing_with_background_memory_infra/Facebook"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/Wikipedia"
+    },
+    {
+        "duration": "13.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com"
+    },
+    {
+        "duration": "13.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/"
+    },
+    {
+        "duration": "14.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/"
+    },
+    {
+        "duration": "14.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/"
+    },
+    {
+        "duration": "15.0",
+        "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com"
+    },
+    {
+        "duration": "15.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": "52.0",
+        "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:media:imgur"
+    },
+    {
+        "duration": "155.0",
+        "name": "v8.browsing_desktop-future/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "130.0",
+        "name": "v8.browsing_desktop-future/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtube:2019"
+    },
+    {
+        "duration": "129.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "138.0",
+        "name": "v8.browsing_desktop-future/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_desktop-future/browse:news:cnn:2021"
+    },
+    {
+        "duration": "65.0",
+        "name": "v8.browsing_desktop-future/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "133.0",
+        "name": "v8.browsing_desktop-future/browse:news:reddit:2020"
+    },
+    {
+        "duration": "69.0",
+        "name": "v8.browsing_desktop-future/browse:search:google:2020"
+    },
+    {
+        "duration": "52.0",
+        "name": "v8.browsing_desktop-future/browse:search:google_india:2021"
+    },
+    {
+        "duration": "96.0",
+        "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "128.0",
+        "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "112.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter:2018"
+    },
+    {
+        "duration": "126.0",
+        "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "80.0",
+        "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:earth:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:maps:2019"
+    },
+    {
+        "duration": "117.0",
+        "name": "v8.browsing_desktop-future/browse:tools:photoshop:2021"
+    },
+    {
+        "duration": "215.0",
+        "name": "v8.browsing_desktop-future/browse:tools:photoshop_warm:2021"
+    },
+    {
+        "duration": "23.0",
+        "name": "v8.browsing_desktop-future/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "83.0",
+        "name": "v8.browsing_desktop/browse:media:googleplaystore:2021"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.browsing_desktop/browse:media:imgur"
+    },
+    {
+        "duration": "142.0",
+        "name": "v8.browsing_desktop/browse:media:pinterest:2018"
+    },
+    {
+        "duration": "116.0",
+        "name": "v8.browsing_desktop/browse:media:tumblr:2018"
+    },
+    {
+        "duration": "56.0",
+        "name": "v8.browsing_desktop/browse:media:youtube:2019"
+    },
+    {
+        "duration": "117.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv:2019"
+    },
+    {
+        "duration": "133.0",
+        "name": "v8.browsing_desktop/browse:media:youtubetv_watch:2020"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_desktop/browse:news:cnn:2021"
+    },
+    {
+        "duration": "75.0",
+        "name": "v8.browsing_desktop/browse:news:flipboard:2020"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.browsing_desktop/browse:news:hackernews:2020"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.browsing_desktop/browse:news:nytimes:2020"
+    },
+    {
+        "duration": "124.0",
+        "name": "v8.browsing_desktop/browse:news:reddit:2020"
+    },
+    {
+        "duration": "79.0",
+        "name": "v8.browsing_desktop/browse:search:google:2020"
+    },
+    {
+        "duration": "82.0",
+        "name": "v8.browsing_desktop/browse:search:google_india:2021"
+    },
+    {
+        "duration": "105.0",
+        "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "116.0",
+        "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "99.0",
+        "name": "v8.browsing_desktop/browse:social:twitter:2018"
+    },
+    {
+        "duration": "115.0",
+        "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018"
+    },
+    {
+        "duration": "89.0",
+        "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:tools:autocad:2021"
+    },
+    {
+        "duration": "63.0",
+        "name": "v8.browsing_desktop/browse:tools:docs_scrolling"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:tools:earth:2020"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-compose:2020"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-labelclick:2020"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-openconversation:2020"
+    },
+    {
+        "duration": "33.0",
+        "name": "v8.browsing_desktop/browse:tools:gmail-search:2020"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.browsing_desktop/browse:tools:maps:2019"
+    },
+    {
+        "duration": "109.0",
+        "name": "v8.browsing_desktop/browse:tools:photoshop:2021"
+    },
+    {
+        "duration": "219.0",
+        "name": "v8.browsing_desktop/browse:tools:photoshop_warm:2021"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.browsing_desktop/browse:tools:sheets:2019"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/AdsAMPAds_cold"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/AdsAMPAds_hot"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/AdsAMPAds_warm"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_cold"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_hot"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_hot"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_hot"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_cold"
+    },
+    {
+        "duration": "44.0",
+        "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_hot"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_cold"
+    },
+    {
+        "duration": "44.0",
+        "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_hot"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_warm"
+    },
+    {
+        "duration": "37.0",
+        "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_hot"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_warm"
+    },
+    {
+        "duration": "37.0",
+        "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_hot"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_warm"
+    },
+    {
+        "duration": "47.0",
+        "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_cold"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_hot"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_warm"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/http://edition.cnn.com_cold"
+    },
+    {
+        "duration": "54.0",
+        "name": "v8.runtime_stats.top_25/http://edition.cnn.com_hot"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.runtime_stats.top_25/http://edition.cnn.com_warm"
+    },
+    {
+        "duration": "38.0",
+        "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": "45.0",
+        "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": "42.0",
+        "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": "40.0",
+        "name": "v8.runtime_stats.top_25/http://inbox.google.com_cold"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.runtime_stats.top_25/http://inbox.google.com_hot"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://inbox.google.com_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_cold"
+    },
+    {
+        "duration": "47.0",
+        "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_hot"
+    },
+    {
+        "duration": "44.0",
+        "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_warm"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://meta.discourse.org_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.runtime_stats.top_25/http://meta.discourse.org_hot"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/http://meta.discourse.org_warm"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_hot"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_hot"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_hot"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_cold"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_hot"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_hot"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_warm"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_cold"
+    },
+    {
+        "duration": "47.0",
+        "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_hot"
+    },
+    {
+        "duration": "44.0",
+        "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_warm"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://weibo.com_cold"
+    },
+    {
+        "duration": "47.0",
+        "name": "v8.runtime_stats.top_25/http://weibo.com_hot"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/http://weibo.com_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/http://world.taobao.com_cold"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/http://world.taobao.com_hot"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/http://world.taobao.com_warm"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_cold"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_hot"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_warm"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_cold"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_hot"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_warm"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_cold"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_hot"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_cold"
+    },
+    {
+        "duration": "53.0",
+        "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_hot"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_cold"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_hot"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_cold"
+    },
+    {
+        "duration": "47.0",
+        "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_hot"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_cold"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_hot"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_warm"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/http://www.qq.com_cold"
+    },
+    {
+        "duration": "50.0",
+        "name": "v8.runtime_stats.top_25/http://www.qq.com_hot"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.runtime_stats.top_25/http://www.qq.com_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/http://www.reddit.com_cold"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/http://www.reddit.com_hot"
+    },
+    {
+        "duration": "42.0",
+        "name": "v8.runtime_stats.top_25/http://www.reddit.com_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_cold"
+    },
+    {
+        "duration": "60.0",
+        "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_hot"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_warm"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_cold"
+    },
+    {
+        "duration": "49.0",
+        "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_hot"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_warm"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_cold"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_hot"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_cold"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_hot"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_warm"
+    },
+    {
+        "duration": "45.0",
+        "name": "v8.runtime_stats.top_25/https://adwords.google.com_cold"
+    },
+    {
+        "duration": "55.0",
+        "name": "v8.runtime_stats.top_25/https://adwords.google.com_hot"
+    },
+    {
+        "duration": "51.0",
+        "name": "v8.runtime_stats.top_25/https://adwords.google.com_warm"
+    },
+    {
+        "duration": "36.0",
+        "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_cold"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_hot"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_warm"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_cold"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_hot"
+    },
+    {
+        "duration": "12.0",
+        "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_warm"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_cold"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_hot"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_warm"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_cold"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_hot"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_warm"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_cold"
+    },
+    {
+        "duration": "46.0",
+        "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_hot"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_warm"
+    },
+    {
+        "duration": "38.0",
+        "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_cold"
+    },
+    {
+        "duration": "43.0",
+        "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_hot"
+    },
+    {
+        "duration": "40.0",
+        "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_warm"
+    },
+    {
+        "duration": "51.0",
+        "name": "v8.runtime_stats.top_25/https://www.youtube.com_cold"
+    },
+    {
+        "duration": "48.0",
+        "name": "v8.runtime_stats.top_25/https://www.youtube.com_hot"
+    },
+    {
+        "duration": "44.0",
+        "name": "v8.runtime_stats.top_25/https://www.youtube.com_warm"
+    },
+    {
+        "duration": "140.0",
+        "name": "wasmpspdfkit/https://pspdfkit.com/webassembly-benchmark/"
+    },
+    {
+        "duration": "39.0",
+        "name": "webrtc/10s_datachannel_transfer"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/canvas_capture_peer_connection"
+    },
+    {
+        "duration": "39.0",
+        "name": "webrtc/codec_constraints_h264"
+    },
+    {
+        "duration": "39.0",
+        "name": "webrtc/codec_constraints_vp8"
+    },
+    {
+        "duration": "39.0",
+        "name": "webrtc/codec_constraints_vp9"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/hd_local_stream_10s"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_audio_processing"
+    },
+    {
+        "duration": "29.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_noop_video"
+    },
+    {
+        "duration": "29.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc"
+    },
+    {
+        "duration": "28.0",
+        "name": "webrtc/insertable_streams_video_processing_camera_webgl_video"
+    },
+    {
+        "duration": "29.0",
+        "name": "webrtc/insertable_streams_video_processing_pc_webgl_video"
+    },
+    {
+        "duration": "29.0",
+        "name": "webrtc/insertable_streams_video_processing_video_webgl_video"
+    },
+    {
+        "duration": "16.0",
+        "name": "webrtc/multiple_peerconnections"
+    },
+    {
+        "duration": "26.0",
+        "name": "webrtc/negotiate-timing"
+    },
+    {
+        "duration": "16.0",
+        "name": "webrtc/pause_play_peerconnections"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/win-10-perf-pgo_map.json b/tools/perf/core/shard_maps/win-10-perf-pgo_map.json
new file mode 100644
index 0000000..7babce3
--- /dev/null
+++ b/tools/perf/core/shard_maps/win-10-perf-pgo_map.json
@@ -0,0 +1,621 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "end": 25,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        },
+        "executables": {
+            "base_perftests": {
+                "path": "base_perftests",
+                "arguments": [
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0"
+                ]
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.css": {
+                "begin": 25,
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "end": 66,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.layout": {
+                "begin": 66,
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "blink_perf.webgpu": {
+                "abridged": false
+            },
+            "blink_perf.webgpu_fast_call": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        },
+        "executables": {
+            "components_perftests": {
+                "path": "components_perftests",
+                "arguments": [
+                    "--xvfb"
+                ]
+            },
+            "dawn_perf_tests": {
+                "path": "dawn_perf_tests",
+                "arguments": [
+                    "--test-launcher-jobs=1",
+                    "--test-launcher-retry-limit=0"
+                ]
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "desktop_ui": {
+                "end": 15,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "desktop_ui": {
+                "begin": 15,
+                "abridged": false
+            },
+            "dromaeo": {
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.desktop": {
+                "end": 14,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 14,
+                "end": 40,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 40,
+                "end": 62,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 62,
+                "end": 88,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 88,
+                "abridged": false
+            },
+            "media.desktop": {
+                "end": 14,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "sections": [
+                    {
+                        "begin": 44,
+                        "end": 45
+                    },
+                    {
+                        "begin": 75,
+                        "end": 77
+                    }
+                ],
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "media.desktop": {
+                "begin": 14,
+                "abridged": false
+            },
+            "memory.desktop": {
+                "end": 8,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "memory.desktop": {
+                "begin": 8,
+                "abridged": false
+            },
+            "octane": {
+                "abridged": false
+            },
+            "power.desktop": {
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.desktop": {
+                "end": 6,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 6,
+                "end": 42,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 42,
+                "end": 87,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 87,
+                "end": 155,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 155,
+                "end": 226,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 226,
+                "end": 271,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 271,
+                "end": 324,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 324,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "end": 40,
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 40,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "end": 23,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 23,
+                "end": 48,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 48,
+                "end": 70,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 70,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "tab_switching.typical_25": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_desktop": {
+                "end": 2,
+                "abridged": false
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "v8.browsing_desktop": {
+                "begin": 2,
+                "abridged": false
+            },
+            "v8.browsing_desktop-future": {
+                "end": 2,
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "v8.browsing_desktop-future": {
+                "begin": 2,
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        },
+        "executables": {
+            "views_perftests": {
+                "path": "views_perftests",
+                "arguments": [
+                    "--xvfb"
+                ]
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1259,
+        "predicted_min_shard_time": 1380.0,
+        "predicted_min_shard_index": 24,
+        "predicted_max_shard_time": 1726.0,
+        "predicted_max_shard_index": 25,
+        "shard #0": 1460.0,
+        "shard #1": 1458.0,
+        "shard #2": 1458.0,
+        "shard #3": 1624.0,
+        "shard #4": 1456.0,
+        "shard #5": 1477.0,
+        "shard #6": 1441.0,
+        "shard #7": 1431.0,
+        "shard #8": 1477.0,
+        "shard #9": 1441.0,
+        "shard #10": 1487.0,
+        "shard #11": 1443.0,
+        "shard #12": 1447.0,
+        "shard #13": 1442.0,
+        "shard #14": 1447.0,
+        "shard #15": 1448.0,
+        "shard #16": 1467.0,
+        "shard #17": 1432.0,
+        "shard #18": 1445.0,
+        "shard #19": 1432.0,
+        "shard #20": 1478.0,
+        "shard #21": 1413.0,
+        "shard #22": 1509.0,
+        "shard #23": 1411.0,
+        "shard #24": 1380.0,
+        "shard #25": 1726.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/win-10_amd_laptop-perf-pgo_map.json b/tools/perf/core/shard_maps/win-10_amd_laptop-perf-pgo_map.json
new file mode 100644
index 0000000..29638626
--- /dev/null
+++ b/tools/perf/core/shard_maps/win-10_amd_laptop-perf-pgo_map.json
@@ -0,0 +1,49 @@
+{
+    "0": {
+        "benchmarks": {
+            "jetstream": {
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "kraken": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "octane": {
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 5,
+        "predicted_min_shard_time": 10,
+        "predicted_min_shard_index": 0,
+        "predicted_max_shard_time": 10,
+        "predicted_max_shard_index": 0,
+        "shard #0": 10,
+        "shard #1": 10,
+        "shard #2": 10,
+        "shard #3": 10,
+        "shard #4": 10
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/win-10_laptop_low_end-perf-pgo_map.json b/tools/perf/core/shard_maps/win-10_laptop_low_end-perf-pgo_map.json
new file mode 100644
index 0000000..e926b690
--- /dev/null
+++ b/tools/perf/core/shard_maps/win-10_laptop_low_end-perf-pgo_map.json
@@ -0,0 +1,605 @@
+{
+    "0": {
+        "benchmarks": {
+            "blink_perf.accessibility": {
+                "abridged": false
+            },
+            "blink_perf.bindings": {
+                "end": 41,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "1": {
+        "benchmarks": {
+            "blink_perf.bindings": {
+                "begin": 41,
+                "abridged": false
+            },
+            "blink_perf.css": {
+                "abridged": false
+            },
+            "blink_perf.dom": {
+                "abridged": false
+            },
+            "blink_perf.events": {
+                "abridged": false
+            },
+            "blink_perf.image_decoder": {
+                "end": 4,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "blink_perf.image_decoder": {
+                "begin": 4,
+                "abridged": false
+            },
+            "blink_perf.layout": {
+                "end": 56,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
+            "blink_perf.layout": {
+                "begin": 56,
+                "abridged": false
+            },
+            "blink_perf.owp_storage": {
+                "abridged": false
+            },
+            "blink_perf.paint": {
+                "abridged": false
+            },
+            "blink_perf.parser": {
+                "end": 5,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "4": {
+        "benchmarks": {
+            "blink_perf.parser": {
+                "begin": 5,
+                "abridged": false
+            },
+            "blink_perf.shadow_dom": {
+                "end": 20,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            }
+        }
+    },
+    "5": {
+        "benchmarks": {
+            "blink_perf.shadow_dom": {
+                "begin": 20,
+                "abridged": false
+            },
+            "blink_perf.svg": {
+                "abridged": false
+            },
+            "blink_perf.webaudio": {
+                "abridged": false
+            },
+            "blink_perf.webcodecs": {
+                "abridged": false
+            },
+            "blink_perf.webgl": {
+                "abridged": false
+            },
+            "blink_perf.webgl_fast_call": {
+                "abridged": false
+            },
+            "blink_perf.webgpu": {
+                "abridged": false
+            },
+            "blink_perf.webgpu_fast_call": {
+                "abridged": false
+            },
+            "desktop_ui": {
+                "end": 5,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "6": {
+        "benchmarks": {
+            "desktop_ui": {
+                "begin": 5,
+                "abridged": false
+            },
+            "dromaeo": {
+                "end": 1,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "7": {
+        "benchmarks": {
+            "dromaeo": {
+                "begin": 1,
+                "abridged": false
+            },
+            "dummy_benchmark.noisy_benchmark_1": {
+                "abridged": false
+            },
+            "dummy_benchmark.stable_benchmark_1": {
+                "abridged": false
+            },
+            "jetstream": {
+                "abridged": false
+            },
+            "jetstream2": {
+                "abridged": false
+            },
+            "kraken": {
+                "abridged": false
+            },
+            "loading.desktop": {
+                "end": 8,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "8": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 8,
+                "end": 22,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "9": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 22,
+                "end": 38,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "10": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 38,
+                "end": 52,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "11": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 52,
+                "end": 65,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "12": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 65,
+                "end": 81,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "13": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 81,
+                "end": 96,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "14": {
+        "benchmarks": {
+            "loading.desktop": {
+                "begin": 96,
+                "abridged": false
+            },
+            "media.desktop": {
+                "end": 14,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "15": {
+        "benchmarks": {
+            "media.desktop": {
+                "begin": 14,
+                "abridged": false
+            },
+            "memory.desktop": {
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "16": {
+        "benchmarks": {
+            "octane": {
+                "abridged": false
+            },
+            "power.desktop": {
+                "abridged": false
+            },
+            "rasterize_and_record_micro.top_25": {
+                "abridged": false
+            },
+            "rendering.desktop": {
+                "end": 6,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "17": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 6,
+                "end": 46,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "18": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 46,
+                "end": 78,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "19": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 78,
+                "end": 112,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "20": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 112,
+                "end": 142,
+                "abridged": false
+            }
+        }
+    },
+    "21": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 142,
+                "end": 174,
+                "abridged": false
+            }
+        }
+    },
+    "22": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 174,
+                "end": 214,
+                "abridged": false
+            }
+        }
+    },
+    "23": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 214,
+                "end": 252,
+                "abridged": false
+            }
+        }
+    },
+    "24": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 252,
+                "end": 287,
+                "abridged": false
+            }
+        }
+    },
+    "25": {
+        "benchmarks": {
+            "rendering.desktop": {
+                "begin": 287,
+                "abridged": false
+            },
+            "speedometer": {
+                "abridged": false
+            },
+            "speedometer-future": {
+                "abridged": false
+            }
+        }
+    },
+    "26": {
+        "benchmarks": {
+            "speedometer2": {
+                "abridged": false
+            },
+            "speedometer2-future": {
+                "abridged": false
+            },
+            "speedometer2-pcscan": {
+                "abridged": false
+            },
+            "system_health.common_desktop": {
+                "end": 40,
+                "abridged": false
+            }
+        }
+    },
+    "27": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 40,
+                "end": 78,
+                "abridged": false
+            }
+        }
+    },
+    "28": {
+        "benchmarks": {
+            "system_health.common_desktop": {
+                "begin": 78,
+                "abridged": false
+            },
+            "system_health.memory_desktop": {
+                "end": 17,
+                "abridged": false
+            }
+        }
+    },
+    "29": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 17,
+                "end": 31,
+                "abridged": false
+            }
+        }
+    },
+    "30": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 31,
+                "end": 49,
+                "abridged": false
+            }
+        }
+    },
+    "31": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 49,
+                "end": 66,
+                "abridged": false
+            }
+        }
+    },
+    "32": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 66,
+                "end": 76,
+                "abridged": false
+            }
+        }
+    },
+    "33": {
+        "benchmarks": {
+            "system_health.memory_desktop": {
+                "begin": 76,
+                "abridged": false
+            },
+            "system_health.pcscan": {
+                "abridged": false
+            },
+            "tab_switching.typical_25": {
+                "abridged": false
+            },
+            "tracing.tracing_with_background_memory_infra": {
+                "abridged": false
+            },
+            "v8.browsing_desktop": {
+                "end": 14,
+                "abridged": false
+            }
+        }
+    },
+    "34": {
+        "benchmarks": {
+            "v8.browsing_desktop": {
+                "begin": 14,
+                "abridged": false
+            }
+        }
+    },
+    "35": {
+        "benchmarks": {
+            "v8.browsing_desktop-future": {
+                "end": 24,
+                "abridged": false
+            }
+        }
+    },
+    "36": {
+        "benchmarks": {
+            "v8.browsing_desktop-future": {
+                "begin": 24,
+                "abridged": false
+            },
+            "v8.runtime_stats.top_25": {
+                "end": 21,
+                "abridged": false
+            }
+        }
+    },
+    "37": {
+        "benchmarks": {
+            "v8.runtime_stats.top_25": {
+                "begin": 21,
+                "end": 59,
+                "abridged": false
+            }
+        }
+    },
+    "38": {
+        "benchmarks": {
+            "v8.runtime_stats.top_25": {
+                "begin": 59,
+                "end": 95,
+                "abridged": false
+            }
+        }
+    },
+    "39": {
+        "benchmarks": {
+            "v8.runtime_stats.top_25": {
+                "begin": 95,
+                "abridged": false
+            },
+            "wasmpspdfkit": {
+                "abridged": false
+            },
+            "webrtc": {
+                "abridged": false
+            }
+        }
+    },
+    "extra_infos": {
+        "num_stories": 1357,
+        "predicted_min_shard_time": 1541.0,
+        "predicted_min_shard_index": 35,
+        "predicted_max_shard_time": 2031.0,
+        "predicted_max_shard_index": 39,
+        "shard #0": 1588.0,
+        "shard #1": 1601.0,
+        "shard #2": 1591.0,
+        "shard #3": 1598.0,
+        "shard #4": 1612.0,
+        "shard #5": 1547.0,
+        "shard #6": 1603.0,
+        "shard #7": 1568.0,
+        "shard #8": 1618.0,
+        "shard #9": 1596.0,
+        "shard #10": 1620.0,
+        "shard #11": 1598.0,
+        "shard #12": 1632.0,
+        "shard #13": 1560.0,
+        "shard #14": 1597.0,
+        "shard #15": 1589.0,
+        "shard #16": 1602.0,
+        "shard #17": 1611.0,
+        "shard #18": 1619.0,
+        "shard #19": 1606.0,
+        "shard #20": 1628.0,
+        "shard #21": 1627.0,
+        "shard #22": 1603.0,
+        "shard #23": 1596.0,
+        "shard #24": 1575.0,
+        "shard #25": 1570.0,
+        "shard #26": 1589.0,
+        "shard #27": 1551.0,
+        "shard #28": 1582.0,
+        "shard #29": 1593.0,
+        "shard #30": 1575.0,
+        "shard #31": 1722.0,
+        "shard #32": 1611.0,
+        "shard #33": 1560.0,
+        "shard #34": 1641.0,
+        "shard #35": 1541.0,
+        "shard #36": 1584.0,
+        "shard #37": 1564.0,
+        "shard #38": 1568.0,
+        "shard #39": 2031.0
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index 5ecb89c..8ac94abb 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -50,6 +50,9 @@
 crbug.com/1023792 [ android ] blink_perf.svg/SierpinskiCarpet.html [ Skip ]
 
 # Benchmark: desktop_ui
+# Download shelf is not available on ChromeOS.
+crbug.com/1312417 [ chromeos ] desktop_ui/download_shelf:* [ Skip ]
+crbug.com/1312417 [ chromeos ] desktop_ui/download_shelf_webui:* [ Skip ]
 crbug.com/1234011 [ win-laptop ] desktop_ui/tab_search:top50:2020 [ Skip ]
 # Side search is only available for Chrome OS atm.
 crbug.com/1236631 [ win ] desktop_ui/side_search:* [ Skip ]
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc
index 5d09214..a3504db 100644
--- a/ui/accessibility/platform/ax_platform_node_base.cc
+++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -1887,27 +1887,25 @@
 
 int AXPlatformNodeBase::GetSelectionAnchor(const AXTree::Selection* selection) {
   DCHECK(selection);
-  int32_t anchor_id = selection->anchor_object_id;
+  AXNodeID anchor_id = selection->anchor_object_id;
   AXPlatformNodeBase* anchor_object =
       static_cast<AXPlatformNodeBase*>(delegate_->GetFromNodeID(anchor_id));
-
   if (!anchor_object)
     return -1;
 
-  int anchor_offset = int{selection->anchor_offset};
-  return GetHypertextOffsetFromEndpoint(anchor_object, anchor_offset);
+  return GetHypertextOffsetFromEndpoint(anchor_object,
+                                        selection->anchor_offset);
 }
 
 int AXPlatformNodeBase::GetSelectionFocus(const AXTree::Selection* selection) {
   DCHECK(selection);
-  int32_t focus_id = selection->focus_object_id;
+  AXNodeID focus_id = selection->focus_object_id;
   AXPlatformNodeBase* focus_object =
       static_cast<AXPlatformNodeBase*>(GetDelegate()->GetFromNodeID(focus_id));
   if (!focus_object)
     return -1;
 
-  int focus_offset = int{selection->focus_offset};
-  return GetHypertextOffsetFromEndpoint(focus_object, focus_offset);
+  return GetHypertextOffsetFromEndpoint(focus_object, selection->focus_offset);
 }
 
 void AXPlatformNodeBase::GetSelectionOffsets(int* selection_start,
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index 4ae5fff..19e74f8 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -2298,19 +2298,18 @@
   AXPlatformNode::NotifyAddAXModeFlags(kScreenReaderAndHTMLAccessibilityModes);
   AXTree::Selection unignored_selection =
       GetDelegate()->GetUnignoredSelection();
-  int32_t anchor_id = unignored_selection.anchor_object_id;
+
+  AXNodeID anchor_id = unignored_selection.anchor_object_id;
   auto* anchor_node =
       static_cast<AXPlatformNodeWin*>(GetDelegate()->GetFromNodeID(anchor_id));
   if (!anchor_node)
     return E_FAIL;
-  int anchor_offset = int{unignored_selection.anchor_offset};
 
-  int32_t focus_id = unignored_selection.focus_object_id;
+  AXNodeID focus_id = unignored_selection.focus_object_id;
   auto* focus_node =
       static_cast<AXPlatformNodeWin*>(GetDelegate()->GetFromNodeID(focus_id));
   if (!focus_node)
     return E_FAIL;
-  int focus_offset = int{unignored_selection.focus_offset};
 
   if (!IsDescendant(anchor_node) || !IsDescendant(focus_node))
     return S_FALSE;  // No selection within this subtree.
@@ -2318,10 +2317,10 @@
   *ranges = reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range)));
   anchor_node->AddRef();
   ranges[0]->anchor = static_cast<IAccessible*>(anchor_node);
-  ranges[0]->anchorOffset = anchor_offset;
+  ranges[0]->anchorOffset = unignored_selection.anchor_offset;
   focus_node->AddRef();
   ranges[0]->active = static_cast<IAccessible*>(focus_node);
-  ranges[0]->activeOffset = focus_offset;
+  ranges[0]->activeOffset = unignored_selection.focus_offset;
   *nRanges = 1;
   return S_OK;
 }
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn
index 921ba615..a96f6c2 100644
--- a/ui/gl/BUILD.gn
+++ b/ui/gl/BUILD.gn
@@ -75,6 +75,8 @@
     "gl_context_stub.h",
     "gl_display.cc",
     "gl_display.h",
+    "gl_display_manager.cc",
+    "gl_display_manager.h",
     "gl_enums.cc",
     "gl_enums.h",
     "gl_enums_implementation_autogen.h",
@@ -587,6 +589,7 @@
   if (use_egl) {
     sources += [
       "egl_api_unittest.cc",
+      "gl_display_manager_unittest.cc",
       "test/egl_initialization_displays_unittest.cc",
     ]
   }
diff --git a/ui/gl/gl_display.cc b/ui/gl/gl_display.cc
index 4f862ff7..5c1ca88 100644
--- a/ui/gl/gl_display.cc
+++ b/ui/gl/gl_display.cc
@@ -12,19 +12,17 @@
 
 namespace gl {
 
-GLDisplay::GLDisplay() = default;
+GLDisplay::GLDisplay(uint64_t system_device_id)
+    : system_device_id_(system_device_id) {}
 
 GLDisplay::~GLDisplay() = default;
 
 #if defined(USE_EGL)
-GLDisplayEGL::GLDisplayEGL() {
+GLDisplayEGL::GLDisplayEGL(uint64_t system_device_id)
+    : GLDisplay(system_device_id) {
   display_ = EGL_NO_DISPLAY;
 }
 
-GLDisplayEGL::GLDisplayEGL(EGLDisplay display) {
-  display_ = display;
-}
-
 GLDisplayEGL::~GLDisplayEGL() = default;
 
 EGLDisplay GLDisplayEGL::GetDisplay() {
@@ -144,7 +142,8 @@
 #endif  // defined(USE_EGL)
 
 #if defined(USE_GLX)
-GLDisplayX11::GLDisplayX11() = default;
+GLDisplayX11::GLDisplayX11(uint64_t system_device_id)
+    : GLDisplay(system_device_id) {}
 
 GLDisplayX11::~GLDisplayX11() = default;
 
@@ -153,4 +152,4 @@
 }
 #endif  // defined(USE_GLX)
 
-}  // namespace gl
\ No newline at end of file
+}  // namespace gl
diff --git a/ui/gl/gl_display.h b/ui/gl/gl_display.h
index 552f3f7..5260daf 100644
--- a/ui/gl/gl_display.h
+++ b/ui/gl/gl_display.h
@@ -5,6 +5,8 @@
 #ifndef UI_GL_GL_DISPLAY_H_
 #define UI_GL_GL_DISPLAY_H_
 
+#include <stdint.h>
+
 #include "ui/gl/gl_export.h"
 
 #if defined(USE_EGL)
@@ -13,6 +15,9 @@
 
 namespace gl {
 
+template <typename GLDisplayPlatform>
+class GLDisplayManager;
+
 class EGLDisplayPlatform {
  public:
   constexpr EGLDisplayPlatform()
@@ -59,22 +64,24 @@
 
 class GL_EXPORT GLDisplay {
  public:
-  GLDisplay();
-
   GLDisplay(const GLDisplay&) = delete;
   GLDisplay& operator=(const GLDisplay&) = delete;
 
+  uint64_t system_device_id() const { return system_device_id_; }
+
   virtual ~GLDisplay();
 
   virtual void* GetDisplay() = 0;
+
+ protected:
+  explicit GLDisplay(uint64_t system_device_id);
+
+  uint64_t system_device_id_ = 0;
 };
 
 #if defined(USE_EGL)
 class GL_EXPORT GLDisplayEGL : public GLDisplay {
  public:
-  GLDisplayEGL();
-  explicit GLDisplayEGL(EGLDisplay display);
-
   GLDisplayEGL(const GLDisplayEGL&) = delete;
   GLDisplayEGL& operator=(const GLDisplayEGL&) = delete;
 
@@ -148,6 +155,10 @@
   bool egl_angle_vulkan_image_supported = false;
 
  private:
+  friend class GLDisplayManager<GLDisplayEGL>;
+
+  explicit GLDisplayEGL(uint64_t system_device_id);
+
   EGLDisplay display_;
 };
 #endif  // defined(USE_EGL)
@@ -155,17 +166,20 @@
 #if defined(USE_GLX)
 class GL_EXPORT GLDisplayX11 : public GLDisplay {
  public:
-  GLDisplayX11();
-
   GLDisplayX11(const GLDisplayX11&) = delete;
   GLDisplayX11& operator=(const GLDisplayX11&) = delete;
 
   ~GLDisplayX11() override;
 
   void* GetDisplay() override;
+
+ private:
+  friend class GLDisplayManager<GLDisplayX11>;
+
+  explicit GLDisplayX11(uint64_t system_device_id);
 };
 #endif  // defined(USE_GLX)
 
 }  // namespace gl
 
-#endif  // UI_GL_GL_DISPLAY_H_
\ No newline at end of file
+#endif  // UI_GL_GL_DISPLAY_H_
diff --git a/ui/gl/gl_display_manager.cc b/ui/gl/gl_display_manager.cc
new file mode 100644
index 0000000..ed233f4
--- /dev/null
+++ b/ui/gl/gl_display_manager.cc
@@ -0,0 +1,15 @@
+// Copyright (c) 2022 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 "ui/gl/gl_display_manager.h"
+
+namespace gl {
+#if defined(USE_EGL)
+template class GLDisplayManager<GLDisplayEGL>;
+#endif
+
+#if defined(USE_GLX)
+template class GLDisplayManager<GLDisplayX11>;
+#endif
+}  // namespace gl
diff --git a/ui/gl/gl_display_manager.h b/ui/gl/gl_display_manager.h
new file mode 100644
index 0000000..cbb55fc
--- /dev/null
+++ b/ui/gl/gl_display_manager.h
@@ -0,0 +1,98 @@
+// Copyright (c) 2022 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 UI_GL_GL_DISPLAY_MANAGER_H_
+#define UI_GL_GL_DISPLAY_MANAGER_H_
+
+#include <map>
+#include <vector>
+
+#include "base/check.h"
+#include "base/no_destructor.h"
+#include "ui/gl/gl_display.h"
+#include "ui/gl/gl_export.h"
+#include "ui/gl/gpu_preference.h"
+
+namespace gl {
+
+template <typename GLDisplayPlatform>
+class GL_EXPORT GLDisplayManager {
+ public:
+  // Getter for the singleton. This will return nullptr on failure.
+  static GLDisplayManager<GLDisplayPlatform>* GetInstance() {
+    static base::NoDestructor<GLDisplayManager<GLDisplayPlatform>> instance;
+    return instance.get();
+  }
+
+  // This should be called before calling GetDisplay(GpuPreference).
+  // Otherwise kDefault GPU will be mapped to 0 instead of a valid
+  // system_device_id.
+  void SetGpuPreference(GpuPreference preference, uint64_t system_device_id) {
+#if DCHECK_IS_ON()
+    auto iter = gpu_preference_map_.find(preference);
+    DCHECK(gpu_preference_map_.end() == iter);
+#endif
+    gpu_preference_map_[preference] = system_device_id;
+  }
+
+  GLDisplayManager(const GLDisplayManager&) = delete;
+  GLDisplayManager& operator=(const GLDisplayManager&) = delete;
+
+  GLDisplayPlatform* GetDisplay(uint64_t system_device_id) {
+    for (const auto& display : displays_) {
+      if (display->system_device_id() == system_device_id) {
+        return display.get();
+      }
+    }
+
+    std::unique_ptr<GLDisplayPlatform> display(
+        new GLDisplayPlatform(system_device_id));
+    displays_.push_back(std::move(display));
+    return displays_.back().get();
+  }
+
+  GLDisplayPlatform* GetDisplay(GpuPreference preference) {
+    uint64_t system_device_id = 0;
+    auto iter = gpu_preference_map_.find(preference);
+    if (iter == gpu_preference_map_.end() &&
+        preference != GpuPreference::kDefault) {
+      // If kLowPower or kHighPerformance is queried but they are not set in the
+      // map, default to the kDefault GPU.
+      iter = gpu_preference_map_.find(GpuPreference::kDefault);
+    }
+    if (iter != gpu_preference_map_.end())
+      system_device_id = iter->second;
+    return GetDisplay(system_device_id);
+  }
+
+  GLDisplayPlatform* GetDefaultDisplay() {
+    return GetDisplay(GpuPreference::kDefault);
+  }
+
+ private:
+  friend class base::NoDestructor<GLDisplayManager<GLDisplayPlatform>>;
+#if defined(USE_EGL)
+  friend class GLDisplayManagerEGLTest;
+#endif
+
+  // Don't delete these functions for testing purpose.
+  // Each test constructs a scoped GLDisplayManager directly.
+  GLDisplayManager() = default;
+  virtual ~GLDisplayManager() = default;
+
+  std::vector<std::unique_ptr<GLDisplayPlatform>> displays_;
+  std::map<GpuPreference, uint64_t> gpu_preference_map_;
+};
+
+#if defined(USE_EGL)
+using GLDisplayManagerEGL = GLDisplayManager<GLDisplayEGL>;
+#endif
+
+#if defined(USE_GLX)
+using GLDisplayManagerX11 = GLDisplayManager<GLDisplayX11>;
+#endif
+
+}  // namespace gl
+
+#endif  // UI_GL_GL_DISPLAY_MANAGER_H_
diff --git a/ui/gl/gl_display_manager_unittest.cc b/ui/gl/gl_display_manager_unittest.cc
new file mode 100644
index 0000000..a4d45d98
--- /dev/null
+++ b/ui/gl/gl_display_manager_unittest.cc
@@ -0,0 +1,117 @@
+// Copyright (c) 2022 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 "ui/gl/gl_display_manager.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace gl {
+
+class GLDisplayManagerEGLTest : public testing::Test {
+ public:
+  GLDisplayManagerEGLTest() = default;
+  ~GLDisplayManagerEGLTest() override = default;
+
+ protected:
+  class ScopedGLDisplayManagerEGL {
+   public:
+    ScopedGLDisplayManagerEGL() = default;
+
+    ScopedGLDisplayManagerEGL(const ScopedGLDisplayManagerEGL&) = delete;
+    ScopedGLDisplayManagerEGL& operator=(const ScopedGLDisplayManagerEGL&) =
+        delete;
+
+    GLDisplayManagerEGL* operator->() { return &manager_; }
+
+   private:
+    GLDisplayManagerEGL manager_;
+  };
+};
+
+TEST_F(GLDisplayManagerEGLTest, SingleGPU) {
+  constexpr uint64_t kSingleGpu = 18;
+
+  // Set up.
+  ScopedGLDisplayManagerEGL manager;
+  manager->SetGpuPreference(GpuPreference::kDefault, kSingleGpu);
+
+  // Query the default display.
+  GLDisplayEGL* display = manager->GetDisplay(GpuPreference::kDefault);
+  EXPECT_NE(nullptr, display);
+  EXPECT_EQ(kSingleGpu, display->system_device_id());
+
+  // Query again should return the same display.
+  GLDisplayEGL* display_2 = manager->GetDisplay(GpuPreference::kDefault);
+  EXPECT_EQ(display, display_2);
+
+  // Query with the system device id.
+  display_2 = manager->GetDisplay(kSingleGpu);
+  EXPECT_EQ(display, display_2);
+
+  // Query the low power display. It should be the same as the default.
+  GLDisplayEGL* display_low_power =
+      manager->GetDisplay(GpuPreference::kLowPower);
+  EXPECT_EQ(display, display_low_power);
+
+  // Query the high performance display. It should be the same as the default.
+  GLDisplayEGL* display_high_performance =
+      manager->GetDisplay(GpuPreference::kHighPerformance);
+  EXPECT_EQ(display, display_high_performance);
+}
+
+TEST_F(GLDisplayManagerEGLTest, DualGPUs) {
+  constexpr uint64_t kIntegratedGpu = 18;
+  constexpr uint64_t kDiscreteGpu = 76;
+  constexpr uint64_t kDefaultGpu = kIntegratedGpu;
+
+  // Set up.
+  ScopedGLDisplayManagerEGL manager;
+  manager->SetGpuPreference(GpuPreference::kDefault, kDefaultGpu);
+  manager->SetGpuPreference(GpuPreference::kLowPower, kIntegratedGpu);
+  manager->SetGpuPreference(GpuPreference::kHighPerformance, kDiscreteGpu);
+
+  // Query the low power display.
+  GLDisplayEGL* display_low_power =
+      manager->GetDisplay(GpuPreference::kLowPower);
+  EXPECT_NE(nullptr, display_low_power);
+  EXPECT_EQ(kIntegratedGpu, display_low_power->system_device_id());
+
+  // Query again should return the same display.
+  GLDisplayEGL* display_low_power_2 =
+      manager->GetDisplay(GpuPreference::kLowPower);
+  EXPECT_EQ(display_low_power, display_low_power_2);
+
+  // Query with the system device id.
+  display_low_power_2 = manager->GetDisplay(kIntegratedGpu);
+  EXPECT_EQ(display_low_power, display_low_power_2);
+
+  // Query the high performance display.
+  GLDisplayEGL* display_high_performance =
+      manager->GetDisplay(GpuPreference::kHighPerformance);
+  EXPECT_NE(nullptr, display_high_performance);
+  EXPECT_EQ(kDiscreteGpu, display_high_performance->system_device_id());
+
+  // Query with the system device id.
+  GLDisplayEGL* display_high_performance_2 = manager->GetDisplay(kDiscreteGpu);
+  EXPECT_EQ(display_high_performance, display_high_performance_2);
+
+  // Query the default display.
+  // Due to the set up, it should be the same as the low power display.
+  GLDisplayEGL* display_default = manager->GetDisplay(GpuPreference::kDefault);
+  EXPECT_EQ(display_low_power, display_default);
+}
+
+TEST_F(GLDisplayManagerEGLTest, NoSetUp) {
+  // Verify that without setting up GPU preferences, it's still OK to call
+  // GetDisplay().
+  // This is to make sure tests that do not care about multi-gpus still work.
+  ScopedGLDisplayManagerEGL manager;
+
+  // Query the default display.
+  GLDisplayEGL* display = manager->GetDisplay(GpuPreference::kDefault);
+  EXPECT_NE(nullptr, display);
+  EXPECT_EQ(0u, display->system_device_id());
+}
+
+}  // namespace gl
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index 6d1add2..2e6ce0254 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -33,6 +33,7 @@
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_context_egl.h"
 #include "ui/gl/gl_display_egl_util.h"
+#include "ui/gl/gl_display_manager.h"
 #include "ui/gl/gl_image.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface_presentation_helper.h"
@@ -190,11 +191,6 @@
 
 class EGLGpuSwitchingObserver;
 
-// TODO(jonahr): This is a temporary static object because there is only one
-// display supported. This will be removed once each GLSurfaceEGL owns its own
-// GLDisplay reference, passed in on init.
-GLDisplayEGL* g_gl_display = nullptr;
-
 EGLGpuSwitchingObserver* g_egl_gpu_switching_observer = nullptr;
 
 constexpr const char kSwapEventTraceCategories[] = "gpu";
@@ -991,10 +987,8 @@
 
 // static
 GLDisplayEGL* GLSurfaceEGL::GetGLDisplayEGL() {
-  if (g_gl_display == nullptr) {
-    g_gl_display = new GLDisplayEGL(EGL_NO_DISPLAY);
-  }
-  return g_gl_display;
+  return GLDisplayManagerEGL::GetInstance()->GetDisplay(
+      GpuPreference::kDefault);
 }
 
 // static
@@ -1200,6 +1194,7 @@
   if (display->GetDisplay() != EGL_NO_DISPLAY) {
     DCHECK(g_driver_egl.fn.eglTerminateFn);
     eglTerminate(display->GetDisplay());
+    display->SetDisplay(EGL_NO_DISPLAY);
   }
 
   display->egl_client_extensions = nullptr;
@@ -1218,11 +1213,6 @@
   display->egl_create_context_client_arrays_supported = false;
   display->egl_angle_feature_control_supported = false;
 
-  if (g_gl_display) {
-    delete g_gl_display;
-    g_gl_display = nullptr;
-  }
-
   initialized_ = false;
 }
 
diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc
index 6c50bff..aad5e86c 100644
--- a/ui/gl/gl_surface_glx.cc
+++ b/ui/gl/gl_surface_glx.cc
@@ -31,6 +31,7 @@
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_display.h"
+#include "ui/gl/gl_display_manager.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface_presentation_helper.h"
 #include "ui/gl/glx_util.h"
@@ -419,7 +420,10 @@
 
 bool GLSurfaceGLX::initialized_ = false;
 
-GLSurfaceGLX::GLSurfaceGLX() = default;
+GLSurfaceGLX::GLSurfaceGLX() {
+  display_ =
+      GLDisplayManagerX11::GetInstance()->GetDisplay(GpuPreference::kDefault);
+}
 
 bool GLSurfaceGLX::InitializeOneOff() {
   if (initialized_)
@@ -593,7 +597,7 @@
 }
 
 GLDisplay* GLSurfaceGLX::GetGLDisplay() {
-  return &display_;
+  return display_;
 }
 
 GLSurfaceGLX::~GLSurfaceGLX() = default;
diff --git a/ui/gl/gl_surface_glx.h b/ui/gl/gl_surface_glx.h
index 9fd6a71..6101d821 100644
--- a/ui/gl/gl_surface_glx.h
+++ b/ui/gl/gl_surface_glx.h
@@ -66,7 +66,7 @@
 
  private:
   static bool initialized_;
-  GLDisplayX11 display_;
+  GLDisplayX11* display_;
 };
 
 // A surface used to render to a view.
diff --git a/ui/ozone/platform/wayland/host/wayland_popup.cc b/ui/ozone/platform/wayland/host/wayland_popup.cc
index 50fb802..4a0c6d41 100644
--- a/ui/ozone/platform/wayland/host/wayland_popup.cc
+++ b/ui/ozone/platform/wayland/host/wayland_popup.cc
@@ -173,11 +173,11 @@
 }
 
 void WaylandPopup::HandlePopupConfigure(const gfx::Rect& bounds_dip) {
-  pending_bounds_dip_ = gfx::ScaleToRoundedRect(
-      wl::TranslateBoundsToTopLevelCoordinates(
-          gfx::ScaleToRoundedRect(bounds_dip, window_scale()),
-          parent_window()->GetBounds()),
-      1.0 / window_scale());
+  auto bounds_px = gfx::ScaleToRoundedRect(bounds_dip, window_scale());
+  set_pending_bounds_dip(
+      gfx::ScaleToRoundedRect(wl::TranslateBoundsToTopLevelCoordinates(
+                                  bounds_px, parent_window()->GetBounds()),
+                              1.f / window_scale()));
 }
 
 void WaylandPopup::HandleSurfaceConfigure(uint32_t serial) {
@@ -185,7 +185,6 @@
     delegate()->OnDamageRect(gfx::Rect{{0, 0}, GetBounds().size()});
     schedule_redraw_ = false;
   }
-
   ProcessPendingBoundsDip(serial);
 }
 
@@ -201,11 +200,10 @@
 }
 
 void WaylandPopup::ApplyPendingBounds() {
-  if (pending_configures_.empty())
-    return;
-
-  base::AutoReset<bool> auto_reset(&wayland_sets_bounds_, true);
-  WaylandWindow::ApplyPendingBounds();
+  if (HasPendingConfigures()) {
+    base::AutoReset<bool> auto_reset(&wayland_sets_bounds_, true);
+    WaylandWindow::ApplyPendingBounds();
+  }
 }
 
 void WaylandPopup::UpdateWindowMask() {
diff --git a/ui/ozone/platform/wayland/host/wayland_surface.cc b/ui/ozone/platform/wayland/host/wayland_surface.cc
index 22f53c1..59852bd 100644
--- a/ui/ozone/platform/wayland/host/wayland_surface.cc
+++ b/ui/ozone/platform/wayland/host/wayland_surface.cc
@@ -466,7 +466,7 @@
 
   if (pending_state_.background_color != state_.background_color) {
     DCHECK(GetAugmentedSurface());
-    if (augmented_surface_get_version(GetAugmentedSurface()),
+    if (augmented_surface_get_version(GetAugmentedSurface()) >=
         static_cast<uint32_t>(
             AUGMENTED_SURFACE_SET_BACKGROUND_COLOR_SINCE_VERSION)) {
       wl_array color_data;
diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
index bf15f6d..7120210 100644
--- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
+++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
@@ -100,11 +100,10 @@
 }
 
 void WaylandToplevelWindow::ApplyPendingBounds() {
-  if (pending_configures_.empty())
-    return;
-  DCHECK(shell_toplevel_);
-
-  WaylandWindow::ApplyPendingBounds();
+  if (HasPendingConfigures()) {
+    DCHECK(shell_toplevel_);
+    WaylandWindow::ApplyPendingBounds();
+  }
 }
 
 void WaylandToplevelWindow::DispatchHostWindowDragMovement(
@@ -388,24 +387,26 @@
   // the fullscreen mode, wayland may set the width and height to be 1. Instead,
   // explicitly set the bounds to the current desired ones or the previous
   // bounds.
+  gfx::Rect bounds_dip(pending_bounds_dip());
   if (width_dip > 1 && height_dip > 1) {
-    pending_bounds_dip_ = gfx::Rect(x, y, width_dip, height_dip);
+    bounds_dip.SetRect(x, y, width_dip, height_dip);
     if (is_normal && frame_insets_px()) {
-      pending_bounds_dip_.Inset(
+      bounds_dip.Inset(
           -gfx::ScaleToRoundedInsets(*frame_insets_px(), 1.f / window_scale()));
-      pending_bounds_dip_.set_origin({x, y});
+      bounds_dip.set_origin({x, y});
     }
   } else if (is_normal) {
-    pending_bounds_dip_.set_size(
-        restored_size_in_dip_.IsEmpty()
-            ? gfx::ScaleToRoundedSize(GetBounds().size(), 1.0 / window_scale())
-            : restored_size_in_dip_);
+    gfx::Size size_in_dip =
+        restored_size_dip().IsEmpty()
+            ? gfx::ScaleToRoundedSize(GetBounds().size(), 1.f / window_scale())
+            : restored_size_dip();
+    bounds_dip.set_size(size_in_dip);
   }
 
-  pending_bounds_dip_ = gfx::ScaleToRoundedRect(
+  set_pending_bounds_dip(gfx::ScaleToRoundedRect(
       AdjustBoundsToConstraintsPx(
-          gfx::ScaleToRoundedRect(pending_bounds_dip_, window_scale())),
-      1 / window_scale());
+          gfx::ScaleToRoundedRect(bounds_dip, window_scale())),
+      1 / window_scale()));
 
   // Store the restored bounds if current state differs from the normal state.
   // It can be client or compositor side change from normal to something else.
@@ -441,7 +442,7 @@
 
 void WaylandToplevelWindow::HandleSurfaceConfigure(uint32_t serial) {
   ProcessPendingBoundsDip(serial);
-  pending_bounds_dip_ = gfx::Rect();
+  set_pending_bounds_dip({});
 }
 
 void WaylandToplevelWindow::UpdateVisualSize(const gfx::Size& size_px,
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc
index 1317f4d..153812a7 100644
--- a/ui/ozone/platform/wayland/host/wayland_window.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -384,11 +384,11 @@
 }
 
 void WaylandWindow::SetRestoredBoundsInDIP(const gfx::Rect& bounds) {
-  restored_size_in_dip_ = bounds.size();
+  restored_size_dip_ = bounds.size();
 }
 
 gfx::Rect WaylandWindow::GetRestoredBoundsInDIP() const {
-  return gfx::Rect(restored_size_in_dip_);
+  return gfx::Rect(restored_size_dip_);
 }
 
 bool WaylandWindow::ShouldWindowContentsBeTransparent() const {
@@ -1047,4 +1047,8 @@
   SetBoundsDip(pending_configures_.back().bounds_dip);
 }
 
+bool WaylandWindow::HasPendingConfigures() const {
+  return !pending_configures_.empty();
+}
+
 }  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_window.h b/ui/ozone/platform/wayland/host/wayland_window.h
index a0a6a01d..861b7f6 100644
--- a/ui/ozone/platform/wayland/host/wayland_window.h
+++ b/ui/ozone/platform/wayland/host/wayland_window.h
@@ -347,31 +347,14 @@
   // Applies pending bounds.
   virtual void ApplyPendingBounds();
 
-  // These bounds attributes below have suffixes that indicate units used.
-  // Wayland operates in DIP but the platform operates in physical pixels so
-  // our WaylandWindow is the link that has to translate the units. See also
-  // comments in the implementation.
-  //
-  // Bounds that will be applied when the window state is finalized. The window
-  // may get several configuration events that update the pending bounds, and
-  // only upon finalizing the state is the latest value stored as the current
-  // bounds via |ApplyPendingBounds|. Measured in DIP because updated in the
-  // handler that receives DIP from Wayland.
-  gfx::Rect pending_bounds_dip_;
+  bool HasPendingConfigures() const;
 
-  // The size of the platform window before it went maximized or fullscreen in
-  // dip.
-  gfx::Size restored_size_in_dip_;
+  gfx::Rect pending_bounds_dip() const { return pending_bounds_dip_; }
+  void set_pending_bounds_dip(const gfx::Rect rect) {
+    pending_bounds_dip_ = rect;
+  }
 
-  // Pending xdg-shell configures, once this window is drawn to |bounds_dip|,
-  // ack_configure with |serial| will be sent to the Wayland compositor.
-  struct PendingConfigure {
-    gfx::Rect bounds_dip;
-    uint32_t serial;
-    // True if this configure has been passed to the compositor for rendering.
-    bool set = false;
-  };
-  base::circular_deque<PendingConfigure> pending_configures_;
+  const gfx::Size& restored_size_dip() const { return restored_size_dip_; }
 
  private:
   friend class WaylandBufferManagerViewportTest;
@@ -495,6 +478,32 @@
   // be invoked during UpdateVisualSize() in unit tests.
   bool apply_pending_state_on_update_visual_size_ = false;
 
+  // These bounds attributes below have suffixes that indicate units used.
+  // Wayland operates in DIP but the platform operates in physical pixels so
+  // our WaylandWindow is the link that has to translate the units. See also
+  // comments in the implementation.
+  //
+  // Bounds that will be applied when the window state is finalized. The window
+  // may get several configuration events that update the pending bounds, and
+  // only upon finalizing the state is the latest value stored as the current
+  // bounds via |ApplyPendingBounds|. Measured in DIP because updated in the
+  // handler that receives DIP from Wayland.
+  gfx::Rect pending_bounds_dip_;
+
+  // The size of the platform window before it went maximized or fullscreen in
+  // dip.
+  gfx::Size restored_size_dip_;
+
+  // Pending xdg-shell configures. Once this window is drawn to |bounds_dip|,
+  // ack_configure request with |serial| will be sent to the Wayland compositor.
+  struct PendingConfigure {
+    gfx::Rect bounds_dip;
+    uint32_t serial;
+    // True if this configure has been passed to the compositor for rendering.
+    bool set = false;
+  };
+  base::circular_deque<PendingConfigure> pending_configures_;
+
   // AcceleratedWidget for this window. This will be unique even over time.
   gfx::AcceleratedWidget accelerated_widget_;
 
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd
index ed910b3..7cfe82f 100644
--- a/ui/resources/ui_resources.grd
+++ b/ui/resources/ui_resources.grd
@@ -105,8 +105,8 @@
         <structure type="chrome_scaled_image" name="IDR_DEFAULT_FAVICON_64" file="common/default_favicon_64.png" />
         <structure type="chrome_scaled_image" name="IDR_DEFAULT_FAVICON_DARK_64" file="common/default_favicon_dark_64.png" />
         <if expr="not is_android">
-          <structure type="chrome_html" name="IDR_FINGERPRINT_COMPLETE_TICK" file="vector/common/tick.json" compress="gzip" />
-          <structure type="chrome_html" name="IDR_FINGERPRINT_COMPLETE_TICK_DARK" file="vector/common/tick_dark.json" compress="gzip" />
+          <structure type="chrome_html" name="IDR_FINGERPRINT_COMPLETE_CHECK_DARK" file="vector/common/check_dark.json" compress="gzip" />
+          <structure type="chrome_html" name="IDR_FINGERPRINT_COMPLETE_CHECK_LIGHT" file="vector/common/check_light.json" compress="gzip" />
           <structure type="chrome_html" name="IDR_FINGERPRINT_ICON_ANIMATION_DARK" file="vector/common/fingerprint_enrollment_dark.json" compress="gzip" />
           <structure type="chrome_html" name="IDR_FINGERPRINT_ICON_ANIMATION_LIGHT" file="vector/common/fingerprint_enrollment_light.json" compress="gzip" />
         </if>
diff --git a/ui/resources/vector/common/check_dark.json b/ui/resources/vector/common/check_dark.json
new file mode 100644
index 0000000..ba45a73
--- /dev/null
+++ b/ui/resources/vector/common/check_dark.json
@@ -0,0 +1 @@
+{"layers":[{"nm":"check","ddd":0,"ty":4,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55,0],"ix":2,"a":0},"s":{"k":[100,100,100],"ix":6,"a":0},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":18,"op":199,"st":0,"bm":0,"ind":1,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":2,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":[{"t":19,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-23.354,7.327],[-17.285,1.232],[-23.364,-4.847],[-22.984,-4.45],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":21,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[-0.281,14.582],[-6.36,8.503],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":23,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.177,22.507],[10.234,4.065],[4.155,-2.014],[-8.177,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":25,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[16.731,-2.453],[10.652,-8.532],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":27,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[21.286,-7.023],[15.207,-13.102],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":29,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[24.658,-10.401],[18.579,-16.48],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":31,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[27.188,-12.872],[21.109,-18.951],[-8.178,10.349],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":32,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[29.171,-14.888],[23.092,-20.967],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":44,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[30.757,-16.428],[24.678,-22.507],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]}],"ix":2,"a":1},"ind":0},{"nm":"_CrOS_Color2","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[0.3568627450980392,0.7254901960784313,0.4549019607843137,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[54.927,57.099],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]},{"nm":"circle","ddd":0,"ty":4,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55.047,0],"ix":2,"a":0},"s":{"ix":6,"a":1,"k":[{"t":0,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[10,10,100]},{"t":1,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[11.75,11.75,100]},{"t":3,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[19.5,19.5,100]},{"t":4,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[33,33,100]},{"t":5,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[32.143,32.143,100]},{"t":6,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[46.747,46.747,100]},{"t":7,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[47.602,47.602,100]},{"t":8,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[60.82,60.82,100]},{"t":9,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[61.238,61.238,100]},{"t":10,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[74.1,74.1,100]},{"t":11,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[73.963,73.963,100]},{"t":12,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[85.397,85.397,100]},{"t":13,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[85.664,85.664,100]},{"t":14,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[94.531,94.531,100]},{"t":15,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[95.148,95.148,100]},{"t":16,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101.432,101.432,100]},{"t":17,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101.432,101.432,100]},{"t":18,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[105,105,100]},{"t":32,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[97,97,100]},{"t":40,"s":[100,100,100]}]},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":0,"op":199,"st":0,"bm":0,"ind":2,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":5,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[9.02,-9.024],[12.833,0],[9.02,9.02],[0,12.834],[-9.024,9.024],[-12.833,0],[-9.024,-9.02],[0,-12.833]],"o":[[-9.024,9.02],[-12.833,0],[-9.024,-9.024],[0,-12.833],[9.02,-9.02],[12.833,0],[9.02,9.024],[0,12.834]],"v":[[32.786,32.786],[0,46.316],[-32.78,32.786],[-46.316,0],[-32.78,-32.786],[0,-46.316],[32.786,-32.786],[46.316,0]]},"ix":2,"a":0},"ind":0},{"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[2.895,6.708],[4.921,4.921],[6.705,2.895],[7.623,0],[6.704,-2.894],[4.921,-4.921],[2.895,-6.704],[0,-7.623],[-2.894,-6.704],[-4.921,-4.921],[-6.708,-2.895],[-7.623,0],[-6.708,2.895],[-4.921,4.922],[-2.895,6.708],[0,7.623]],"o":[[-2.895,-6.704],[-4.921,-4.921],[-6.708,-2.894],[-7.623,0],[-6.708,2.895],[-4.921,4.921],[-2.894,6.708],[0,7.623],[2.895,6.708],[4.921,4.922],[6.704,2.895],[7.623,0],[6.705,-2.895],[4.921,-4.921],[2.895,-6.704],[0,-7.623]],"v":[[50.658,-21.496],[38.934,-38.934],[21.496,-50.658],[0,-55],[-21.49,-50.658],[-38.934,-38.934],[-50.658,-21.496],[-55,0],[-50.658,21.491],[-38.934,38.934],[-21.49,50.658],[0,55],[21.496,50.658],[38.934,38.934],[50.658,21.491],[55,0]]},"ix":2,"a":0},"ind":1},{"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":1},{"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":4},{"nm":"_CrOS_Color2","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[0.3568627450980392,0.7254901960784313,0.4549019607843137,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[55,55],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]},{"nm":"under circle 2","ddd":0,"ty":4,"parent":2,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55.609,0],"ix":2,"a":0},"s":{"ix":6,"a":1,"k":[{"t":2,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[24.444,24.444,100]},{"t":3,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[24.444,24.444,100]},{"t":4,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[65.514,65.514,100]},{"t":6,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[83.155,83.155,100]},{"t":8,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[91.796,91.796,100]},{"t":9,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[90.116,90.116,100]},{"t":10,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[94.77,94.77,100]},{"t":11,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[95.049,95.049,100]},{"t":12,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[97.47,97.47,100]},{"t":14,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[99.853,99.853,100]},{"t":15,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[99.853,99.853,100]},{"t":17,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[102.284,102.284,100]},{"t":18,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101,101,100]},{"t":19,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101,101,100]},{"t":28,"s":[100,100,100]}]},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":2,"op":199,"st":0,"bm":0,"ind":3,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":4,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[9.02,-9.024],[12.833,0],[9.02,9.02],[0,12.834],[-9.024,9.024],[-12.833,0],[-9.024,-9.02],[0,-12.833]],"o":[[-9.024,9.02],[-12.833,0],[-9.024,-9.024],[0,-12.833],[9.02,-9.02],[12.833,0],[9.02,9.024],[0,12.834]],"v":[[32.786,32.786],[0,46.316],[-32.78,32.786],[-46.316,0],[-32.78,-32.786],[0,-46.316],[32.786,-32.786],[46.316,0]]},"ix":2,"a":0},"ind":0},{"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":1},{"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":4},{"nm":"_CrOS_BaseColor","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[0.19607843137254902,0.2,0.21176470588235294,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[55,55],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]},{"nm":"under circle","ddd":0,"ty":4,"parent":2,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55,0],"ix":2,"a":0},"s":{"ix":6,"a":1,"k":[{"t":0,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101,101,100]},{"t":18,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[105,105,100]},{"t":28,"s":[102,102,100]}]},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":0,"op":199,"st":0,"bm":0,"ind":4,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":4,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[9.02,-9.024],[12.833,0],[9.02,9.02],[0,12.834],[-9.024,9.024],[-12.833,0],[-9.024,-9.02],[0,-12.833]],"o":[[-9.024,9.02],[-12.833,0],[-9.024,-9.024],[0,-12.833],[9.02,-9.02],[12.833,0],[9.02,9.024],[0,12.834]],"v":[[32.786,32.786],[0,46.316],[-32.78,32.786],[-46.316,0],[-32.78,-32.786],[0,-46.316],[32.786,-32.786],[46.316,0]]},"ix":2,"a":0},"ind":0},{"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":1},{"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":4},{"nm":"_CrOS_Color2","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[0.3568627450980392,0.7254901960784313,0.4549019607843137,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[55,55],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]}],"nm":"checkmark","v":"5.9.3","fr":60,"ip":0,"op":199,"w":110,"h":110,"ddd":0,"assets":[],"markers":[]}
\ No newline at end of file
diff --git a/ui/resources/vector/common/check_light.json b/ui/resources/vector/common/check_light.json
new file mode 100644
index 0000000..beda58bc
--- /dev/null
+++ b/ui/resources/vector/common/check_light.json
@@ -0,0 +1 @@
+{"layers":[{"nm":"check","ddd":0,"ty":4,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55,0],"ix":2,"a":0},"s":{"k":[100,100,100],"ix":6,"a":0},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":18,"op":199,"st":0,"bm":0,"ind":1,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":2,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":[{"t":19,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-23.354,7.327],[-17.285,1.232],[-23.364,-4.847],[-22.984,-4.45],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":21,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[-0.281,14.582],[-6.36,8.503],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":23,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.177,22.507],[10.234,4.065],[4.155,-2.014],[-8.177,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":25,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[16.731,-2.453],[10.652,-8.532],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":27,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[21.286,-7.023],[15.207,-13.102],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":29,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[24.658,-10.401],[18.579,-16.48],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":31,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[27.188,-12.872],[21.109,-18.951],[-8.178,10.349],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":32,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[29.171,-14.888],[23.092,-20.967],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]},{"t":44,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.178,22.507],[30.757,-16.428],[24.678,-22.507],[-8.178,10.348],[-24.678,-6.152],[-30.757,-0.073]]}]}],"ix":2,"a":1},"ind":0},{"nm":"_CrOS_Color2","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[0.203921571374,0.658823549747,0.32549020648,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[54.927,57.099],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]},{"nm":"circle","ddd":0,"ty":4,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55.047,0],"ix":2,"a":0},"s":{"ix":6,"a":1,"k":[{"t":0,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[10,10,100]},{"t":1,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[11.75,11.75,100]},{"t":3,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[19.5,19.5,100]},{"t":4,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[33,33,100]},{"t":5,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[32.143,32.143,100]},{"t":6,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[46.747,46.747,100]},{"t":7,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[47.602,47.602,100]},{"t":8,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[60.82,60.82,100]},{"t":9,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[61.238,61.238,100]},{"t":10,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[74.1,74.1,100]},{"t":11,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[73.963,73.963,100]},{"t":12,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[85.397,85.397,100]},{"t":13,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[85.664,85.664,100]},{"t":14,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[94.531,94.531,100]},{"t":15,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[95.148,95.148,100]},{"t":16,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101.432,101.432,100]},{"t":17,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101.432,101.432,100]},{"t":18,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[105,105,100]},{"t":32,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[97,97,100]},{"t":40,"s":[100,100,100]}]},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":0,"op":199,"st":0,"bm":0,"ind":2,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":5,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[9.02,-9.024],[12.833,0],[9.02,9.02],[0,12.834],[-9.024,9.024],[-12.833,0],[-9.024,-9.02],[0,-12.833]],"o":[[-9.024,9.02],[-12.833,0],[-9.024,-9.024],[0,-12.833],[9.02,-9.02],[12.833,0],[9.02,9.024],[0,12.834]],"v":[[32.786,32.786],[0,46.316],[-32.78,32.786],[-46.316,0],[-32.78,-32.786],[0,-46.316],[32.786,-32.786],[46.316,0]]},"ix":2,"a":0},"ind":0},{"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[2.895,6.708],[4.921,4.921],[6.705,2.895],[7.623,0],[6.704,-2.894],[4.921,-4.921],[2.895,-6.704],[0,-7.623],[-2.894,-6.704],[-4.921,-4.921],[-6.708,-2.895],[-7.623,0],[-6.708,2.895],[-4.921,4.922],[-2.895,6.708],[0,7.623]],"o":[[-2.895,-6.704],[-4.921,-4.921],[-6.708,-2.894],[-7.623,0],[-6.708,2.895],[-4.921,4.921],[-2.894,6.708],[0,7.623],[2.895,6.708],[4.921,4.922],[6.704,2.895],[7.623,0],[6.705,-2.895],[4.921,-4.921],[2.895,-6.704],[0,-7.623]],"v":[[50.658,-21.496],[38.934,-38.934],[21.496,-50.658],[0,-55],[-21.49,-50.658],[-38.934,-38.934],[-50.658,-21.496],[-55,0],[-50.658,21.491],[-38.934,38.934],[-21.49,50.658],[0,55],[21.496,50.658],[38.934,38.934],[50.658,21.491],[55,0]]},"ix":2,"a":0},"ind":1},{"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":1},{"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":4},{"nm":"_CrOS_Color2","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[0.203921571374,0.658823549747,0.32549020648,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[55,55],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]},{"nm":"under circle 2","ddd":0,"ty":4,"parent":2,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55.609,0],"ix":2,"a":0},"s":{"ix":6,"a":1,"k":[{"t":2,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[24.444,24.444,100]},{"t":3,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[24.444,24.444,100]},{"t":4,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[65.514,65.514,100]},{"t":6,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[83.155,83.155,100]},{"t":8,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[91.796,91.796,100]},{"t":9,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[90.116,90.116,100]},{"t":10,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[94.77,94.77,100]},{"t":11,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[95.049,95.049,100]},{"t":12,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[97.47,97.47,100]},{"t":14,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[99.853,99.853,100]},{"t":15,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[99.853,99.853,100]},{"t":17,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[102.284,102.284,100]},{"t":18,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101,101,100]},{"t":19,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101,101,100]},{"t":28,"s":[100,100,100]}]},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":2,"op":199,"st":0,"bm":0,"ind":3,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":4,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[9.02,-9.024],[12.833,0],[9.02,9.02],[0,12.834],[-9.024,9.024],[-12.833,0],[-9.024,-9.02],[0,-12.833]],"o":[[-9.024,9.02],[-12.833,0],[-9.024,-9.024],[0,-12.833],[9.02,-9.02],[12.833,0],[9.02,9.024],[0,12.834]],"v":[[32.786,32.786],[0,46.316],[-32.78,32.786],[-46.316,0],[-32.78,-32.786],[0,-46.316],[32.786,-32.786],[46.316,0]]},"ix":2,"a":0},"ind":0},{"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":1},{"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":4},{"nm":"_CrOS_BaseColor","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[1,1,1,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[55,55],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]},{"nm":"under circle","ddd":0,"ty":4,"parent":2,"sr":1,"ks":{"a":{"k":[55,55,0],"ix":1,"a":0},"p":{"k":[55,55,0],"ix":2,"a":0},"s":{"ix":6,"a":1,"k":[{"t":0,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[101,101,100]},{"t":18,"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[105,105,100]},{"t":28,"s":[102,102,100]}]},"r":{"k":0,"ix":10,"a":0},"o":{"k":100,"ix":11,"a":0}},"ao":0,"ip":0,"op":199,"st":0,"bm":0,"ind":4,"shapes":[{"nm":"Group 1","mn":"ADBE Vector Group","hd":false,"ty":"gr","cix":2,"bm":0,"np":4,"it":[{"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"ty":"sh","ks":{"k":{"c":true,"i":[[9.02,-9.024],[12.833,0],[9.02,9.02],[0,12.834],[-9.024,9.024],[-12.833,0],[-9.024,-9.02],[0,-12.833]],"o":[[-9.024,9.02],[-12.833,0],[-9.024,-9.024],[0,-12.833],[9.02,-9.02],[12.833,0],[9.02,9.024],[0,12.834]],"v":[[32.786,32.786],[0,46.316],[-32.78,32.786],[-46.316,0],[-32.78,-32.786],[0,-46.316],[32.786,-32.786],[46.316,0]]},"ix":2,"a":0},"ind":0},{"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":1},{"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false,"ty":"mm","mm":4},{"nm":"_CrOS_Color2","mn":"ADBE Vector Graphic - Fill","hd":false,"ty":"fl","bm":0,"o":{"k":100,"ix":5,"a":0},"c":{"k":[0.203921571374,0.658823549747,0.32549020648,1],"ix":4,"a":0},"r":1},{"nm":"Transform","ty":"tr","a":{"k":[0,0],"ix":1,"a":0},"p":{"k":[55,55],"ix":2,"a":0},"s":{"k":[100,100],"ix":3,"a":0},"r":{"k":0,"ix":6,"a":0},"o":{"k":100,"ix":7,"a":0},"sk":{"k":0,"ix":4,"a":0},"sa":{"k":0,"ix":5,"a":0}}]}]}],"nm":"checkmark","v":"5.9.3","fr":60,"ip":0,"op":199,"w":110,"h":110,"ddd":0,"assets":[],"markers":[]}
\ No newline at end of file
diff --git a/ui/resources/vector/common/tick.json b/ui/resources/vector/common/tick.json
deleted file mode 100644
index 3257c33..0000000
--- a/ui/resources/vector/common/tick.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.3","fr":25,"ip":0,"op":100,"w":60,"h":60,"nm":"TICK 1X","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"tick","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[63.25,77.438],[74.562,88.25],[93.875,69.062]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0]},{"t":22,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.196078431373,0.654901960784,0.325490196078,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8,"op":100,"st":-24,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"tick circle ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30.5,30.75,0],"ix":2},"a":{"a":0,"k":[79.25,79.75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-0.425,0],[0,0.403],[0.362,0],[0,-0.444]],"o":[[0.451,0],[0,-0.433],[-0.362,0],[0,0.418]],"v":[[78.743,79.75],[79.496,78.985],[78.754,78.25],[78.004,78.985]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[15.03,0],[0,-14.239],[-12.789,0],[0,15.689]],"o":[[-15.953,0],[0,15.294],[12.789,0],[0,-14.766]],"v":[[79.014,52.5],[52.382,79.527],[78.618,105.5],[105.118,79.527]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[{"i":[[14.179,0],[0,-13.433],[-12.065,0],[0,14.801]],"o":[[-15.05,0],[0,14.428],[12.065,0],[0,-13.93]],"v":[[78.999,54],[53.874,79.498],[78.626,104],[103.626,79.498]],"c":true}]},{"t":23,"s":[{"i":[[14.25,0],[0,-13.5],[-12.125,0],[0,14.875]],"o":[[-15.125,0],[0,14.5],[12.125,0],[0,-14]],"v":[[79,53.875],[53.75,79.5],[78.625,104.125],[103.75,79.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.196078431373,0.654901960784,0.325490196078,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4.2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":100,"st":-22,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/ui/resources/vector/common/tick_dark.json b/ui/resources/vector/common/tick_dark.json
deleted file mode 100644
index 22cad0e..0000000
--- a/ui/resources/vector/common/tick_dark.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.3","fr":25,"ip":0,"op":100,"w":60,"h":60,"nm":"TICK 1X","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"tick","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[63.25,77.438],[74.562,88.25],[93.875,69.062]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0]},{"t":22,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.196078431373,0.654901960784,0.325490196078,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.14,0.14,0.14,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8,"op":100,"st":-24,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"tick circle ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30.5,30.75,0],"ix":2},"a":{"a":0,"k":[79.25,79.75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-0.425,0],[0,0.403],[0.362,0],[0,-0.444]],"o":[[0.451,0],[0,-0.433],[-0.362,0],[0,0.418]],"v":[[78.743,79.75],[79.496,78.985],[78.754,78.25],[78.004,78.985]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[15.03,0],[0,-14.239],[-12.789,0],[0,15.689]],"o":[[-15.953,0],[0,15.294],[12.789,0],[0,-14.766]],"v":[[79.014,52.5],[52.382,79.527],[78.618,105.5],[105.118,79.527]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[{"i":[[14.179,0],[0,-13.433],[-12.065,0],[0,14.801]],"o":[[-15.05,0],[0,14.428],[12.065,0],[0,-13.93]],"v":[[78.999,54],[53.874,79.498],[78.626,104],[103.626,79.498]],"c":true}]},{"t":23,"s":[{"i":[[14.25,0],[0,-13.5],[-12.125,0],[0,14.875]],"o":[[-15.125,0],[0,14.5],[12.125,0],[0,-14]],"v":[[79,53.875],[53.75,79.5],[78.625,104.125],[103.75,79.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.196078431373,0.654901960784,0.325490196078,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4.2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.14,0.14,0.14,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":100,"st":-22,"bm":0}],"markers":[]}
diff --git a/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js b/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js
index ccdc6ebc..439c848 100644
--- a/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js
+++ b/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js
@@ -650,6 +650,7 @@
           networkTechnology: '',
           roaming: false,
           signalStrength: 0,
+          simLockEnabled: false,
           simLocked: false,
         };
         break;
diff --git a/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.js b/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.js
index d06c4a0..818460e 100644
--- a/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.js
+++ b/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.js
@@ -19,12 +19,12 @@
     'cr-fingerprint-icon:fingerprint-scanned-light';
 
 /** @type {string} */
-/* #export */ const FINGERPRINT_TICK_DARK_URL =
-    'chrome://theme/IDR_FINGERPRINT_COMPLETE_TICK_DARK';
+/* #export */ const FINGERPRINT_CHECK_DARK_URL =
+    'chrome://theme/IDR_FINGERPRINT_COMPLETE_CHECK_DARK';
 
 /** @type {string} */
-/* #export */ const FINGERPRINT_TICK_LIGHT_URL =
-    'chrome://theme/IDR_FINGERPRINT_COMPLETE_TICK';
+/* #export */ const FINGERPRINT_CHECK_LIGHT_URL =
+    'chrome://theme/IDR_FINGERPRINT_COMPLETE_CHECK_LIGHT';
 
 /**
  * The dark-mode color of the progress circle background: Google Grey 700.
@@ -90,7 +90,7 @@
 const ICON_WIDTH = 106;
 
 /**
- * The default size of the checkmark located in the left bottom corner of the
+ * The default size of the check mark located in the bottom-right corner of the
  * fingerprint progress circle.
  * @type {number}
  */
@@ -133,7 +133,7 @@
     /**
      * Scale factor based the configured radius (circleRadius) vs the default
      * radius (DEFAULT_PROGRESS_CIRCLE_RADIUS).
-     * This will affect the size of icons and checkmark.
+     * This will affect the size of icons and check mark.
      * @type {number}
      * @private
      */
@@ -354,8 +354,8 @@
         /** @type {CrLottieElement} */ (this.$.scanningAnimation);
     if (this.isComplete_) {
       scanningAnimation.animationUrl = this.isDarkModeActive_ ?
-          FINGERPRINT_TICK_DARK_URL :
-          FINGERPRINT_TICK_LIGHT_URL;
+          FINGERPRINT_CHECK_DARK_URL :
+          FINGERPRINT_CHECK_LIGHT_URL;
       return;
     }
     scanningAnimation.animationUrl = this.isDarkModeActive_ ?
@@ -399,6 +399,7 @@
     const scanningAnimation =
         /** @type {CrLottieElement|HTMLElement} */ (this.$.scanningAnimation);
     scanningAnimation.singleLoop = true;
+    scanningAnimation.autoplay = true;
     scanningAnimation.classList.remove('translucent');
     this.updateAnimationAsset_();
     this.resizeCheckMark_(scanningAnimation);
@@ -458,17 +459,17 @@
   },
 
   /**
-   * Resize the checkmark based on the scale and place it in the left bottom
-   * corner of fingerprint progress circle.
+   * Resize the check mark based on the scale and place it in the bottom-right
+   * corner of the fingerprint progress circle.
    * @param {!HTMLElement} target
    * @private
    */
   resizeCheckMark_(target) {
-    // Resize checkmark based on the default size and scale.
+    // Resize check mark based on the default size and scale.
     target.style.width = CHECK_MARK_SIZE * this.scale_ + 'px';
     target.style.height = CHECK_MARK_SIZE * this.scale_ + 'px';
 
-    // Place it in the left bottom corner of fingerprint progress circle.
+    // Place it in the bottom-right corner of the fingerprint progress circle.
     const top = this.$.canvas.height / 2 + this.circleRadius -
         CHECK_MARK_SIZE * this.scale_;
     const left = this.$.canvas.width / 2 + this.circleRadius -
diff --git a/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.m.d.ts b/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.m.d.ts
index 520df02..6190d5c 100644
--- a/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.m.d.ts
+++ b/ui/webui/resources/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.m.d.ts
@@ -8,8 +8,8 @@
 
 export const FINGERPRINT_SCANNED_ICON_DARK: string;
 export const FINGERPRINT_SCANNED_ICON_LIGHT: string;
-export const FINGERPRINT_TICK_DARK_URL: string;
-export const FINGERPRINT_TICK_LIGHT_URL: string;
+export const FINGERPRINT_CHECK_DARK_URL: string;
+export const FINGERPRINT_CHECK_LIGHT_URL: string;
 export const PROGRESS_CIRCLE_BACKGROUND_COLOR_DARK: string;
 export const PROGRESS_CIRCLE_BACKGROUND_COLOR_LIGHT: string;
 export const PROGRESS_CIRCLE_FILL_COLOR_DARK: string;
diff --git a/weblayer/browser/autofill_client_impl.cc b/weblayer/browser/autofill_client_impl.cc
index 9dbfeaf..ac9b91a 100644
--- a/weblayer/browser/autofill_client_impl.cc
+++ b/weblayer/browser/autofill_client_impl.cc
@@ -291,7 +291,7 @@
 }
 
 void AutofillClientImpl::PropagateAutofillPredictions(
-    content::RenderFrameHost* rfh,
+    autofill::AutofillDriver* driver,
     const std::vector<autofill::FormStructure*>& forms) {
   NOTREACHED();
 }
diff --git a/weblayer/browser/autofill_client_impl.h b/weblayer/browser/autofill_client_impl.h
index 56382efa..3f06687 100644
--- a/weblayer/browser/autofill_client_impl.h
+++ b/weblayer/browser/autofill_client_impl.h
@@ -124,7 +124,7 @@
   bool IsAutocompleteEnabled() override;
   bool IsPasswordManagerEnabled() override;
   void PropagateAutofillPredictions(
-      content::RenderFrameHost* rfh,
+      autofill::AutofillDriver* driver,
       const std::vector<autofill::FormStructure*>& forms) override;
   void DidFillOrPreviewField(const std::u16string& autofilled_value,
                              const std::u16string& profile_full_name) override;