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, + ¬ifications_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, + ¬ifications_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, + ¬ifications_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, + ¬ifications_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;